harperdb 4.2.2 → 4.2.3
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 +24 -24
- package/bin/lite.js +18 -18
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +15 -15
- package/launchServiceScripts/launchNatsReplyService.js +15 -15
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +15 -15
- package/npm-shrinkwrap.json +629 -575
- package/package.json +14 -14
- package/server/jobs/jobProcess.js +15 -15
- package/server/threads/threadServer.js +18 -18
- package/studio/fonts/FontAwesome.otf +0 -0
- package/studio/fonts/fontawesome-webfont.eot +0 -0
- package/studio/fonts/fontawesome-webfont.svg +2671 -0
- package/studio/fonts/fontawesome-webfont.ttf +0 -0
- package/studio/fonts/fontawesome-webfont.woff +0 -0
- package/studio/fonts/fontawesome-webfont.woff2 +0 -0
- package/studio/images/logo.png +0 -0
- package/utility/scripts/restartHdb.js +15 -15
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
"use strict";var BH=Object.create;var ga=Object.defineProperty;var HH=Object.getOwnPropertyDescriptor;var qH=Object.getOwnPropertyNames;var FH=Object.getPrototypeOf,GH=Object.prototype.hasOwnProperty;var a=(e,t)=>ga(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Je=(e,t)=>{for(var r in t)ga(e,r,{get:t[r],enumerable:!0})},mg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of qH(t))!GH.call(e,n)&&n!==r&&ga(e,n,{get:()=>t[n],enumerable:!(s=HH(t,n))||s.enumerable});return e};var L=(e,t,r)=>(r=e!=null?BH(FH(e)):{},mg(t||!e||!e.__esModule?ga(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>mg(ga({},"__esModule",{value:!0}),e);var Tg=T((vne,Sg)=>{var xH=require("fast-glob"),{statSync:lE,existsSync:_E,readFileSync:kH,writeFileSync:VH}=require("fs"),{spawnSync:$H,spawn:YH,execFileSync:Pne}=require("child_process"),{isMainThread:KH}=require("worker_threads"),{join:Dn,relative:pg}=require("path"),{PACKAGE_ROOT:ts}=N(),{tmpdir:WH,platform:QH}=require("os");require("source-map-support").install();var zH=["resources","server","dataLayer","components"],Aa="ts-build",dE,JH=__filename.endsWith("tsBuild.js");if(JH){if(KH){let r;try{lE(Dn(ts,Aa)),r=!0}catch{}if(r)for(let s of xH.sync(zH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=lE(Dn(ts,s)).mtimeMs-5e3,i=lE(Dn(ts,Aa,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),dE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),dE=!0;if(dE){let s=Dn(ts,"node_modules/.bin/tsc");QH()==="win32"&&(s+=".cmd");let n=$H(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Dn(WH(),"harperdb-tsc.pid"),o;if(_E(i))try{process.kill(+kH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=YH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});VH(i,c.pid.toString()),c.unref()}}}}let e=Sg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(ts)&&!s[0].includes("node_modules")){let i=pg(ts,s[0]),o;i.startsWith(Aa)?o=Dn(ts,pg(Aa,i)):o=Dn(ts,Aa,i);let c=Dn(o,r),u=c+".js";if(_E(u))return u;if(c.includes(".")&&_E(c))return c}return t(r,s,n)}}});var N=T((qne,Mg)=>{"use strict";var Ur=require("path"),jH=require("fs"),{relative:Bne,join:Hne}=Ur,{existsSync:XH}=jH;function ZH(){let e=__dirname;for(;!XH(Ur.join(e,"package.json"));){let t=Ur.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(ZH,"getHDBPackageRoot");var Ln=ZH(),Rg="js",zu=Rg,eq="harperdb-config.yaml",tq="defaultConfig.yaml",rq="hdb",gg=`harperdb.${zu}`,Ag=`customFunctionsServer.${zu}`,sq=`restartHdb.${zu}`,EE="HarperDB",Qu="Custom Functions",Ju="Clustering Hub",ju="Clustering Leaf",nq="Clustering Ingest Service",iq="Clustering Reply Service",oq="foreground.pid",aq="hdb.pid",cq="data",uq={HDB:EE,CLUSTERING_HUB:Ju,CLUSTERING_LEAF:ju,CLUSTERING_INGEST_SERVICE:nq,CLUSTERING_REPLY_SERVICE:iq,CUSTOM_FUNCTIONS:Qu,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},lq={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_q={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},dq={harperdb:EE,"clustering hub":Ju,"clustering leaf":ju,"custom functions":Qu,custom_functions:Qu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},fq={CLUSTERING_HUB_PROC_DESCRIPTOR:Ju,CLUSTERING_LEAF_PROC_DESCRIPTOR:ju},fE={HDB:Ur.join(Ln,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Ln,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Ln,"server/nats"),CLUSTERING_LEAF:Ur.join(Ln,"server/nats")},Eq={HDB:Ur.join(fE.HDB,gg),CUSTOM_FUNCTIONS:Ur.join(fE.CUSTOM_FUNCTIONS,Ag)},hq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Ln,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Ln,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Ln,"launchServiceScripts/launchUpdateNodes4-0-0.js")},mq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Og="support@harperdb.io",pq="customer-success@harperdb.io",Ng=1,Sq=4141,bg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Tq="https://www.harperdb.io/product",Rq=`For support, please submit a request at ${bg} or contact ${Og}`,yg=`For license support, please contact ${pq}`,gq="None of the specified records were found.",Aq="hash attribute not found",Oq=`Your current license only supports ${Ng} role. ${yg}`,Nq="Your current license only supports 3 connections to a node.",bq="127.0.0.1",yq=1,Iq=/^\.$/,wq=/^\.\.$/,Cq="U+002E",Dq=/\//g,Lq="U+002F",Uq=/U\+002F/g,Mq=/^U\+002E$/,Pq=/^U\+002EU\+002E$/,vq="d",Bq=999999,Hq="*",qq="--max-old-space-size=",Fq="system",Gq="__hdb_hash",xq=".harperdb",kq=".hdb",Vq="keys",$q="hdb_boot_properties.file",Yq=".updateConfig.json",Kq="SIGTSTP",Wq=24,Qq=6e4,zq=448,Jq="blob",jq="trash",Xq="database",Zq="schema",eF="transactions",tF=".count",rF="id",sF="PROCESS_NAME",Ig={SETTINGS_PATH_KEY:"settings_path"},wg=require("lodash"),nF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},iF={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},oF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},aF={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"},cF={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"},_r="hdb_internal:",uF={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},lF={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"},_F="060493.ks",dF=".license",fF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},EF={CSV:".csv",JSON:".json"},hF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},mF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Oa={};Oa[J.INSERT]=J.INSERT;Oa[J.UPDATE]=J.UPDATE;Oa[J.UPSERT]=J.UPSERT;Oa[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var pF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},SF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Cg={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},TF=wg.invert(Cg),RF={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"},O={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},Dg={settings_path:Ig.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];Dg[t.toLowerCase()]=t}var gF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},AF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},OF={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"},NF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bF={VERSION_DEFAULT:"2.2.0"},yF={DEVELOPMENT:8192,DEFAULT:512},IF={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"},wF={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"},CF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Lg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},DF=Symbol("metadata"),LF="__clustering__",UF=Object.values(Lg),MF=15984864e5,Ug={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},PF=wg.invert(Ug),vF={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"},BF=111,HF=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:mG.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(RG,"findPs")});var je=T((Kne,Jg)=>{"use strict";var gG="__dbis__",AG="__txns__",OG="__environment_name__",NG="__dbi_defintion__",bG={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"},yG=["__createdtime__","__updatedtime__"],IG="\uFFFF",zg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},wG=Object.values(zg);Jg.exports={AUDIT_STORE_NAME:AG,INTERNAL_DBIS_NAME:gG,DBI_DEFINITION_NAME:NG,SEARCH_TYPES:bG,TIMESTAMP_NAMES:yG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:OG,TRANSACTIONS_DBI_NAMES_ENUM:zg,TRANSACTIONS_DBIS:wG,OVERFLOW_MARKER:IG}});var dr=T((Wne,iA)=>{"use strict";var jg=N(),Xg=je(),Zg={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},eA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tA={500:eA("There was an error processing your request."),400:"Invalid request"},CG=tA[Zg.INTERNAL_SERVER_ERROR],DG={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.`},LG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},UG={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"},MG={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${Xg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Xg.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"},PG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${jg.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 ${jg.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"},rA={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"},vG={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},BG={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},HG={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},qG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},FG={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`},sA={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.`},nA={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},GG={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},xG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},kG={...rA,...UG,...DG,...vG,...BG,...HG,...qG,...FG,...PG,...sA,...nA,...GG,...xG,...LG};iA.exports={CHECK_LOGS_WRAPPER:eA,HDB_ERROR_MSGS:kG,DEFAULT_ERROR_MSGS:tA,DEFAULT_ERROR_RESP:CG,HTTP_STATUS_CODES:Zg,LMDB_ERRORS_ENUM:MG,AUTHENTICATION_ERROR_MSGS:rA,VALIDATION_ERROR_MSGS:sA,ITC_ERRORS:nA}});var X=T((zne,cA)=>{"use strict";var eo=dr(),VG=q(),$G=N(),rl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,oA),this.statusCode=s||eo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(eo.DEFAULT_ERROR_MSGS[s]?eo.DEFAULT_ERROR_MSGS[s]:eo.DEFAULT_ERROR_MSGS[eo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&VG[n](i)}},OE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},NE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function oA(e,t,r,s=$G.LOG_LEVELS.ERROR,n=null,i=!1){if(aA(e))return e;let o=new rl(e,t,r,s,n);return i&&delete o.stack,o}a(oA,"handleHDBError");function aA(e){return e.__proto__.constructor.name===rl.name}a(aA,"isHDBError");cA.exports={isHDBError:aA,handleHDBError:oA,ClientError:OE,ServerError:NE,hdb_errors:eo}});var Be=T((jne,hA)=>{"use strict";var Ma=N(),YG=V(),Kt=j(),Pa=require("path"),KG=require("minimist"),uA=require("fs-extra"),lA=require("lodash");Kt.initSync();var{CONFIG_PARAMS:Un,DATABASES_PARAM_CONFIG:Ca,SYSTEM_SCHEMA_NAME:sl}=Ma,Da,La,Ua;function _A(){if(Da!==void 0)return Da;if(Kt.getHdbBasePath()!==void 0)return Da=Kt.get(Un.STORAGE_PATH)||Pa.join(Kt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),Da}a(_A,"getBaseSchemaPath");function dA(){if(La!==void 0)return La;if(Kt.getHdbBasePath()!==void 0)return La=EA(sl),La}a(dA,"getSystemSchemaPath");function fA(){if(Ua!==void 0)return Ua;if(Kt.getHdbBasePath()!==void 0)return Ua=Kt.get(Ma.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Pa.join(Kt.getHdbBasePath(),Ma.TRANSACTIONS_DIR_NAME),Ua}a(fA,"getTransactionAuditStoreBasePath");function WG(e,t){let r=Kt.get(Un.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(fA(),e.toString())}a(WG,"getTransactionAuditStorePath");function EA(e,t){e=e.toString(),t=t&&t.toString();let r=Kt.get(Ma.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Pa.join(_A(),e)}a(EA,"getSchemaPath");function QG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,KG(process.argv));let s=r[Un.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!YG.isObject(s))throw o;i=s}for(let o of i){let c=o[sl];if(!c)continue;let u=Kt.get(Un.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return lA.set(u,[sl,Ca.TABLES,t,Ca.PATH],_),Kt.setProperty(Un.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return lA.set(u,[sl,Ca.PATH],l),Kt.setProperty(Un.DATABASES,u),l}}let n=r[Un.STORAGE_PATH.toUpperCase()];if(n){if(!uA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Pa.join(n,e);return uA.mkdirsSync(i),Kt.setProperty(Un.STORAGE_PATH,n),i}return dA()}a(QG,"initSystemSchemaPaths");function zG(){Da=void 0,La=void 0,Ua=void 0}a(zG,"resetPaths");hA.exports={getBaseSchemaPath:_A,getSystemSchemaPath:dA,getTransactionAuditStorePath:WG,getTransactionAuditStoreBasePath:fA,getSchemaPath:EA,initSystemSchemaPaths:QG,resetPaths:zG}});var fr=T((tie,RA)=>{"use strict";var JG=dr().LMDB_ERRORS_ENUM,Zne=require("lmdb"),jG=je(),eie=require("buffer").Buffer,{OVERFLOW_MARKER:mA,MAX_SEARCH_KEY_LENGTH:nl}=jG,pA=["number","string","symbol","boolean","bigint"];function XG(e){if(e=e?.primaryStore||e,!e)throw new Error(JG.ENV_REQUIRED)}a(XG,"validateEnv");function ZG(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(ZG,"stringifyData");function ex(e){return e instanceof Date?e.valueOf():e}a(ex,"convertKeyValueToWrite");function tx(e){if(e==null)return;if(pA.includes(typeof e))return e.length>nl?[e.slice(0,nl)+mA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(pA.includes(typeof n))n.length>nl?t.push(n.slice(0,nl)+mA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(tx,"getIndexedValues");var il=0,SA=0;function TA(){SA=Date.now()-performance.now()}a(TA,"adjustStartTime");TA();var rx=6e4;setInterval(TA,rx).unref();function sx(){let e=performance.now()+SA;return e>il?(il=e,e):(il+=488e-6,il)}a(sx,"getNextMonotonicTime");RA.exports={validateEnv:XG,stringifyData:ZG,convertKeyValueToWrite:ex,getNextMonotonicTime:sx,getIndexedValues:tx}});var gA,rs,bE,va=Te(()=>{gA=require("events"),rs=class extends gA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new bE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},bE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Mr(e){return e[Bt]||(e[Bt]=Object.create(null))}function ul(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a number, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ss.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ss.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ss.ClientError(`${c} must be a Date, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Mr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ss.ClientError(`${c} must be an object, attempt to assign ${l}`);Mr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=AA(d,o);if(f)return l||(l=this[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ss.ClientError("Can not add a property to a sealed table schema");Mr(this)[o]=c}),i("deleteProperty",function(o){Mr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function AA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Re]=n}},ul(r,t)),new r(e)):new ol(e);case Array:let s=new cl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=AA(o,t?.elements)),s[n]=o}return s}}function ll(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=ll(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Ba(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Ba(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ba(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function al(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[_i]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Re]===n){if(al(i))return!0}else return!0}}else{let r=e[Bt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Re]===i){if(al(n))return!0}else return!0}else return!0}}return!1}var ss,Bt,ol,_i,cl,_l=Te(()=>{ns();ss=L(X()),Bt=Symbol("own-data");a(Mr,"getChanges");a(ul,"assignTrackedAccessors");a(AA,"trackObject");ol=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};ul(ol,{});a(ll,"collapseData");a(Ba,"deepFreeze");a(al,"hasChanges");_i=Symbol.for("has-array-changes"),cl=class extends Array{static{a(this,"TrackedArray")}[_i];constructor(t){super(t)}splice(...t){return this[_i]=!0,super.splice(...t)}push(...t){return this[_i]=!0,super.push(...t)}pop(){return this[_i]=!0,super.pop()}unshift(...t){return this[_i]=!0,super.unshift(...t)}shift(){return this[_i]=!0,super.shift()}};cl.prototype.constructor=Array});function ax(){ox=setInterval(function(){for(let e of yE)if(e.stale){let t=e[me]?.url;OA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},ix).unref()}var IE,OA,nx,yE,di,dl,ix,ox,wE=Te(()=>{IE=L(fr()),OA=L(q());ns();nx=100,yE=new Set,di=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),yE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(yE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,IE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let g=S();E?E.push?E.push(g):E=[E,g]:E=g}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<nx>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},dl=class extends di{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,IE.getNextMonotonicTime)())}getReadTxn(){}},ix=3e4;a(ax,"startMonitoringTxns");ax()});function ke(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new di;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var NA,fi=Te(()=>{NA=require("../index");ns();wE();a(ke,"transaction");(0,NA._assignPackageExport)("transaction",ke);ke.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ke.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function DE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new to.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(IA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=ws.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case ht.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new to.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new to.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=LE(e);if(!S)throw new to.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:I})=>new Promise((b,Y)=>setImmediate(()=>{try{b(I&&S(I)?g:yA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function LE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),IA[t]||t){case ht.SEARCH_TYPES.EQUALS:case void 0:return Is(r,n=>n===s);case ht.SEARCH_TYPES.CONTAINS:return Is(r,n=>n?.toString().includes(s));case ht.SEARCH_TYPES.ENDS_WITH:case ht.SEARCH_TYPES._ENDS_WITH:return Is(r,n=>n?.toString().endsWith(s));case ht.SEARCH_TYPES.STARTS_WITH:case ht.SEARCH_TYPES._STARTS_WITH:return Is(r,n=>typeof n=="string"&&n.startsWith(s));case ht.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Is(r,n=>(0,ws.compareKeys)(n,s[0])>=0&&(0,ws.compareKeys)(n,s[1])<=0);case"gt":case ht.SEARCH_TYPES.GREATER_THAN:case ht.SEARCH_TYPES._GREATER_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)>0);case"ge":case ht.SEARCH_TYPES.GREATER_THAN_EQUAL:case ht.SEARCH_TYPES._GREATER_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)>=0);case ht.SEARCH_TYPES.LESS_THAN:case"lt":case ht.SEARCH_TYPES._LESS_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)<0);case"le":case ht.SEARCH_TYPES.LESS_THAN_EQUAL:case ht.SEARCH_TYPES._LESS_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)<=0);case"ne":return Is(r,n=>(0,ws.compareKeys)(n,s)!==0);default:throw new to.ClientError(`Unknown query comparator "${t}"`)}}function Is(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function fl(e){if(!e)return;let t=new CE,r,s,n,i,o,c=bA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=cx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?ux:bA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var to,ht,ws,yA,cx,IA,bA,ux,CE,El=Te(()=>{to=L(X()),ht=L(je()),ws=require("ordered-binary"),yA=require("lmdb"),cx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(DE,"idsForCondition");IA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(LE,"filterByType");a(Is,"attributeComparator");bA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,ux=/([^&|*=]+)([&|*=]*)/g;a(fl,"parseQuery");CE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var PE={};Je(PE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>is,RECORD_PROPERTY:()=>Re,Resource:()=>At,SAVE_UPDATES_PROPERTY:()=>MA,snake_case:()=>_x});function _x(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function wA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new ME(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return ke(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[MA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new hl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new hl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function vr(e,t){let r=new UA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function UE(e){let t=e[Re];if(t){let r=e[Bt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function CA(e){if(typeof e=="string")return t=>UE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=UE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=UE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var DA,LA,UA,me,Ie,is,MA,Re,lx,At,hl,ME,ns=Te(()=>{DA=require("crypto");va();LA=require("../index"),UA=L(X());_l();fi();El();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),is=Symbol("is-collection"),MA=Symbol("save-updates"),Re=Symbol("stored-record"),lx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},At=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Pr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=CA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Pr(function(t,r,s,n){if(Array.isArray(n)&&t[is]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,DA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),ke(s,()=>{let i=new this(n,s),o=i.put?i.put(r):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Pr(function(t,r,s,n){return t.invalidate?t.invalidate(r):vr(t,"delete")},{hasContent:!1,type:"update"});static post=Pr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(n,r):vr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(r):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=CA(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(n,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(n,r):vr(t,"move")},{type:"delete"});post(t){if(this[is])return this.constructor.create(this[Ie],t,this[me]);vr(this,"post")}static isCollection(t){return t?.[is]}static coerceId(t){return t}static parseQuery(t){return fl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&lx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:wA(t,this)}}return wA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ie]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ie],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[is]=!0),n}subscribe(t){return new rs}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new rs}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Ie]}getContext(){return this[me]}};At.prototype[me]=null;(0,LA._assignPackageExport)("Resource",At);a(_x,"snake_case");hl=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(wA,"pathToId");ME=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(UE,"selectFromObject");a(CA,"transformForSelect")});var ro={};Je(ro,{server:()=>lt});var PA,lt,Br=Te(()=>{PA=require("../index"),lt={};(0,PA._assignPackageExport)("server",lt)});var BE={};Je(BE,{loadGQLSchema:()=>Ex,start:()=>vE,startOnMainThread:()=>fx});function vE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(G){if(G.kind==="NonNullType"){let B=Q(G.type);return B.nullable=!1,B}if(G.kind==="ListType")return{type:"array",elements:Q(G.type)};let K={type:G.name?.value};return Object.defineProperty(K,"location",{value:G.loc.startToken}),K};a(Q,"getProperty");let g=S.name.value,I=[],b={table:null,database:null,properties:I};f.set(g,b);for(let G of S.directives){if(G.name.value==="table"){for(let w of G.arguments)b[w.name.value]=w.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,E.push(b)}if(G.name.value==="sealed"&&(b.sealed=!0),G.name.value==="export"){b.export=!0;for(let w of G.arguments)w.name.value==="name"&&(b.export={name:w.value.value})}}let Y=!1;for(let G of S.fields){let w=Q(G.type);w.name=G.name.value,I.push(w);for(let K of G.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}b.typeName=g,g==="Query"&&(h=b)}function p(S){let g=f.get(S.type);g?S.properties=g.properties:S.type==="array"?p(S.elements):dx.includes(S.type)||(0,vA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let g of S.properties)p(g);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,ml.dirname)(s),S.tableClass):i.set((0,ml.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let g=f.get(S.type);if(!g)throw new Error(`${S.type} was not found as a Query export`);i.set((0,ml.dirname)(s)+"/"+S.name,g.tableClass)}}}var ml,vA,dx,fx,Ex,BA=Te(()=>{ml=require("path");fe();vA=L(Ge()),dx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(vE,"start");fx=vE,Ex=vE({ensureTable:tt}).handleFile});async function pl(e){return hx?(Ha||(Ha=mx(Sx)),(await(await Ha).import(e)).namespace):import(e)}async function mx(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ha=new Compartment({console,Math,Date,fetch:px,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,qA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:At,tables:Er,databases:Ve})}};let s=await(0,HA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}function px(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Sx(){return{Resource:At,tables:Er}}var HA,qA,hx,Ha,HE=Te(()=>{ns();fe();HA=require("fs/promises"),qA=require("path"),hx=!1;a(pl,"secureImport");a(mx,"getCompartment");a(px,"secureOnlyFetch");a(Sx,"getGlobalVars")});var FE={};Je(FE,{handleFile:()=>Tx});async function Tx(e,t,r,s){let n=new Map,i=(0,FA.pathToFileURL)(r).toString(),o=await pl(i);u(o.default)&&s.set((0,qE.dirname)(t),o.default),c(o,(0,qE.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var FA,qE,GA=Te(()=>{FA=require("url");HE();qE=require("path");a(Tx,"handleFile")});var xE={};Je(xE,{start:()=>Rx});function Rx({resources:e}){e.set("login",GE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var GE,xA=Te(()=>{ns();a(Rx,"start");GE=class extends At{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var VE=T((Mie,$A)=>{"use strict";var{Readable:gx}=require("stream"),Ax=1e4;$A.exports={streamAsJSON(e){return new kE({value:e})}};var kE=class extends gx{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),kA)}catch(n){yield kA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);VA(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>Ax?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return VA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};function kA(e){return console.error(e),JSON.stringify(e.toString())}a(kA,"handleError");function VA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(VA,"when")});var sO=T((Bie,rO)=>{"use strict";var $E=require("recursive-iterator"),Ox=require("alasql"),YE=require("clone"),YA=V(),{handleHDBError:KA,hdb_errors:Nx}=X(),{HDB_ERROR_MSGS:WA,HTTP_STATUS_CODES:QA}=Nx,{getDatabases:bx}=(fe(),Z(Ce)),yx=["DISTINCT_ARRAY"],zA=Symbol("validateTables"),KE=Symbol("validateTable"),vie=Symbol("getAllColumns"),JA=Symbol("validateAllColumns"),Sl=Symbol("findColumn"),jA=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),WE=Symbol("validateColumn"),XA=Symbol("setColumnsForTable"),ZA=Symbol("checkColumnsForAsterisk"),eO=Symbol("validateGroupBy"),tO=Symbol("hasColumns"),QE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[zA](),this[ZA](),this[JA]()}[zA](){if(this[tO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[KE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[KE](t.table)})}}[tO](){let t=!1,r=new $E(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[KE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=bx();if(!r[t.databaseid])throw KA(new Error,WA.SCHEMA_NOT_FOUND(t.databaseid),QA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw KA(new Error,WA.TABLE_NOT_FOUND(t.databaseid,t.tableid),QA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=YE(n);i.table=YE(t),this.attributes.push(i)})}[Sl](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)}[ZA](){let t=new $E(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[XA](r.tableid)}[XA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Ox.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[JA](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[eO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new $E(t),n=[];for(let{node:i,path:o}of s)!YA.isEmpty(i)&&!YA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jA](i):n.push(this[WE](i)));return n}[eO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&yx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=YE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Sl](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[Sl](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`}[jA](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[WE](t)}[WE](t){let r=this[Sl](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]}};rO.exports=QE});var iO=T((qie,nO)=>{"use strict";var zE=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};nO.exports=zE});var aO=T((Gie,oO)=>{"use strict";var JE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};oO.exports=JE});var TO={};Je(TO,{AUDIT_STORE_OPTIONS:()=>pO,createAuditEntry:()=>gl,openAuditStore:()=>Rl,readAuditEntry:()=>hr,setAuditRetention:()=>Ix,transactionKeyEncoder:()=>mO});function Rl(e){let t=e.auditStore=e.openDB(dO.AUDIT_STORE_NAME,pO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,EO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-jE})){if((n[0]&15)===ZE){let i=hr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},jE/10).unref())}),t}function Ix(e){clearTimeout(Fa),Fa=null,jE=e}function gl(e,t,r,s,n,i,o){let c=SO[i],u=1;s&&(s>1?so.setFloat64(0,s):Hr.set(rh),u=9),f(0),f(t),d(r),so.setFloat64(u,e),u+=8,n?d(n):Hr[u++]=0,Hr[s?8:0]=c;let l=Hr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,no.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(th.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),so.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(so.setUint16(u,E|32768),u+=2):E<1056964608?(so.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,so.setUint32(u+1,E),u+=5)}}function hr(e){try{let t=e.dataView||(e.dataView=new eh(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:SO[s&7],tableId:i,get recordId(){return _O(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?_O(e,l,d):void 0},getValue(f){return s&XE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return th.error("Reading audit entry error",e),{}}}function _O(e,t,r){let s=e.subarray(t,r);return(0,no.readKey)(s,0,r-t)}var no,Tl,dO,fO,EO,hO,th,Hr,so,mO,pO,jE,Fa,XE,cO,ZE,uO,lO,SO,eh,io=Te(()=>{no=require("ordered-binary"),Tl=L(j()),dO=L(je()),fO=L(N()),EO=L(Ge()),hO=L(V());xa();th=L(q());(0,Tl.initSync)();Hr=Buffer.alloc(1024),so=new DataView(Hr.buffer,Hr.byteOffset,1024),mO={writeKey(e,t,r){return e===Ga?(t.set(Ga,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,no.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,no.readKey)(e,t,r)}},pO={encoding:"binary",keyEncoder:mO},jE=(0,hO.convertToMS)((0,Tl.get)(fO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(Rl,"openAuditStore");a(Ix,"setAuditRetention");XE=16,cO=1,ZE=2,uO=3,lO=4,SO={put:cO|XE,[cO]:"put",delete:ZE,[ZE]:"delete",message:uO|XE,[uO]:"message",invalidate:lO,[lO]:"invalidate"};a(gl,"createAuditEntry");a(hr,"readAuditEntry");eh=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(_O,"readKeySafely")});var bO={};Je(bO,{HAS_EXPIRATION:()=>ch,LAST_TIMESTAMP_PLACEHOLDER:()=>Ga,LOCAL_TIMESTAMP:()=>wx,METADATA:()=>ka,NO_TIMESTAMP:()=>sh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rh,RecordEncoder:()=>ah,TIMESTAMP_ASSIGN_LAST:()=>Dx,TIMESTAMP_ASSIGN_NEW:()=>AO,TIMESTAMP_ASSIGN_PREVIOUS:()=>OO,TIMESTAMP_PLACEHOLDER:()=>Al,TIMESTAMP_RECORD_PREVIOUS:()=>nh,getUpdateRecord:()=>uh,handleLocalTimeForGets:()=>bl});function NO(){return ao[0]=ao[0]^64,Cx.getFloat64(0)}function bl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[ka]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Lx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(ao,0,d),l.timestampBytes=null,l.localTime=NO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ei.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ei.length;u++){let _=Ei[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ei.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function uh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?oo=i?.localTime?nh|OO:sh:oo=u?i?.localTime?nh|16384:AO|16384:sh,l>0&&(c|=ch),Nl=c,oh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:oo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let g=e.cache.get(s);g&&(c>=0?g.metadataFlags=c:g.metadataFlags>=0&&(g.metadataFlags=void 0),(l||!g.expiresAt)&&(g.expiresAt=l),h.instructedWrite&&(g.localTime||(g.localTime=1),g.timestampBytes=ih,g.timestampOffset=ih.start||0))}if(u){let g=_?.user?.username;if(E&&(Ol=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,b=r.get(I);if(b){let Y=hr(b).previousLocalTime;return r.put(I,gl(o,t,s,Y,g,d,Ol),{ifVersion:p}),S}}r.put(Ga,gl(o,t,s,i?.localTime?1:0,g,d,Ol),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var RO,gO,Al,Ga,rh,wx,ka,ao,Cx,sh,AO,Dx,OO,nh,ch,ih,Ol,oo,Nl,oh,ah,Lx,Ei,xa=Te(()=>{RO=require("msgpackr");io();gO=L(q()),Al=new Uint8Array([1,1,1,1,4,64,0,0]),Ga=new Uint8Array([1,1,1,1,1,0,0,0]),rh=new Uint8Array([1,1,1,1,3,64,0,0]),wx=Symbol("local-timestamp"),ka=Symbol("metadata"),ao=new Uint8Array(8),Cx=new DataView(ao.buffer,0,8),sh=0,AO=0,Dx=1,OO=3,nh=4,ch=16,oo=0,Nl=-1,oh=0,ah=class extends RO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(oo||Nl>=0){let i=0,o=oo;o&&(i+=8,oo=0);let c=Nl,u=oh;c>=0&&(i+=2,Nl=-1,u&&(i+=8,oh=0));let _=ih=r.call(this,s,n|2048|i);Ol=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Al[4]=o,Al[5]=o>>8,_.set(Al,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(ao,0,c),c+=8;else for(let d=0;d<8;d++)ao[d]=t[c++];u=NO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ch&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[ka]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(NO,"getTimestamp");Lx=Map.prototype.get;a(bl,"handleLocalTimeForGets");Ei=[];setInterval(()=>{for(let e=0;e<Ei.length;e++){let t=Ei[e].deref();!t||t.isDone||t.isCommitted?Ei.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&gO.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(uh,"getUpdateRecord")});var yl=T((Kie,yO)=>{"use strict";var _h=j(),dh=N(),{RecordEncoder:Ux}=(xa(),Z(bO));_h.initSync();var Mx=_h.get(dh.CONFIG_PARAMS.STORAGE_COMPRESSION),Px=_h.get(dh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,vx=dh.UPDATES_PROPERTY,lh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Mx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Px&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Ux},this.alwaysLazyProperty=s=>s===vx)}};yO.exports=lh});var wl=T((Qie,wO)=>{"use strict";var co=j(),Va=N();co.initSync();var Bx=co.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||co.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||co.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",IO=co.get(Va.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Hx=co.get(Va.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Il=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=Bx,this.noFSAccess=!0,IO!==void 0&&(this.overlappingSync=IO),this.noReadAhead=Hx}};wO.exports=Il;Il.MAX_DBS=1e4});var Me=T((Jie,qO)=>{"use strict";var Eh=require("lmdb"),os=require("fs-extra"),mr=require("path"),Cl=fr(),LO=q(),Wt=dr().LMDB_ERRORS_ENUM,Dl=aO(),hh=yl(),UO=wl(),Mn=je(),CO=N(),{table:qx,resetDatabases:Fx}=(fe(),Z(Ce)),DO=j(),as=Mn.INTERNAL_DBIS_NAME,MO=Mn.DBI_DEFINITION_NAME,Gx="data.mdb",xx="lock.mdb",$a=".mdb",kx="-lock",fh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=qr(t,r),this.key_type=this.dbi[Mn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Eh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ll(e,t){if(e===void 0)throw new Error(Wt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Wt.ENV_NAME_REQUIRED)}a(Ll,"pathEnvNameValidation");async function mh(e,t,r=!0){try{await os.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Wt.INVALID_BASE_PATH):s}try{let s=mr.join(e,t+$a);return await os.access(s,os.constants.R_OK|os.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await os.access(mr.join(e,t,Gx),os.constants.R_OK|os.constants.F_OK),mr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Wt.INVALID_ENVIRONMENT)}else throw new Error(Wt.INVALID_ENVIRONMENT);throw s}}a(mh,"validateEnvironmentPath");function Ul(e,t){if(Cl.validateEnv(e),t===void 0)throw new Error(Wt.DBI_NAME_REQUIRED)}a(Ul,"validateEnvDBIName");async function Vx(e,t,r=!1,s=!1){Ll(e,t);let n=mr.basename(e);t=t.toString();let i=DO.get(CO.CONFIG_PARAMS.DATABASES);i||DO.setProperty(CO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await mh(e,t,s),PO(e,t,r)}catch(o){if(o.message===Wt.INVALID_ENVIRONMENT){let c=mr.join(e,t);await os.mkdirp(s?c:e);let u=new UO(s?c:c+$a,!1),_=Eh.open(u);_.dbis=Object.create(null);let l=new hh(!1);_.openDB(as,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ph(e,t,r);return _[Mn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(Vx,"createEnvironment");async function $x(e,t,r,s=!0){Ll(e,t),t=t.toString();let n=mr.join(e,t);return qx({table:t,database:mr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a($x,"copyEnvironment");async function PO(e,t,r=!1){Ll(e,t),t=t.toString();let s=ph(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 mh(e,t),i=mr.join(e,t+$a),o=n!=i,c=new UO(n,o),u=Eh.open(c);u.dbis=Object.create(null);let _=BO(u);for(let l=0;l<_.length;l++)qr(u,_[l]);return u[Mn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(PO,"openEnvironment");async function Yx(e,t,r=!1){Ll(e,t),t=t.toString();let s=mr.join(e,t+$a),n=await mh(e,t);if(global.lmdb_map!==void 0){let i=ph(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await vO(o),delete global.lmdb_map[i]}}await os.remove(n),await os.remove(n===s?n+kx:mr.join(mr.dirname(n),xx))}a(Yx,"deleteEnvironment");async function vO(e){Cl.validateEnv(e);let t=e[Mn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(vO,"closeEnvironment");function ph(e,t,r=!1){let n=`${mr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(ph,"getCachedEnvironmentName");function Kx(e){Cl.validateEnv(e);let t=Object.create(null),r=qr(e,as);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==as)try{t[s]=Object.assign(new Dl,n)}catch{LO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Kx,"listDBIDefinitions");function BO(e){Cl.validateEnv(e);let t=[],r=qr(e,as);for(let{key:s}of r.getRange({start:!1}))s!==as&&t.push(s);return t}a(BO,"listDBIs");function Wx(e,t){let s=qr(e,as).getEntry(t),n=new Dl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{LO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Wx,"getDBIDefinition");function HO(e,t,r,s=!r){if(Ul(e,t),t=t.toString(),t===as)throw new Error(Wt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qr(e,t)}catch(n){if(n.message===Wt.DBI_DOES_NOT_EXIST){let i=new hh(r,s===!0),o=e.openDB(t,i),c=new Dl(r===!0,s);return o[MO]=c,qr(e,as).putSync(t,c),e.dbis[t]=o,o}throw n}}a(HO,"createDBI");function qr(e,t){if(Ul(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==as?r=Wx(e,t):r=new Dl,r===void 0)throw new Error(Wt.DBI_DOES_NOT_EXIST);let s;try{let n=new hh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Wt.DBI_DOES_NOT_EXIST):n}return s[MO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function Qx(e,t){Ul(e,t),t=t.toString();let r=qr(e,t),s=r.getStats();return r[Mn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Qx,"statDBI");async function zx(e,t){try{let r=mr.join(e,t+$a);return(await os.stat(r)).size}catch{throw new Error(Wt.INVALID_ENVIRONMENT)}}a(zx,"environmentDataSize");function Jx(e,t){if(Ul(e,t),t=t.toString(),t===as)throw new Error(Wt.CANNOT_DROP_INTERNAL_DBIS_NAME);qr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qr(e,as).removeSync(t)}a(Jx,"dropDBI");function jx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{qr(e,i)}catch(o){if(o.message===Wt.DBI_DOES_NOT_EXIST)HO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Fx()}a(jx,"initializeDBIs");qO.exports={openDBI:qr,openEnvironment:PO,createEnvironment:Vx,listDBIs:BO,listDBIDefinitions:Kx,createDBI:HO,dropDBI:Jx,statDBI:Qx,deleteEnvironment:Yx,initializeDBIs:jx,TransactionCursor:fh,environmentDataSize:zx,copyEnvironment:$x,closeEnvironment:vO}});var GO=T((Xie,FO)=>{"use strict";var Sh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};FO.exports=Sh});var kO=T((eoe,xO)=>{"use strict";var Th=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};xO.exports=Th});var $O=T((roe,VO)=>{"use strict";var Rh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};VO.exports=Rh});var uo=T((aoe,WO)=>{"use strict";var Xx=Me(),Zx=GO(),ek=kO(),tk=$O(),Cs=fr(),Ya=dr().LMDB_ERRORS_ENUM,rk=je(),Zs=N(),sk=V(),nk=require("uuid"),noe=require("lmdb"),{handleHDBError:ik,hdb_errors:ok}=X(),{OVERFLOW_MARKER:ioe,MAX_SEARCH_KEY_LENGTH:ooe}=rk,YO=j();YO.initSync();var Ml=YO.get(Zs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gh=Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hi=Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ak(e,t,r,s,n=Cs.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new Zx,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];KO(_,!0,n);let l=ck(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Oh(o,c,s,i,n)}a(ak,"insertRecords");function ck(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Zs.FUNC_VAL],s[o]=c)}let u=Cs.getIndexedValues(c),_=e.dbis[o];if(u){Ml&&_.prefetch(u.map(l=>({key:l,value:n})),Pl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Ml&&e.dbis[t].prefetch([n],Pl),e.dbis[t].put(n,s,s[hi])})}a(ck,"insertRecord");function uk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(uk,"removeSkippedRecords");function KO(e,t,r){let s=r>0;(s||!Number.isInteger(e[hi]))&&(e[hi]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[gh]))&&(e[gh]=r||Cs.getNextMonotonicTime()):delete e[gh]}a(KO,"setTimestamps");function Ah(e,t,r){r.indexOf(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Xx.initializeDBIs(e,t,r)}a(Ah,"initializeTransaction");async function lk(e,t,r,s,n=Cs.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new ek,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Nh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Oh(c,u,s,i,n,o)}a(lk,"updateRecords");async function _k(e,t,r,s,n=Cs.getNextMonotonicTime()){try{bh(e,t,r,s)}catch(u){throw ik(u,u.message,ok.HTTP_STATUS_CODES.BAD_REQUEST)}Ah(e,t,r);let i=new tk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;sk.isEmpty(_[t])?(l=nk.v4(),_[t]=l):l=_[t];let d=Nh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Oh(o,c,s,i,n)}a(_k,"upsertRecords");async function Oh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Cs.getNextMonotonicTime(),uk(r,i),s}a(Oh,"finalizeWrite");function Nh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(KO(r,!l,o),Number.isInteger(r[hi])&&_[hi]>r[hi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][Zs.FUNC_VAL],r[h]=p)}if(p===g)continue;let I=Cs.getIndexedValues(g);if(I){Ml&&S.prefetch(I.map(b=>({key:b,value:s})),Pl);for(let b=0,Y=I.length;b<Y;b++)S.remove(I[b],s)}if(I=Cs.getIndexedValues(p),I){Ml&&S.prefetch(I.map(b=>({key:b,value:s})),Pl);for(let b=0,Y=I.length;b<Y;b++)S.put(I[b],s)}}let E=Object.assign({},_,r);c.put(s,E,E[hi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Nh(e,t,r,s,n,i,o))}a(Nh,"updateUpsertRecord");function dk(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(Ya.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ya.WRITE_ATTRIBUTES_REQUIRED):new Error(Ya.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(dk,"validateBasic");function bh(e,t,r,s){if(dk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ya.RECORDS_REQUIRED):new Error(Ya.RECORDS_MUST_BE_ARRAY)}a(bh,"validateWrite");function Pl(){}a(Pl,"noop");WO.exports={insertRecords:ak,updateRecords:lk,upsertRecords:_k}});var mi=T((uoe,fk)=>{fk.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ds=T((loe,JO)=>{"use strict";var zO=V(),QO=N(),lo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,en=require("joi"),Pn={schema_format:{pattern:lo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ek=en.alternatives(en.string().min(1).max(Pn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),en.number()).required(),hk=en.alternatives(en.string().min(1).max(Pn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),en.number()),mk=en.alternatives(en.string().min(1).max(Pn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),en.number()).required();function pk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Pn.schema_length.maximum?`'${e}' maximum of 250 characters`:lo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(pk,"checkValidTable");function Sk(e,t){return zO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Sk,"validateSchemaExists");function Tk(e,t){let r=t.state.ancestors[0].schema;return zO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Tk,"validateTableExists");function Rk(e,t){return e.toLowerCase()===QO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${QO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Rk,"validateSchemaName");JO.exports={common_validators:Pn,schema_regex:lo,hdb_schema_table:Ek,validateSchemaExists:Sk,validateTableExists:Tk,validateSchemaName:Rk,checkValidTable:pk,hdb_database:hk,hdb_table:mk}});var He=T((doe,jO)=>{"use strict";var Qt=require("validate.js");Qt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Qt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Qt.validators.type.checks={Object:function(e){return Qt.isObject(e)&&!Qt.isArray(e)},Array:Qt.isArray,Integer:Qt.isInteger,Number:Qt.isNumber,String:Qt.isString,Date:Qt.isDate,Boolean:function(e){return typeof e=="boolean"}};Qt.validators.hasValidFileExt=function(e,t){return Qt.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};jO.exports={validateObject:gk,validateObjectAsync:Ak,validateBySchema:Ok};function gk(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Qt(e,t,{format:"flat"});return r?new Error(r):null}a(gk,"validateObject");async function Ak(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Qt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Ak,"validateObjectAsync");function Ok(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Ok,"validateBySchema")});var vl=T((Eoe,XO)=>{var{common_validators:Ls}=Ds(),Wa=He(),Ka="is required",rt={database:{presence:!1,format:Ls.schema_format,length:Ls.schema_length},schema:{presence:!1,format:Ls.schema_format,length:Ls.schema_length},table:{presence:!0,format:Ls.schema_format,length:Ls.schema_length},attribute:{presence:!0,format:Ls.schema_format,length:Ls.schema_length},hash_attribute:{presence:!0,format:Ls.schema_format,length:Ls.schema_length}};function Qa(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(Qa,"makeAttributesStrings");function Nk(e){return e=Qa(e),rt.table.presence=!1,rt.attribute.presence=!1,rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(Nk,"schema_object");function bk(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence=!1,rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(bk,"table_object");function yk(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence=!1,Wa.validateObject(e,rt)}a(yk,"create_table_object");function Ik(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence={message:Ka},rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(Ik,"attribute_object");function wk(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence=!1,rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(wk,"describe_table");function Ck(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(Ck,"validateTableResidence");XO.exports={schema_object:Nk,create_table_object:yk,table_object:bk,attribute_object:Ik,describe_table:wk,validateTableResidence:Ck}});var eN=T((moe,ZO)=>{"use strict";var Dk=require("uuid"),yh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Dk.v4(),this.schema_table=`${this.schema}.${this.table}`}};ZO.exports=yh});var Bl=T((Soe,tN)=>{"use strict";var Lk=eN(),Ih=class extends Lk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};tN.exports=Ih});var sN=T((Roe,rN)=>{"use strict";rN.exports=Mk;var Uk="inserted";function Mk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Uk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Mk,"returnObject")});var Hl=T((Aoe,cN)=>{"use strict";var Pk=N(),wh=Me(),vk=uo(),{getSystemSchemaPath:Bk,getSchemaPath:Hk}=Be(),qk=mi(),Fk=vl(),Gk=Bl(),xk=sN(),{handleHDBError:nN,hdb_errors:oN}=X(),iN=V(),{HTTP_STATUS_CODES:kk}=oN,Ch=qk.hdb_attribute,aN=[];for(let e=0;e<Ch.attributes.length;e++)aN.push(Ch.attributes[e].attribute);var Vk="inserted";cN.exports=$k;async function $k(e){let t=Fk.attribute_object(e);if(t)throw nN(new Error,t.message,oN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&iN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw nN(new Error,r,kk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=iN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Gk(e.schema,e.table,e.attribute,e.id);try{let i=await wh.openEnvironment(Hk(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);wh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await wh.openEnvironment(Bk(),Pk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await vk.insertRecords(o,Ch.hash_attribute,aN,[n]);return xk(Vk,c,{records:[n]},u)}catch(i){throw i}}a($k,"lmdbCreateAttribute")});var Lh=T((Noe,lN)=>{var{hdb_table:Yk,hdb_database:uN}=Ds(),Kk=He(),Dh=require("joi"),Wk={undefined:"undefined",null:"null"},Qk=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||Wk[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"),zk=Dh.object({database:uN,schema:uN,table:Yk,records:Dh.array().items(Dh.object().custom(Qk)).required()});lN.exports=function(e){return Kk.validateBySchema(e,zk)}});var za=T((Ioe,dN)=>{"use strict";var tn=V(),_N=q(),yoe=Lh(),{getDatabases:Jk}=(fe(),Z(Ce)),{ClientError:pi}=X();dN.exports=jk;function jk(e){if(tn.isEmpty(e))throw new pi("invalid update parameters defined.");if(tn.isEmptyOrZeroLength(e.schema))throw new pi("invalid schema specified.");if(tn.isEmptyOrZeroLength(e.table))throw new pi("invalid table specified.");if(!Array.isArray(e.records))throw new pi("records must be an array");let t=Jk()[e.schema]?.[e.table];if(tn.isEmpty(t))throw new pi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&tn.isEmptyOrZeroLength(o[r]))throw _N.error("a valid hash attribute must be provided with update record:",o),new pi("a valid hash attribute must be provided with update record, check log for more info");if(!tn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw _N.error(`a valid hash value must be provided with ${e.operation} record:`,o),new pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!tn.isEmpty(o[r])&&o[r]!==""&&s.has(tn.autoCast(o[r]))&&(o.skip=!0),s.add(tn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(jk,"insertUpdateValidate")});var Ja=T((Coe,fN)=>{"use strict";var Xk=N().OPERATIONS_ENUM,Uh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Xk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};fN.exports=Uh});var ec=T((Uoe,EN)=>{"use strict";var Loe=Ja(),ql=N(),Ph=V(),Mh=q(),Zk=require("uuid"),{handleHDBError:ja,hdb_errors:eV}=X(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:Za}=eV;EN.exports=tV;function tV(e,t,r){for(let n=0;n<t.length;n++)rV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];sV(i,r,e.operation)}}a(tV,"processRows");function rV(e){if(Buffer.byteLength(String(e))>ql.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),Za.BAD_REQUEST,void 0,void 0,!0);if(Ph.isEmptyOrZeroLength(e)||Ph.isEmpty(e.trim()))throw ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(rV,"validateAttribute");function sV(e,t,r){if(!e.hasOwnProperty(t)||Ph.isEmptyOrZeroLength(e[t])){if(r===ql.OPERATIONS_ENUM.INSERT||r===ql.OPERATIONS_ENUM.UPSERT){e[t]=Zk.v4();return}throw Mh.error("Update transaction aborted due to record with no hash value:",e),ja(new Error,Xa.RECORD_MISSING_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ql.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Mh.error(e),ja(new Error,Xa.HASH_VAL_LENGTH_ERR,Za.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Mh.error(e),ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(sV,"validateHash")});var mN=T((Poe,hN)=>{"use strict";var vh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};hN.exports=vh});var TN=T((Boe,SN)=>{"use strict";var Bh=Me(),nV=q(),pN=dr().LMDB_ERRORS_ENUM;SN.exports=iV;async function iV(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 Bh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==pN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Bh.closeEnvironment(global.lmdb_map[s]),await Bh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==pN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){nV.error(t)}}a(iV,"cleanLMDBMap")});var rn=T((qoe,ON)=>{"use strict";var tc=require("crypto"),oV=j(),{CONFIG_PARAMS:aV}=N(),gN="aes-256-cbc",cV=32,uV=16,Hh=64,AN=32,lV=Hh+AN,RN=new Map;ON.exports={encrypt:_V,decrypt:dV,createNatsTableStreamName:fV};function _V(e){let t=tc.randomBytes(cV),r=tc.randomBytes(uV),s=tc.createCipheriv(gN,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(_V,"encrypt");function dV(e){let t=e.substr(0,Hh),r=e.substr(Hh,AN),s=e.substr(lV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=tc.createDecipheriv(gN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(dV,"decrypt");function fV(e,t){let r=oV.get(aV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=RN.get(r);return s||(s=tc.createHash("md5").update(r).digest("hex"),RN.set(r,s)),s}a(fV,"createNatsTableStreamName")});var vn=T((xoe,bN)=>{"use strict";var Goe=Fr(),Fl=q(),NN=vl(),EV=rn(),Gl=V(),{handleHDBError:xl,hdb_errors:hV}=X(),{HDB_ERROR_MSGS:kl,HTTP_STATUS_CODES:qh}=hV,mV=j();mV.initSync();var{getDatabases:Fh}=(fe(),Z(Ce));bN.exports={describeAll:pV,describeTable:Vl,describeSchema:SV};async function pV(e){try{let t=Gl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Fh(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Vl({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await Vl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Fl.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Fl.error("Got an error in describeAll"),Fl.error(t),xl(new Error,kl.DESCRIBE_ALL_ERR)}}a(pV,"describeAll");async function Vl(e,t){Gl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=NN.describe_table(e);if(i)throw i;let c=Fh()[r];if(!c)throw xl(new Error,kl.SCHEMA_NOT_FOUND(e.schema),qh.NOT_FOUND);let u=c[s];if(!u)throw xl(new Error,kl.TABLE_NOT_FOUND(e.schema,e.table),qh.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=EV.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Fl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Vl,"descTable");async function SV(e){Gl.transformReq(e);let t=NN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Fh()[s];if(!i)throw xl(new Error,kl.SCHEMA_NOT_FOUND(e.schema),qh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Gl.isEmpty(u)||u.describe){let _=await Vl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(SV,"describeSchema")});var sn=T((Yoe,DN)=>{var TV=mi(),{callbackify:IN,promisify:RV}=require("util"),{getDatabases:wN}=(fe(),Z(Ce));DN.exports={setSchemaDataToGlobal:yN,getTableSchema:gV,getSystemSchema:AV,setSchemaDataToGlobalAsync:RV(yN)};var CN=vn(),Voe=IN(CN.describeAll),$oe=IN(CN.describeTable);function yN(e){global.hdb_schema=wN(),e&&e()}a(yN,"setSchemaDataToGlobal");function gV(e,t,r){let s=wN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(gV,"getTableSchema");function AV(){return TV}a(AV,"getSystemSchema")});var pr=T((Woe,PN)=>{"use strict";var Yl=Lh(),Ot=V(),OV=require("util"),Kl=cs(),NV=sn(),LN=q(),{handleHDBError:Si,hdb_errors:bV}=X(),{HTTP_STATUS_CODES:Ti}=bV,yV=OV.promisify(NV.getTableSchema),IV="updated",UN="inserted",MN="upserted";PN.exports={insert:CV,update:DV,upsert:LV,validation:wV,flush:UV};async function wV(e){if(Ot.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ot.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ot.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await yV(e.schema,e.table),r=Yl(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&&Ot.isEmptyOrZeroLength(c[s]))throw LN.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(!Ot.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw LN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ot.isEmpty(c[s])&&c[s]!==""&&n.has(Ot.autoCast(c[s]))&&(c.skip=!0),n.add(Ot.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(wV,"validation");async function CV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Yl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);Ot.transformReq(e);let r=Ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Kl.createRecords(e);return $l(UN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(CV,"insertData");async function DV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Yl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);Ot.transformReq(e);let r=Ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Kl.updateRecords(e);return Ot.isEmpty(s.existing_rows)?$l(IV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):$l(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(DV,"updateData");async function LV(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=Yl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);Ot.transformReq(e);let r=Ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Kl.upsertRecords(e);return $l(MN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(LV,"upsertData");function $l(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===UN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===MN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a($l,"returnObject");function UV(e){return Ot.transformReq(e),Kl.flush(e.schema,e.table)}a(UV,"flush")});var xh=T((zoe,HN)=>{var MV=He(),Gh=require("joi"),{hdb_table:PV,hdb_database:vN}=Ds(),BN={schema:vN,database:vN,table:PV},vV={date:Gh.date().iso().required()},BV={timestamp:Gh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};HN.exports=function(e,t){let r=t==="timestamp"?{...BN,...BV}:{...BN,...vV},s=Gh.object(r);return MV.validateBySchema(e,s)}});var GN=T((Joe,FN)=>{var HV=He(),kh=require("joi"),{hdb_table:qV,hdb_database:qN}=Ds(),FV=kh.object({schema:qN,database:qN,table:qV,hash_values:kh.array().required(),ids:kh.array()});FN.exports=function(e){return HV.validateBySchema(e,FV)}});var kN=T((joe,xN)=>{"use strict";var Vh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},$h=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Yh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};xN.exports={InsertObject:Vh,NoSQLSeachObject:$h,DeleteResponseObject:Yh}});var qn=T((Zoe,WN)=>{"use strict";var $N=xh(),GV=GN(),Ri=V(),VN=require("moment"),YN=q(),{promisify:xV,callbackify:kV}=require("util"),gi=N(),VV=sn(),Kh=xV(VV.getTableSchema),Wh=cs(),{DeleteResponseObject:$V}=kN(),{handleHDBError:Bn,hdb_errors:YV}=X(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:Hn}=YV,KV="records successfully deleted",WV=kV(KN);WN.exports={delete:WV,deleteRecord:KN,deleteFilesBefore:QV,deleteAuditLogsBefore:zV};async function QV(e){let t=$N(e,"date");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!VN(e.date,VN.ISO_8601).isValid())throw Bn(new Error,Wl.INVALID_DATE,Hn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Wl.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw Bn(new Error,s,Hn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await Wh.deleteRecordsBefore(e);if(await Kh(e.schema,e.table),YN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(QV,"deleteFilesBefore");async function zV(e){let t=$N(e,"timestamp");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw Bn(new Error,Wl.INVALID_VALUE("Timestamp"),Hn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Wl.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await Wh.deleteAuditLogsBefore(e);return await Kh(e.schema,e.table),YN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(zV,"deleteAuditLogsBefore");async function KN(e){e.ids&&(e.hash_values=e.ids);let t=GV(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await Kh(e.schema,e.table);let s=await Wh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${KV}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new $V;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(KN,"deleteRecord")});var Ql=T((tae,JN)=>{var JV=require("crypto"),QN=9;function jV(e){let t=ZV(QN),r=zN(e+t);return t+r}a(jV,"createHash");function XV(e,t){let r=e.substr(0,QN),s=r+zN(t+r);return e===s}a(XV,"validateHash");function ZV(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(ZV,"generateSalt");function zN(e){return JV.createHash("md5").update(e).digest("hex")}a(zN,"md5");JN.exports={hash:jV,validate:XV}});var XN=T((sae,jN)=>{var Qh=He(),Ht={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 e$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Qh.validateObject(e,Ht)}a(e$,"addUserValidation");function t$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Qh.validateObject(e,Ht)}a(t$,"alterUserValidation");function r$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Qh.validateObject(e,Ht)}a(r$,"dropUserValidation");jN.exports={addUserValidation:e$,alterUserValidation:t$,dropUserValidation:r$}});var De=T((oae,eb)=>{"use strict";var{platform:iae}=require("os"),s$="nats-server.zip",zh="nats-server",n$=process.platform==="win32"?`${zh}.exe`:zh,Jh="HDB",i$=/^[^\s.,*>]+$/,ZN="__request__",o$=a(e=>`${e}.${ZN}`,"REQUEST_SUBJECT"),a$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},c$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},u$={HUB:"hub.pid",LEAF:"leaf.pid"},l$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},_$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Jh,deliver_subject:"__HDB__.WORKQUEUE"},d$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Jh,deliver_subject:"HDB.SCHEMAQUEUE"},f$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Jh,deliver_subject:"HDB.USERQUEUE"},E$={SUCCESS:"success",ERROR:"error"},h$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},m$={TXN:"txn",MSGID:"msgid"},_o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},p$={[_o.ERR]:1,[_o.WRN]:2,[_o.INF]:3,[_o.DBG]:4,[_o.TRC]:5},S$={debug:"-D",trace:"-DVV"};eb.exports={NATS_SERVER_ZIP:s$,NATS_SERVER_NAME:zh,NATS_BINARY_NAME:n$,PID_FILES:u$,NATS_CONFIG_FILES:c$,SERVER_SUFFIX:l$,WORK_QUEUE_CONSUMER_NAMES:_$,SCHEMA_QUEUE_CONSUMER_NAMES:d$,USER_QUEUE_CONSUMER_NAMES:f$,NATS_TERM_CONSTRAINTS_RX:i$,REQUEST_SUFFIX:ZN,UPDATE_REMOTE_RESPONSE_STATUSES:E$,CLUSTER_STATUS_STATUSES:h$,REQUEST_SUBJECT:o$,SUBJECT_PREFIXES:m$,MSG_HEADERS:a$,LOG_LEVELS:_o,LOG_LEVEL_FLAGS:S$,LOG_LEVEL_HIERARCHY:p$}});var rb=T((cae,tb)=>{"use strict";var T$={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))},R$="certificate.pem",g$="privateKey.pem",A$="ca.pem";tb.exports={CERTIFICATE_VALUES:T$,CERTIFICATE_PEM_NAME:R$,PRIVATEKEY_PEM_NAME:g$,CA_PEM_NAME:A$}});var Xh=T((lae,ab)=>{"use strict";var ob=require("fs-extra"),ue=require("joi"),O$=require("os"),{boolean:we,string:Us,number:Nt,array:jh}=ue.types(),{totalmem:sb}=require("os"),fo=require("path"),N$=q(),Jl=V(),uae=rb(),nb=N(),b$=He(),ib="log",y$="components",I$="Invalid logging.rotation.maxSize unit. Available units are G, M or K",w$="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",C$="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",D$="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",L$="rootPath config parameter is undefined",U$="clustering.enabled config parameter is undefined",Ai=Nt.min(0).required(),jl=jh.items({host:Us.required(),port:Ai}).empty(null),nn;ab.exports={configValidator:M$,routesValidator:F$,route_constraints:jl};function M$(e){if(nn=e.rootPath,Jl.isEmpty(nn))throw L$;let t=we.required(),r=Nt.min(0).max(1e3).empty(null).default(q$),s=Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(zl),n=Us.optional().empty(null),i=Us.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(zl),c=ue.custom(v$).empty(null).default(zl),u=e.clustering?.enabled;if(Jl.isEmpty(u))throw U$;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:Ai,routes:jl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:Ai}).required()}).required(),network:ue.object({port:Ai}).required()}).required(),leafServer:ue.object({network:ue.object({port:Ai,routes:jl}).required(),streams:ue.object({maxAge:Nt.min(120).allow(null).optional(),maxBytes:Nt.min(1).allow(null).optional(),maxMsgs:Nt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Us.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:we,cacheTTL:Nt.required(),enableSessions:we}),analytics:ue.object({aggregatePeriod:Nt}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:we.optional(),compress:we.optional(),interval:Us.custom(H$).optional().empty(null),maxSize:Us.custom(B$).optional().empty(null),path:Us.optional().empty(null).default(zl)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ue.object({network:ue.object({cors:we.optional(),corsAccessList:jh.optional(),headersTimeout:Nt.min(1).optional(),keepAliveTimeout:Nt.min(1).optional(),port:Nt.optional().empty(null),securePort:Nt.optional().empty(null),timeout:Nt.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:Ai,securePort:Ai}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ue.object({compressionThreshold:Nt.optional(),cors:we.optional(),corsAccessList:jh.optional(),headersTimeout:Nt.min(1).optional(),port:Nt.min(0).optional().empty(null),securePort:Nt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(M$,"configValidator");function P$(e){return ob.existsSync(e)?null:`Specified path ${e} does not exist.`}a(P$,"doesPathExist");function v$(e,t){ue.assert(e,Us.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=P$(e);if(r)return t.message(r)}a(v$,"validatePath");function B$(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(I$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(C$):e}a(B$,"validateRotationMaxSize");function H$(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(w$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(D$):e}a(H$,"validateRotationInterval");function q$(e,t){let r=t.state.path.join("."),s=O$.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||sb();return i=Math.round(Math.min(i,sb())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),N$.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(q$,"setDefaultThreads");function zl(e,t){if(!Jl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Jl.isEmpty(nn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return fo.join(nn,y$);case"logging.root":return fo.join(nn,ib);case"clustering.leafServer.streams.path":return fo.join(nn,"clustering","leaf");case"storage.path":let s=fo.join(nn,nb.LEGACY_DATABASES_DIR_NAME);return ob.existsSync(s)?s:fo.join(nn,nb.DATABASES_DIR_NAME);case"logging.rotation.path":return fo.join(nn,ib);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(zl,"setDefaultRoot");function F$(e){let t=ue.object({routes:jl});return b$.validateBySchema({routes:e},t)}a(F$,"routesValidator")});var Tr=T((fae,mb)=>{"use strict";var Sr=N(),mt=V(),_t=q(),{configValidator:G$,routesValidator:cb}=Xh(),zt=require("fs-extra"),x$=require("yaml"),us=require("path"),k$=require("is-number"),lb=require("properties-reader"),V$=require("lodash"),{handleHDBError:$$}=X(),{HTTP_STATUS_CODES:Y$,HDB_ERROR_MSGS:Xl}=dr(),dae=require("minimist"),{server:K$}=(Br(),Z(ro)),{DATABASES_PARAM_CONFIG:rc,CONFIG_PARAMS:on,CONFIG_PARAM_MAP:ls}=Sr,W$="Unable to get config value because config is uninitialized",Q$="Config successfully initialized",z$="Error backing up config file",J$="Empty parameter sent to getConfigValue",_b=us.join(Sr.PACKAGE_ROOT,"config","yaml",Sr.HDB_DEFAULT_CONFIG_FILE),j$="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ub={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"},Zl,bt,e_;mb.exports={createConfigFile:X$,getDefaultConfig:Z$,getConfigValue:fb,initConfig:em,flattenConfig:Eo,updateConfigValue:Eb,updateConfigObject:tY,getConfiguration:nY,setConfiguration:iY,readConfigFile:rm,getClusteringRoutes:oY,initOldConfig:hb,getConfigFromFile:aY,getConfigFilePath:Oi,addConfig:cY,deleteConfigFromFile:uY,getConfigObj:lY};function X$(e){let t=Fn(_b);Zl=Eo(t.toJSON());let r;for(let o in e){let c=ls[o.toLowerCase()];if(c===on.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Zh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){_t.error(l)}}}r&&db(t,r),tm(t);let s=t.toJSON();bt=Eo(s);let n=t.getIn(["rootPath"]),i=us.join(n,Sr.HDB_CONFIG_FILE);zt.createFileSync(i),zt.writeFileSync(i,String(t)),_t.trace(`Config file written to ${i}`)}a(X$,"createConfigFile");function db(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!mt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(rc.TABLES))for(let i in s[n][rc.TABLES])for(let o in s[n][rc.TABLES][i]){let c=s[n][rc.TABLES][i][o],u=[on.DATABASES,n,rc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[on.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){_t.error("Error parsing schemas CLI/env config arguments",s)}}a(db,"setSchemasConfig");function Z$(e){if(Zl===void 0){let r=Fn(_b);Zl=Eo(r.toJSON())}let t=ls[e.toLowerCase()];if(t!==void 0)return Zl[t.toLowerCase()]}a(Z$,"getDefaultConfig");function fb(e){if(e==null){_t.error(J$);return}if(bt===void 0){_t.trace(W$);return}let t=ls[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(fb,"getConfigValue");function Oi(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?us.join(t,Sr.HDB_CONFIG_FILE):lb(e).get(Sr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Oi,"getConfigFilePath");function em(e=!1){if(bt===void 0||e){let t;if(!mt.noBootFile()){t=mt.getPropsFilePath();try{zt.accessSync(t,zt.constants.F_OK|zt.constants.R_OK)}catch(i){throw _t.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Oi(t),s;if(r.includes("config/settings.js"))try{hb(r);return}catch(i){if(i.code!==Sr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Fn(r)}catch(i){if(i.code===Sr.NODE_ERROR_CODES.ENOENT){_t.trace(`HarperDB config file not found at ${r}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw _t.error(i),new Error(`Error reading HarperDB config file at ${r}`)}eY(s,r),tm(s);let n=s.toJSON();if(K$.config=n,bt=Eo(n),bt.logging_rotation_rotate)for(let i in ub)bt[i]&&_t.error(`Config ${ub[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_t.trace(Q$)}}a(em,"initConfig");function eY(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],us.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],us.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],us.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_t.trace("Updating config file with missing config params"),zt.writeFileSync(t,String(e)))}a(eY,"checkForUpdatedConfig");function tm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=G$(t);if(r.error)throw Xl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(tm,"validateConfig");function tY(e,t){bt===void 0&&(bt={});let r=ls[e.toLowerCase()];if(r===void 0){_t.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(tY,"updateConfigObject");function Eb(e,t,r=void 0,s=!1,n=!1,i=!1){bt===void 0&&em();let o=fb(ls.hdb_root),c=us.join(o,Sr.HDB_CONFIG_FILE),u=Fn(c),_;if(r===void 0&&e.toLowerCase()===on.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ls[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Zh(f,t);u.setIn([...E],h)}else for(let f in r){let E=ls[f.toLowerCase()];if(E===on.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Sr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Zh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(g){_t.error(g)}}}_&&db(u,_),tm(u);let l=u.getIn(["rootPath"]),d=us.join(l,Sr.HDB_CONFIG_FILE);s===!0&&rY(c,l),zt.writeFileSync(d,String(u)),n&&(bt=Eo(u.toJSON())),_t.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Eb,"updateConfigValue");function rY(e,t){try{let r=us.join(t,"backup",`${Sr.HDB_CONFIG_FILE}.bak`);zt.copySync(e,r),_t.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_t.error(z$),_t.error(r)}}a(rY,"backupConfigFile");var sY=["databases"];function Eo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),e_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!sY.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!on[u.toUpperCase()]&&ls[u]&&(n[ls[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Eo,"flattenConfig");function Zh(e,t){if(e===on.CLUSTERING_NODENAME||e===on.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(k$(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||mt.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 mt.autoCast(t)}a(Zh,"castConfigValue");function nY(){let e=mt.getPropsFilePath(),t=Oi(e);return Fn(t).toJSON()}a(nY,"getConfiguration");async function iY(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Eb(void 0,void 0,n,!0),j$}catch(i){throw typeof i=="string"||i instanceof String?$$(i,i,Y$.BAD_REQUEST,void 0,void 0,!0):i}}a(iY,"setConfiguration");function rm(){let e=mt.getPropsFilePath();try{zt.accessSync(e,zt.constants.F_OK|zt.constants.R_OK)}catch(s){if(!mt.noBootFile())throw _t.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Oi(e);return Fn(t).toJSON()}a(rm,"readConfigFile");function Fn(e){return x$.parseDocument(zt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Fn,"parseYamlDoc");function oY(){let e=rm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=cb(t);if(r)throw Xl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=cb(s);if(n)throw Xl.CONFIG_VALIDATION(n.message);if(!mt.isEmptyOrZeroLength(s)&&!mt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!mt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(oY,"getClusteringRoutes");function hb(e){let t=lb(e);bt={};for(let r in ls){let s=t.get(r.toUpperCase());if(mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ls[r].toLowerCase();n===on.LOGGING_ROOT?bt[n]=us.dirname(s):bt[n]=s}return bt}a(hb,"initOldConfig");function aY(e){let t=rm();return V$.get(t,e.replaceAll("_","."))}a(aY,"getConfigFromFile");async function cY(e,t){let r=Fn(Oi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await zt.writeFile(Oi(),String(r))}a(cY,"addConfig");function uY(e){let t=Oi(mt.getPropsFilePath()),r=Fn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=us.join(s,Sr.HDB_CONFIG_FILE);zt.writeFileSync(n,String(r))}a(uY,"deleteConfigFromFile");function lY(){return e_||(em(),e_)}a(lY,"getConfigObj")});var Sb=T((hae,pb)=>{"use strict";var t_=N(),r_=class{static{a(this,"BaseLicense")}constructor(t=0,r=t_.RAM_ALLOCATION_ENUM.DEFAULT,s=t_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},sm=class extends r_{static{a(this,"ExtendedLicense")}constructor(t=0,r=t_.RAM_ALLOCATION_ENUM.DEFAULT,s=t_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};pb.exports={BaseLicense:r_,ExtendedLicense:sm}});var sc=T((pae,Nb)=>{"use strict";var mo=require("fs-extra"),Tb=Ql(),Rb=require("crypto"),_Y=require("moment"),dY=require("uuid").v4,qt=q(),im=require("path"),fY=V(),Gn=N(),EY=Sb().ExtendedLicense,ho="invalid license key format",hY="061183",mY="mofi25",pY="aes-256-cbc",SY=16,TY=32,gb=j();gb.initSync();var nm;Nb.exports={validateLicense:Ab,generateFingerPrint:gY,licenseSearch:Ob,getLicense:NY};function om(){return im.join(gb.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.LICENSE_FILE_NAME)}a(om,"getLicenseDirPath");function RY(){let e=om();return im.join(e,Gn.LICENSE_FILE_NAME)}a(RY,"getLicenseFilePath");function am(){let e=om();return im.join(e,Gn.REG_KEY_FILE_NAME)}a(am,"getFingerPrintFilePath");async function gY(){let e=am();try{return await mo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await AY();throw qt.error(`Error writing fingerprint file to ${e}`),qt.error(t),new Error("There was an error generating the fingerprint")}}a(gY,"generateFingerPrint");async function AY(){let e=dY(),t=Tb.hash(e),r=am();try{await mo.mkdirp(om()),await mo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw qt.error(`Error writing fingerprint file to ${r}`),qt.error(s),new Error("There was an error generating the fingerprint")}return t}a(AY,"writeFingerprint");function Ab(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Gn.RAM_ALLOCATION_ENUM.DEFAULT,version:Gn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return qt.error("empty license key passed to validate."),r;let s=am(),n=!1;try{n=mo.statSync(s)}catch(i){qt.error(i)}if(n){let i;try{i=mo.readFileSync(s,"utf8")}catch{qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(mY),c=o[1];c=Buffer.concat([Buffer.from(c)],SY);let u=Buffer.concat([Buffer.from(i)],TY),_=Rb.createDecipheriv(pY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=OY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ho),qt.error(ho),new Error(ho)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ho),qt.error(ho),new Error(ho)}else r.exp_date=l;r.exp_date<_Y().valueOf()&&(r.valid_date=!1),Tb.validate(o[1],`${hY}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||qt.error("Invalid licence"),r}a(Ab,"validateLicense");function OY(e,t){try{let r=Rb.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{qt.warn("Check old license failed")}}a(OY,"checkOldLicense");function Ob(){let e=new EY,t=[];try{t=mo.readFileSync(RY(),"utf-8").split(Gn.NEW_LINE)}catch(r){r.code==="ENOENT"?qt.info("no license file found"):qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(fY.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Ab(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){qt.error("There was an error parsing the license string."),qt.error(n),e.ram_allocation=Gn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return nm=e,e}a(Ob,"licenseSearch");async function NY(){return nm||await Ob(),nm}a(NY,"getLicense")});var Gr=T((Aae,Gb)=>{"use strict";var wb="username is required",Cb="nothing to update, must supply active, role or password to update",Db="password cannot be an empty string",Lb="If role is specified, it cannot be empty.",Ub="active must be true or false";Gb.exports={addUser:MY,alterUser:PY,dropUser:BY,getSuperUser:GY,userInfo:HY,listUsers:n_,listUsersExternal:qY,setUsersToGlobal:So,findAndValidateUser:qb,getClusterUser:xY,USERNAME_REQUIRED:wb,ALTERUSER_NOTHING_TO_UPDATE:Cb,EMPTY_PASSWORD:Db,EMPTY_ROLE:Lb,ACTIVE_BOOLEAN:Ub};var Mb=pr(),bY=qn(),lm=Ql(),Pb=XN(),vb=Fr(),_m=an(),Rr=V(),Bb=require("validate.js"),_e=q(),{promisify:yY}=require("util"),dm=rn(),bb=N(),yb=De(),IY=Tr(),Tae=j(),Rae=sc(),wY=mi(),{table:gae}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:CY}=X(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:cm,HDB_ERROR_MSGS:po}=CY,{UserEventMsg:fm}=_s(),um=require("lodash"),{server:Em}=(Br(),Z(ro)),DY=q();Em.getUser=qb;var Hb={username:!0,active:!0,role:!0,password:!0},Ib=new Map,s_=vb.searchByValue,LY=vb.searchByHash,UY=yY(bY.delete);async function MY(e){let t=Bb.cleanAttributes(e,Hb),r=Pb.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.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 s_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ms(new Error,po.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,po.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=dm.encrypt(t.password)),t.password=lm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Mb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await So()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,po.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],_m.signalUserChange(new fm(process.pid)),`${c.username} successfully added`}a(MY,"addUser");async function PY(e){let t=Bb.cleanAttributes(e,Hb);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(wb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(Cb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Db);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(Ub);let r=vY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=dm.encrypt(t.password)),t.password=lm.hash(t.password)),t.role==="")throw new Error(Lb);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await s_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=po.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=po.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ms(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Mb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await So()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return _m.signalUserChange(new fm(process.pid)),n}a(PY,"alterUser");function vY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(vY,"isClusterUser");async function BY(e){try{let t=Pb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,po.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await UY(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await So()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return _m.signalUserChange(new fm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(BY,"dropUser");async function HY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=um.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await LY(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(HY,"userInfo");async function qY(){let e;try{e=await n_()}catch(t){throw _e.error("Got an error listing users."),_e.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(qY,"listUsersExternal");async function n_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await s_(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=um.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await s_(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=um.cloneDeep(o),o.role=r[o.role],FY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Rr.errorizeMessage(e)}return null}a(n_,"listUsers");function FY(e){try{if(!e){_e.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(wY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(FY,"appendSystemTablesToRole");async function So(){try{let e=await n_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(So,"setUsersToGlobal");async function qb(e,t,r=!0){global.hdb_users||await So();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,cm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,cm.USER_INACTIVE,Ps.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(Ib.get(t)===s.password)return n;if(lm.validate(s.password,t))Ib.set(t,s.password);else throw Ms(new Error,cm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qb,"findAndValidateUser");async function GY(){global.hdb_users||await So();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(GY,"getSuperUser");async function xY(){let e=await n_(),t=IY.getConfigFromFile(bb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===bb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=dm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+yb.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+yb.SERVER_SUFFIX.ADMIN,r}a(xY,"getClusterUser");var Fb=[];Em.invalidateUser=function(e){for(let t of Fb)try{t(e)}catch(r){DY.error("Error invalidating user",r)}};Em.onInvalidatedUser=function(e){Fb.push(e)}});var ic=T((yae,$b)=>{"use strict";var Ni=q(),gr=N(),kY=TN(),Nae=sn(),bae=vn(),VY=Gr(),{validateEvent:xb}=_s(),nc=cs(),$Y=require("process"),{resetDatabases:YY}=(fe(),Z(Ce)),KY={[gr.ITC_EVENT_TYPES.SCHEMA]:WY,[gr.ITC_EVENT_TYPES.USER]:Vb};async function WY(e){let t=xb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await kY(e.message),await QY(e.message)}a(WY,"schemaHandler");async function QY(e){try{nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=YY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(QY,"syncSchemaMetadata");var kb=[];async function Vb(e){try{try{nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ni.warn(r)}let t=xb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${$Y.pid} received user event:`,e),await VY.setUsersToGlobal();for(let r of kb)r()}catch(t){Ni.error(t)}}a(Vb,"userHandler");Vb.addListener=function(e){kb.push(e)};$b.exports=KY});var _s=T((Uae,Kb)=>{"use strict";var wae=q(),hm=V(),zY=N(),{ITC_ERRORS:oc}=dr(),{parentPort:Cae,threadId:JY,isMainThread:jY,workerData:Dae}=require("worker_threads"),{onMessageFromWorkers:XY,broadcast:Lae,broadcastWithAcknowledgement:ZY}=Ge();Kb.exports={sendItcEvent:e1,validateEvent:Yb,SchemaEventMsg:t1,UserEventMsg:r1};var i_;XY(async(e,t)=>{i_=i_||ic(),Yb(e),i_[e.type]&&await i_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function e1(e){return!jY&&e.message&&(e.message.originator=JY),ZY(e)}a(e1,"sendItcEvent");function Yb(e){if(typeof e!="object")return oc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||hm.isEmpty(e.type))return oc.MISSING_TYPE;if(!e.hasOwnProperty("message")||hm.isEmpty(e.message))return oc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||hm.isEmpty(e.message.originator))return oc.MISSING_ORIGIN;if(zY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return oc.INVALID_EVENT(e.type)}a(Yb,"validateEvent");function t1(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(t1,"SchemaEventMsg");function r1(e){this.originator=e}a(r1,"UserEventMsg")});var an=T((vae,Jb)=>{"use strict";var Wb=N(),Pae=V(),o_=q(),Qb=mN(),To,{sendItcEvent:zb}=_s();function s1(e){try{o_.trace("signalSchemaChange called with message:",e),To=To||ic();let t=new Qb(Wb.ITC_EVENT_TYPES.SCHEMA,e);return To.schema(t),zb(t)}catch(t){o_.error(t)}}a(s1,"signalSchemaChange");function n1(e){try{o_.trace("signalUserChange called with message:",e),To=To||ic();let t=new Qb(Wb.ITC_EVENT_TYPES.USER,e);return To.user(t),zb(t)}catch(t){o_.error(t)}}a(n1,"signalUserChange");Jb.exports={signalSchemaChange:s1,signalUserChange:n1}});var a_=T((Hae,Xb)=>{"use strict";var jb=V(),i1=N(),o1=q(),a1=Hl(),c1=Bl(),u1=an(),{SchemaEventMsg:l1}=_s(),_1="already exists in";Xb.exports=d1;async function d1(e,t,r){if(jb.isEmptyOrZeroLength(r))return r;let s=[];jb.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 f1(e,t.schema,t.name,i)})),n}a(d1,"lmdbCheckForNewAttributes");async function f1(e,t,r,s){let n=new c1(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await E1(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(_1))o1.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(f1,"createNewAttribute");async function E1(e){let t;return t=await a1(e),u1.signalSchemaChange(new l1(process.pid,i1.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(E1,"createAttribute")});var Ro=T((Fae,Zb)=>{"use strict";var mm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Zb.exports=mm});var ty=T((xae,ey)=>{"use strict";var h1=Ro(),m1=N().OPERATIONS_ENUM,pm=class extends h1{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(m1.INSERT,r,s,n,i),this.records=t}};ey.exports=pm});var sy=T((Vae,ry)=>{"use strict";var p1=Ro(),S1=N().OPERATIONS_ENUM,Sm=class extends p1{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(S1.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ry.exports=Sm});var iy=T((Yae,ny)=>{"use strict";var T1=Ro(),R1=N().OPERATIONS_ENUM,Tm=class extends T1{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(R1.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};ny.exports=Tm});var ay=T((Wae,oy)=>{"use strict";var g1=Ro(),A1=N().OPERATIONS_ENUM,Rm=class extends g1{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(A1.DELETE,s,n,t,i),this.original_records=r}};oy.exports=Rm});var ac=T((Jae,_y)=>{"use strict";var zae=require("path"),cy=Me(),O1=ty(),N1=sy(),b1=iy(),y1=ay(),go=je(),uy=V(),{CONFIG_PARAMS:I1}=N(),ly=j();ly.initSync();var c_=N().OPERATIONS_ENUM,{getTransactionAuditStorePath:w1}=Be();_y.exports=C1;async function C1(e,t){if(ly.get(I1.LOGGING_AUDITLOG)===!1)return;let r=w1(e.schema,e.table),s=await cy.openEnvironment(r,e.table,!0),n=D1(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){cy.initializeDBIs(s,go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,go.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),uy.isEmpty(n.user_name)||s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(C1,"writeTransaction");function D1(e,t){let r=uy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===c_.INSERT)return new O1(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.UPDATE)return new N1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.UPSERT)return new b1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.DELETE)return new y1(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(D1,"createTransactionObject")});var gm=T((Zae,dy)=>{"use strict";var L1=za(),Xae=Ja(),cc=N(),U1=ec(),M1=uo().insertRecords,P1=Me(),v1=q(),B1=a_(),{getSchemaPath:H1}=Be(),q1=ac();dy.exports=F1;async function F1(e){try{let{schema_table:t,attributes:r}=L1(e);U1(e,r,t.hash_attribute),e.schema!==cc.SYSTEM_SCHEMA_NAME&&(r.includes(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await B1(e.hdb_auth_header,t,r),n=H1(e.schema,e.table),i=await P1.openEnvironment(n,e.table),o=await M1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await q1(e,o)}catch(c){v1.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(F1,"lmdbCreateRecords")});var hy=T((tce,Ey)=>{"use strict";var fy=N(),G1=gm(),x1=Ja(),k1=require("fs-extra"),{getSchemaPath:V1}=Be();Ey.exports=$1;async function $1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new x1(fy.SYSTEM_SCHEMA_NAME,fy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await G1(r),await k1.mkdirp(V1(e.schema))}a($1,"lmdbCreateSchema")});var py=T((sce,my)=>{"use strict";var Am=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};my.exports=Am});var gy=T((cce,Ry)=>{"use strict";var Sy=Me(),Om=fr(),Nm=dr().LMDB_ERRORS_ENUM,Y1=je(),Ty=q(),ice=V(),K1=require("lmdb"),W1=py(),Q1=N(),{OVERFLOW_MARKER:oce,MAX_SEARCH_KEY_LENGTH:ace}=Y1,z1=Q1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function J1(e,t,r,s){if(Om.validateEnv(e),t===void 0)throw new Error(Nm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Nm.IDS_REQUIRED):new Error(Nm.IDS_MUST_BE_ITERABLE);try{let n=Sy.listDBIs(e);Sy.initializeDBIs(e,t,n);let i=new W1,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[z1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,K1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let g=n[S];if(!h.hasOwnProperty(g)||g===t)continue;let I=e.dbis[g],b=h[g];if(b!=null)try{let Y=Om.getIndexedValues(b);if(Y)for(let Q=0,G=Y.length;Q<G;Q++)I.remove(Y[Q],o)}catch{Ty.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Ty.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Om.getNextMonotonicTime(),i}catch(n){throw n}}a(J1,"deleteRecords");Ry.exports={deleteRecords:J1}});var uc=T((lce,Oy)=>{"use strict";var Ao=V(),j1=gy(),X1=Me(),{getSchemaPath:Z1}=Be(),eK=ac(),tK=q();Oy.exports=rK;async function rK(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ao.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ao.isEmptyOrZeroLength(e.hash_values)&&!Ao.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ao.isEmpty(u)||e.hash_values.push(u)}}if(Ao.isEmptyOrZeroLength(e.hash_values))return Ay([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ao.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=Z1(e.schema,e.table),i=await X1.openEnvironment(n,e.table),o=await j1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await eK(e,o)}catch(c){tK.error(`unable to write transaction due to ${c.message}`)}return Ay(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(rK,"lmdbDeleteRecords");function Ay(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(Ay,"createDeleteResponse")});var ym=T((fce,Ny)=>{"use strict";var sK=N(),dce=fr();function bm(e,t){let r=Object.create(null);if(t.length===1&&sK.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(bm,"parseRow");function nK(e,t,r,s){let n=bm(r,e);s.push(n)}a(nK,"searchAll");function iK(e,t,r,s){let n=bm(r,e);s[t]=n}a(iK,"searchAllToMap");function oK(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(oK,"iterateDBI");function bi(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(bi,"pushResults");function aK(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(aK,"endsWith");function cK(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(cK,"contains");function uK(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(uK,"greaterThanCompare");function lK(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(lK,"greaterThanEqualCompare");function _K(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(_K,"lessThanCompare");function dK(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(dK,"lessThanEqualCompare");Ny.exports={parseRow:bm,searchAll:nK,searchAllToMap:iK,iterateDBI:oK,endsWith:aK,contains:cK,greaterThanCompare:uK,greaterThanEqualCompare:lK,lessThanCompare:_K,lessThanEqualCompare:dK,pushResults:bi}});var Oo=T((Sce,Ly)=>{"use strict";var xn=Me(),hce=q(),Ar=fr(),u_=je(),Xe=dr().LMDB_ERRORS_ENUM,mce=V(),fK=N(),l_=ym(),{parseRow:EK}=l_,pce=require("lmdb"),{OVERFLOW_MARKER:by,MAX_SEARCH_KEY_LENGTH:hK}=u_;function yy(e,t,r,s=!1,n=void 0,i=void 0){return yi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(yy,"iterateFullIndex");function lc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return yi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(b=>({value:b}))):d.getRange(I)})}a(lc,"iterateRangeBetween");function yi(e,t,r,s){let n=e.database||e,i=xn.openDBI(n,r);i[u_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&xn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(yi,"setupTransaction");function Iy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(by)){if(!n)if(r)n=xn.openDBI(e,r);else{let u=xn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=xn.openDBI(e,u[_]),!n[u_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Iy,"getOverflowCheck");function mK(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return yi(e,t,t,(o,c,u)=>(__(r),r=_c(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>EK(_.value,r))))}a(mK,"searchAll");function pK(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);__(r),r=_c(e.database||e,r);let o=new Map;for(let{key:c,value:u}of yy(e,t,t,s,n,i))o.set(c,l_.parseRow(u,r));return o}a(pK,"searchAllToMap");function SK(e,t,r=!1,s=void 0,n=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=yy(e,void 0,t,r,s,n),c=o.transaction,u=Iy(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(SK,"iterateDBI");function TK(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return xn.statDBI(e,t).entryCount}a(TK,"countAll");function RK(e,t,r,s,n=!1,i=void 0,o=void 0){return kn(e,r,s),yi(e,t,r,(c,u,_,l)=>(s=Ar.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(RK,"equals");function gK(e,t,r){return kn(e,t,r),xn.openDBI(e,t).getValuesCount(r)}a(gK,"count");function AK(e,t,r,s,n=!1,i=void 0,o=void 0){return kn(e,r,s),yi(e,null,r,(c,u)=>{s=Ar.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(AK,"startsWith");function OK(e,t,r,s,n=!1,i=void 0,o=void 0){return wy(e,t,r,s,n,i,o,!0)}a(OK,"endsWith");function wy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return kn(e,r,s),yi(e,null,r,(u,_,l,d)=>{let f=Iy(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(by)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[u_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(wy,"contains");function NK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!0,!1)}a(NK,"greaterThan");function bK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!1,!1)}a(bK,"greaterThanEqual");function yK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!0)}a(yK,"lessThan");function IK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!1)}a(IK,"lessThanEqual");function wK(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Ar.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Ar.convertKeyValueToWrite(s),n=Ar.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return lc(e,t,r,s,n,i,o,c)}a(wK,"between");function CK(e,t,r,s){Ar.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(__(r),r=_c(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=l_.parseRow(c,r)),o}a(CK,"searchByHash");function DK(e,t,r){Ar.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(DK,"checkHashExists");function LK(e,t,r,s,n=[]){return Dy(e,t,r,s,n),Cy(e,t,r,s,n).map(i=>i[1])}a(LK,"batchSearchByHash");function UK(e,t,r,s,n=[]){Dy(e,t,r,s,n);let i=new Map;for(let[o,c]of Cy(e,t,r,s,n))i.set(o,c);return i}a(UK,"batchSearchByHashToMap");function Cy(e,t,r,s,n=[]){return yi(e,t,t,(i,o,c)=>{r=_c(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,l_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Cy,"batchHashSearch");function Dy(e,t,r,s,n){if(Ar.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(__(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(Dy,"initializeBatchSearchByHash");function __(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(__,"validateFetchAttributes");function kn(e,t,r){if(Ar.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>hK)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a(kn,"validateComparisonFunctions");function _c(e,t){return t.length===1&&fK.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=xn.listDBIs(e)),t}a(_c,"setGetWholeRowAttributes");Ly.exports={searchAll:mK,searchAllToMap:pK,count:gK,countAll:TK,equals:RK,startsWith:AK,endsWith:OK,contains:wy,searchByHash:CK,setGetWholeRowAttributes:_c,batchSearchByHash:LK,batchSearchByHashToMap:UK,checkHashExists:DK,iterateDBI:SK,greaterThan:NK,greaterThanEqual:bK,lessThan:yK,lessThanEqual:IK,between:wK}});var No=T((Rce,By)=>{var Uy=require("lodash"),My=He(),qe=require("joi"),MK=V(),{hdb_schema_table:d_,checkValidTable:Py,hdb_table:vy,hdb_database:f_}=Ds(),{handleHDBError:PK,hdb_errors:vK}=X(),{getDatabases:BK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:HK}=vK,qK=qe.object({database:f_,schema:f_,table:vy,search_attribute:d_,search_value:qe.any().required(),get_attributes:qe.array().min(1).items(d_).optional(),desc:qe.bool(),limit:qe.number().integer().min(1),offset:qe.number().integer().min(0)}),FK=qe.object({database:f_,schema:f_,table:vy,operator:qe.string().valid("and","or").default("and").lowercase(),offset:qe.number().integer().min(0),limit:qe.number().integer().min(1),get_attributes:qe.array().min(1).items(d_).optional(),conditions:qe.array().min(1).items(qe.object({search_attribute:d_,search_type:qe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:qe.when("search_type",{switch:[{is:"equals",then:qe.any()},{is:"between",then:qe.array().items(qe.alternatives([qe.string(),qe.number()])).length(2)}],otherwise:qe.alternatives(qe.string(),qe.number())}).required()})).required()});By.exports=function(e,t){let r=null;switch(t){case"value":r=My.validateBySchema(e,qK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Py("database",e.schema)),i(Py("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=My.validateBySchema(e,FK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=MK.checkGlobalSchemaTable(e.schema,e.table);if(n)return PK(new Error,n,HK.NOT_FOUND);let o=BK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Uy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Uy.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Im=T((Ace,Hy)=>{"use strict";var GK=Me(),xK=No(),{getSchemaPath:kK}=Be();Hy.exports=VK;function VK(e){let t=xK(e,"hashes");if(t)throw t;let r=kK(e.schema,e.table);return GK.openEnvironment(r,e.table)}a(VK,"initialize")});var wm=T((Nce,qy)=>{"use strict";var $K=Oo(),YK=Im();qy.exports=KK;async function KK(e){let t=await YK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return $K.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(KK,"lmdbGetDataByHash")});var bo=T((yce,Fy)=>{"use strict";var Cm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Fy.exports=Cm});var xy=T((Cce,Gy)=>{"use strict";var wce=bo(),WK=Oo(),QK=Im();Gy.exports=zK;async function zK(e){let t=await QK(e),r=global.hdb_schema[e.schema][e.table];return WK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(zK,"lmdbSearchByHash")});var vs=T((Lce,ky)=>{"use strict";var Dm=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};ky.exports=Dm});var E_=T((Mce,Qy)=>{"use strict";var Ft=Oo(),JK=Me(),jK=V(),ae=je(),Ii=N(),XK=mi(),Vy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:ZK}=Be(),cn=Ii.SEARCH_WILDCARDS;async function eW(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=XK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Wy(e,s.hash_attribute,r,t);return Yy(e,n,s.hash_attribute,r)}a(eW,"prepSearch");async function Yy(e,t,r,s){let n=ZK(e.schema,e.table),i=await JK.openEnvironment(n,e.table),o=Ky(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(tW(e,r)===!1){let l=e.search_attribute;if(l===r)return s?$y(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?$y(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Ft.batchSearchByHashToMap(c,r,e.get_attributes,_):Ft.batchSearchByHash(c,r,e.get_attributes,_)}a(Yy,"executeSearch");function Ky(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ae.SEARCH_TYPES.EQUALS:n=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Ft.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Ft.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Ft.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Ft.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ft.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Ft.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ft.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Ky,"searchByType");function $y(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a($y,"createMapFromIterable");function tW(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(tW,"checkToFetchMore");function Wy(e,t,r,s){if(jK.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),cn.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(cn[0])<0&&n.indexOf(cn[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(cn.indexOf(i)>=0&&cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(cn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(cn[0])||n.includes(cn[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Vy.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ii.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ii.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Ii.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Vy.UNKNOWN_SEARCH_TYPE)}}a(Wy,"createSearchTypeFromSearchObject");Qy.exports={executeSearch:Yy,createSearchTypeFromSearchObject:Wy,prepSearch:eW,searchByType:Ky}});var Jy=T((Bce,zy)=>{"use strict";var vce=vs(),rW=No(),sW=V(),nW=N(),iW=E_();zy.exports=oW;function oW(e,t){if(!sW.isEmpty(t)&&nW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rW(e,"value");if(s)throw s;let n=!0;return iW.prepSearch(e,t,n)}a(oW,"lmdbGetDataByValue")});var dc=T((Fce,jy)=>{"use strict";var qce=vs(),aW=No(),cW=V(),uW=N(),lW=E_();jy.exports=_W;async function _W(e,t){if(!cW.isEmpty(t)&&uW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aW(e,"value");if(s)throw s;return lW.prepSearch(e,t,!1)}a(_W,"lmdbSearchByValue")});var Zy=T((kce,Xy)=>{"use strict";var xce=je(),Lm=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Um=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Mm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Xy.exports={SearchByConditionsObject:Lm,SearchCondition:Um,SortAttribute:Mm}});var nI=T((Kce,sI)=>{"use strict";var $ce=Zy().SearchByConditionsObject,dW=vs(),fW=No(),Pm=Oo(),h_=je(),{Resource:Yce}=(ns(),Z(PE)),rI=E_(),EW=ym(),hW=require("lodash"),{getSchemaPath:mW}=Be(),eI=Me(),{handleHDBError:pW,hdb_errors:SW}=X(),{HTTP_STATUS_CODES:TW}=SW,RW=1e8;sI.exports=gW;async function gW(e){let t=fW(e,"conditions");if(t)throw pW(t,t.message,TW.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=mW(e.schema,e.table),s=await eI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)eI.openDBI(s,_.search_attribute);let i=hW.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===h_.SEARCH_TYPES.EQUALS?_.estimated_count=Pm.count(s,_.search_attribute,_.search_value):l===h_.SEARCH_TYPES.CONTAINS||l===h_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=RW}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await tI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(rI.filterByType),d=l.length,f=Pm.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>EW.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await tI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Pm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(gW,"lmdbSearchByConditions");async function tI(e,t,r,s){let n=new dW(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===h_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,rI.searchByType(e,n,i,s).map(o=>o.value)}a(tI,"executeConditionSearch")});var yo=T((Qce,iI)=>{"use strict";var AW=N().OPERATIONS_ENUM,vm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=AW.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};iI.exports=vm});var Bm=T((Jce,fI)=>{"use strict";var uI=vs(),lI=yo(),_I=dc(),dI=uc(),Jt=N(),oI=V(),aI=Me(),{getTransactionAuditStorePath:OW,getSchemaPath:NW}=Be(),cI=q();fI.exports=bW;async function bW(e){try{if(oI.isEmpty(global.hdb_schema[e.schema])||oI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await yW(e),await IW(e);let t=NW(e.schema,e.table);try{await aI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")cI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=OW(e.schema,e.table);await aI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")cI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(bW,"lmdbDropTable");async function yW(e){let t=new uI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await _I(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 lI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await dI(n)}a(yW,"deleteAttributesFromSystem");async function IW(e){let t=new uI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await _I(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 lI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await dI(n)}catch(i){throw i}}a(IW,"dropTableFromSystem")});var hI=T((Xce,EI)=>{"use strict";var wW=require("fs-extra"),CW=vs(),DW=bo(),LW=yo(),UW=Bm(),MW=uc(),PW=wm(),vW=dc(),un=N(),{getSchemaPath:BW}=Be(),{handleHDBError:HW,hdb_errors:qW}=X(),{HDB_ERROR_MSGS:FW,HTTP_STATUS_CODES:GW}=qW;EI.exports=xW;async function xW(e){let t;try{t=await kW(e.schema);let r=new CW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await vW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await UW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new LW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await MW(n);let i=BW(t);await wW.remove(i)}catch(r){throw r}}a(xW,"lmdbDropSchema");async function kW(e){let t=new DW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await PW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw HW(new Error,FW.SCHEMA_NOT_FOUND(e),GW.NOT_FOUND,void 0,void 0,!0);return s}a(kW,"validateDropSchema")});var m_=T((eue,mI)=>{"use strict";var Hm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};mI.exports=Hm});var SI=T((sue,pI)=>{"use strict";var VW=require("fs-extra"),p_=Me(),{getTransactionAuditStorePath:$W}=Be(),qm=je(),rue=m_();pI.exports=YW;async function YW(e){let t;try{let r=$W(e.schema,e.table);await VW.mkdirp(r),t=await p_.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{p_.createDBI(t,qm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),p_.createDBI(t,qm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),p_.createDBI(t,qm.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(YW,"createTransactionsAuditEnvironment")});var AI=T((iue,gI)=>{"use strict";var Fm=N(),TI=Me(),KW=uo(),{getSystemSchemaPath:WW,getSchemaPath:QW}=Be(),zW=mi(),JW=Hl(),Gm=Bl(),jW=q(),XW=SI(),km=zW.hdb_table,RI=[];for(let e=0;e<km.attributes.length;e++)RI.push(km.attributes[e].attribute);gI.exports=ZW;async function ZW(e,t){let r=QW(t.schema,t.table),s=new Gm(t.schema,t.table,Fm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Gm(t.schema,t.table,Fm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Gm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await TI.createEnvironment(r,t.table),e!==void 0){let o=await TI.openEnvironment(WW(),Fm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await KW.insertRecords(o,km.hash_attribute,RI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xm(s),await xm(n),await xm(i)}await XW(t)}catch(o){throw o}}a(ZW,"lmdbCreateTable");async function xm(e){try{await JW(e)}catch(t){jW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xm,"createAttribute")});var NI=T((aue,OI)=>{"use strict";var eQ=za(),tQ=ec(),rQ=a_(),fc=N(),sQ=uo().updateRecords,nQ=Me(),{getSchemaPath:iQ}=Be(),oQ=ac(),aQ=q();OI.exports=cQ;async function cQ(e){try{let{schema_table:t,attributes:r}=eQ(e);tQ(e,r,t.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(r.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await rQ(e.hdb_auth_header,t,r),n=iQ(e.schema,e.table),i=await nQ.openEnvironment(n,e.table),o=await sQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await oQ(e,o)}catch(c){aQ.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(cQ,"lmdbUpdateRecords")});var yI=T((uue,bI)=>{"use strict";var uQ=N().OPERATIONS_ENUM,Vm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=uQ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};bI.exports=Vm});var wI=T((due,II)=>{"use strict";var _ue=yI(),lQ=za(),_Q=ec(),dQ=a_(),Ec=N(),fQ=uo().upsertRecords,EQ=Me(),{getSchemaPath:hQ}=Be(),mQ=ac(),pQ=q(),{handleHDBError:SQ,hdb_errors:TQ}=X();II.exports=RQ;async function RQ(e){let t;try{t=lQ(e)}catch(u){throw SQ(u,u.message,TQ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;_Q(e,s,r.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(s.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await dQ(e.hdb_auth_header,r,s),i=hQ(e.schema,e.table),o=await EQ.openEnvironment(i,e.table),c=await fQ(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await mQ(e,c)}catch(u){pQ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(RQ,"lmdbUpsertRecords")});var DI=T((Eue,CI)=>{"use strict";var $m=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};CI.exports=$m});var UI=T((mue,LI)=>{"use strict";var Ym=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};LI.exports=Ym});var vI=T((Tue,PI)=>{"use strict";var Km=Me(),{getTransactionAuditStorePath:gQ}=Be(),Sue=DI(),hc=je(),AQ=V(),MI=UI(),OQ=require("util").promisify,NQ=OQ(setTimeout),bQ=1e4,yQ=100;PI.exports=IQ;async function IQ(e){let t=gQ(e.schema,e.table),r=await Km.openEnvironment(t,e.table,!0),s=Km.listDBIs(r);Km.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new MI;do n=await wQ(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 NQ(yQ);while(n.transactions_deleted>0);return i}a(IQ,"deleteAuditLogsBefore");async function wQ(e,t){let r=new MI;try{let s=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];AQ.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>bQ)break}return await n,r}catch(s){throw s}}a(wQ,"deleteTransactions")});var HI=T((gue,BI)=>{"use strict";var Wm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};BI.exports=Wm});var FI=T((Nue,qI)=>{"use strict";var CQ=vs(),DQ=yo(),Oue=HI(),Bs=N(),LQ=V(),Qm=Me(),UQ=mi(),MQ=dc(),PQ=uc(),{getSchemaPath:vQ}=Be();qI.exports=BQ;async function BQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=UQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await qQ(e),n=vQ(e.schema,e.table),i=await Qm.openEnvironment(n,e.table);return t===!0&&await HQ(e,i,r.hash_attribute),Qm.dropDBI(i,e.attribute),s}a(BQ,"lmdbDropAttribute");async function HQ(e,t,r){let s=Qm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(HQ,"removeAttributeFromAllObjects");async function qQ(e){let t=new CQ(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await MQ(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(LQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new DQ(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return PQ(i)}a(qQ,"dropAttributeFromSystem")});var YI=T((Iue,$I)=>{"use strict";var zm=Me(),Io=je(),yue=fr(),Jm=N(),GI=V(),{getTransactionAuditStorePath:FQ}=Be(),GQ=Oo(),S_=Ro(),xQ=q();$I.exports=kQ;async function kQ(e){let t=FQ(e.schema,e.table),r=await zm.openEnvironment(t,e.table,!0),s=zm.listDBIs(r);zm.initializeDBIs(r,Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Jm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return xI(r,e.search_values);case Jm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,$Q(r,e.search_values,n);case Jm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return VQ(r,e.search_values);default:return xI(r)}}a(kQ,"readAuditLog");function xI(e,t=[0,Date.now()]){GI.isEmpty(t[0])&&(t[0]=0),GI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new S_,n))}a(xI,"searchTransactionsByTimestamp");function VQ(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[Io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,VI(e,i))}return Object.fromEntries(r)}a(VQ,"searchTransactionsByUsername");function $Q(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=GQ.equals(e,Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=VI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);kI(u,"records",r,l,o),kI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a($Q,"searchTransactionsByHashValues");function kI(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new S_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new S_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(kI,"loopRecords");function VI(e,t){let r=[];try{let s=e.dbis[Io.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 S_,i);r.push(o)}}catch(i){xQ.warn(i)}return r}catch(s){throw s}}a(VI,"batchSearchTransactions")});var WI=T((Lue,KI)=>{"use strict";var{getSchemaPath:Cue}=Be(),Due=Me(),{database:YQ}=(fe(),Z(Ce));KI.exports={writeTransaction:KQ};async function KQ(e,t,r){return YQ({database:e,table:t}).transaction(r)}a(KQ,"writeTransaction")});var jI=T((Mue,JI)=>{"use strict";var{getSchemaPath:QI}=Be(),zI=Me();JI.exports={flush:WQ,resetReadTxn:QQ};async function WQ(e,t){return(await zI.openEnvironment(QI(e,t),t.toString())).flushed}a(WQ,"flush");async function QQ(e,t){try{(await zI.openEnvironment(QI(e,t),t.toString())).resetReadTxn()}catch{}}a(QQ,"resetReadTxn")});var tw=T((vue,ew)=>{"use strict";var{Readable:zQ}=require("stream"),{getDatabases:JQ}=(fe(),Z(Ce)),{readSync:jQ,openSync:XQ,createReadStream:XI}=require("fs"),{open:ZQ}=require("lmdb"),ZI=yl(),ez=wl(),{AUDIT_STORE_OPTIONS:tz}=(io(),Z(TO)),{INTERNAL_DBIS_NAME:rz,AUDIT_STORE_NAME:sz}=je();ew.exports=iz;var jm=32768,nz=100;async function iz(e){let t=e.database||e.schema||"data",r=JQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=ZQ({noSync:!0,maxDbs:ez.MAX_DBS}),f,E=d.openDB(rz,new ZI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,b){b.encoding="binary",b.encoder=void 0;let Y=d.openDB(I,b),Q=l.openDB(I,b);for(let{key:G,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(G,K,w),p++%nz===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:b}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,b);let[,Y]=I.split("/"),Q=!Y,G=new ZI(!Q,Q);await S(I,G)}e.include_audit&&await S(sz,Object.assign({},tz)),await f;let g=XI(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=XQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(jm);jQ(c,_,0,jm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=XI(null,{fd:c,start:jm}),f=new zQ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(iz,"getBackup")});var nw=T((Hue,sw)=>{"use strict";var oz=q(),{handleHDBError:az}=X(),cz=iO(),uz=Hl(),lz=gm(),_z=hy(),dz=uc(),fz=wm(),Ez=xy(),hz=Jy(),mz=dc(),pz=nI(),Sz=hI(),Tz=AI(),Rz=NI(),gz=wI(),Az=vI(),Oz=Bm(),Nz=FI(),bz=YI(),yz=WI(),rw=jI(),Iz=tw(),Xm=class extends cz{static{a(this,"LMDBBridge")}async searchByConditions(t){return pz(t)}async getDataByHash(t){return await fz(t)}async searchByHash(t){return await Ez(t)}async getDataByValue(t,r){return await hz(t,r)}async searchByValue(t){return await mz(t)}async createSchema(t){return await _z(t)}async dropSchema(t){return await Sz(t)}async createTable(t,r){return await Tz(t,r)}async dropTable(t){return await Oz(t)}async createAttribute(t){return await uz(t)}async createRecords(t){return await lz(t)}async updateRecords(t){return await Rz(t)}async upsertRecords(t){try{return await gz(t)}catch(r){throw az(r,null,null,oz.ERR,r)}}async deleteRecords(t){return await dz(t)}async dropAttribute(t){return await Nz(t)}async deleteAuditLogsBefore(t){return await Az(t)}async readAuditLog(t){return await bz(t)}writeTransaction(t,r,s){return yz.writeTransaction(t,r,s)}flush(t,r){return rw.flush(t,r)}resetReadTxn(t,r){return rw.resetReadTxn(t,r)}getBackup(t){return Iz(t)}};sw.exports=Xm});var fw={};Je(fw,{ResourceBridge:()=>tp});function rp({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function ow(e,t){let r=Hs(e),s=rp(e,r);if(!r)throw new ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;ke(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&ll(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||Cz,r=Es()[t];if(!r)throw(0,ds.handleHDBError)(new Error,wz.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function aw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*cw(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var uw,T_,ds,lw,_w,hs,Zm,ep,dw,wz,Cz,Dz,Lz,iw,tp,Ew=Te(()=>{"use strict";uw=L(nw()),T_=L(No()),ds=L(X());fe();lw=L(za()),_w=L(ec()),hs=L(N()),Zm=L(an()),ep=L(_s()),dw=L(V());fi();_l();({HDB_ERROR_MSGS:wz}=ds.hdb_errors),Cz="data",Dz=1e4,Lz=10,tp=class extends uw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),iw=this}async searchByConditions(t){let r=(0,T_.default)(t,"conditions");if(r)throw(0,ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(t);if(!s)throw new ds.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rp(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Zm.signalSchemaChange(new ep.SchemaEventMsg(process.pid,hs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sp(t.schema),Zm.signalSchemaChange(new ep.SchemaEventMsg(process.pid,hs.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,iw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,lw.default)(t);(0,_w.default)(t,s,r.primaryKey);let n,i=Es()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return ke(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=ll(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Es()[t.schema][t.table],s={user:t.hdb_user};return ke(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return aw(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Es()[t.schema][t.table];if(!r.createdTimeProperty)throw new ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:hs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,dw.async_set_timeout)(Lz),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%Dz===0&&await _();return u.length>0&&await _(),n?aw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,T_.default)(t,"hashes");if(r)throw r;return ow(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of ow(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&hs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,T_.default)(t,"value");if(s)throw s;let n=Hs(t);if(!n)throw new ds.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===hs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rp(t,n)})}async getDataByValue(t,r){let s=new Map,n=Hs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),s={};switch(t.search_type){case hs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case hs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of cw(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return cw(r,t.search_values?.[0],t.search_values?.[1])}}};a(rp,"getSelect");a(ow,"getRecords");a(Hs,"getTable");a(aw,"createDeleteResponse");a(cw,"groupRecordsInHistory")});var cs=T((Vue,hw)=>{"use strict";var{ResourceBridge:Uz}=(Ew(),Z(fw)),Mz=j();Mz.initSync();var R_;function Pz(){return R_||(R_=new Uz,R_)}a(Pz,"getBridge");hw.exports=Pz()});var Tw=T((Yue,Sw)=>{"use strict";var mw=require("lodash"),pc=require("mathjs"),vz=require("jsonata"),pw=V();Sw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?mw.uniqWith(e,mw.isEqual):e,searchJSON:Bz,mad:Sc.bind(null,pc.mad),mean:Sc.bind(null,pc.mean),mode:Sc.bind(null,pc.mode),prod:Sc.bind(null,pc.prod),median:Sc.bind(null,pc.median)};function Sc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Sc,"aggregateFunction");function Bz(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(pw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),pw.isEmpty(this.__ala__.res[r])){let s=vz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Bz,"searchJSON")});var gw=T((Wue,Rw)=>{"use strict";var st=require("moment"),np="YYYY-MM-DDTHH:mm:ss.SSSZZ";st.suppressDeprecationWarnings=!0;Rw.exports={current_date:()=>st().utc().format("YYYY-MM-DD"),current_time:()=>st().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return st(e).utc().format("YYYY");case"month":return st(e).utc().format("MM");case"day":return st(e).utc().format("DD");case"hour":return st(e).utc().format("HH");case"minute":return st(e).utc().format("mm");case"second":return st(e).utc().format("ss");case"millisecond":return st(e).utc().format("SSS");default:break}},date:e=>st(e).utc().format(np),date_format:(e,t)=>st(e).utc().format(t),date_add:(e,t,r)=>st(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>st(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=st(e).utc(),n=st(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>st().utc().valueOf(),get_server_time:()=>st().format(np),offset_utc:(e,t)=>st(e).utc().utcOffset(t).format(np)}});var bw=T((Que,Nw)=>{"use strict";var Hz=require("@turf/area"),qz=require("@turf/length"),Fz=require("@turf/circle"),Gz=require("@turf/difference"),xz=require("@turf/distance"),kz=require("@turf/boolean-contains"),Vz=require("@turf/boolean-equal"),$z=require("@turf/boolean-disjoint"),Yz=require("@turf/helpers"),Aw=N(),de=V();Nw.exports={geoArea:Kz,geoLength:Wz,geoCircle:Qz,geoDifference:zz,geoDistance:Ow,geoNear:Jz,geoContains:jz,geoEqual:Xz,geoCrosses:Zz,geoConvert:eJ};var ip="geo1 is required",op="geo2 is required";function Kz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),Hz.default(e)}a(Kz,"geoArea");function Wz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),qz.default(e,{units:t||"kilometers"})}a(Wz,"geoLength");function Qz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),Fz.default(e,t,{units:r||"kilometers"})}a(Qz,"geoCircle");function zz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Gz(e,t)}a(zz,"geoDifference");function Ow(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),xz.default(e,t,{units:r||"kilometers"})}a(Ow,"geoDistance");function Jz(e,t,r,s){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ow(e,t,s)<=r}a(Jz,"geoNear");function jz(e,t){if(de.isEmpty(e))throw new Error(ip);if(de.isEmpty(e))throw new Error(op);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),kz.default(e,t)}a(jz,"geoContains");function Xz(e,t){if(de.isEmpty(e))throw new Error(ip);if(de.isEmpty(e))throw new Error(op);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Vz.default(e,t)}a(Xz,"geoEqual");function Zz(e,t){if(de.isEmpty(e))throw new Error(ip);if(de.isEmpty(e))throw new Error(op);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!$z.default(e,t)}a(Zz,"geoCrosses");function eJ(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(Aw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Aw.GEO_CONVERSION_ENUM).join(",")}`);return Yz[t](e,r)}a(eJ,"geoConvert")});var g_=T((Jue,yw)=>{var wi=Tw(),Or=gw(),qs=bw();yw.exports=e=>{e.aggr.mad=e.aggr.MAD=wi.mad,e.aggr.mean=e.aggr.MEAN=wi.mean,e.aggr.mode=e.aggr.MODE=wi.mode,e.aggr.prod=e.aggr.PROD=wi.prod,e.aggr.median=e.aggr.MEDIAN=wi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Or.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Or.current_time,e.fn.extract=e.fn.EXTRACT=Or.extract,e.fn.date=e.fn.DATE=Or.date,e.fn.date_format=e.fn.DATE_FORMAT=Or.date_format,e.fn.date_add=e.fn.DATE_ADD=Or.date_add,e.fn.date_sub=e.fn.DATE_SUB=Or.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Or.date_diff,e.fn.now=e.fn.NOW=Or.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Or.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Or.get_server_time,e.fn.getdate=e.fn.GETDATE=Or.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Or.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=qs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qs.geoNear}});var Dw=T((jue,Cw)=>{"use strict";var Tc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var tJ=g_(),Iw=require("clone"),A_=require("recursive-iterator"),re=q(),ie=V(),wo=cs(),rJ=N(),{hdb_errors:sJ}=X(),{getDatabases:ww}=(fe(),Z(Ce)),nJ="IS NULL",ms="There was a problem performing this search. Please check the logs and try again.";tJ(yt);var ap=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(ms)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(ms)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(ms)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(ms)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(ms)}}_getColumns(){let t=new A_(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(Iw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=ww()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new A_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new A_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty(rJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Tc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await yt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Iw(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(nJ)>-1&&this.tables.forEach(n=>{let i={columnid:ww()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await wo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ms)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await wo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ms)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await wo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(ms)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await wo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(ms)}}}_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 yt.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 yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.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 yt.yy.FuncValue:new yt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await yt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,g=p.length;S<g;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new A_(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Tc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(ms)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await wo.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await yt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(sJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await wo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ms)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Cw.exports=ap});var Fr=T((Zue,Lw)=>{"use strict";var iJ=sO();Lw.exports={searchByConditions:aJ,searchByHash:cJ,searchByValue:uJ,search:lJ};var cp=cs(),{transformReq:up}=V(),oJ=Dw();async function aJ(e){return up(e),cp.searchByConditions(e)}a(aJ,"searchByConditions");async function cJ(e){up(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of cp.searchByHash(e))r&&t.push(r);return t}a(cJ,"searchByHash");async function uJ(e){up(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of cp.searchByValue(e))t.push(r);return t}a(uJ,"searchByValue");function lJ(e,t){try{let r=new iJ(e);r.validate(),new oJ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(lJ,"search")});var O_=T((tle,Uw)=>{"use strict";var _J=cs();Uw.exports={writeTransaction:dJ};function dJ(e,t,r){return _J.writeTransaction(e,t,r)}a(dJ,"writeTransaction")});var Bw=T((nle,vw)=>{"use strict";var fJ=Fr(),EJ=sn(),Mw=q(),hJ=pr(),sle=O_(),mJ=require("clone"),_p=require("alasql"),pJ=g_(),Pw=require("util"),SJ=Pw.promisify(EJ.getTableSchema),TJ=Pw.promisify(fJ.search),RJ=N(),lp=V();pJ(_p);vw.exports={update:AJ};var gJ="There was a problem performing this update. Please check the logs and try again.";async function AJ({statement:e,hdb_user:t}){let r=await SJ(e.table.databaseid,e.table.tableid),s=OJ(e.columns);lp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=mJ(n),c=lp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=_p.parse(u).statements[0],l=await TJ(_),d=NJ(s,l);return bJ(o,d,t)}a(AJ,"update");function OJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=_p.compile(`SELECT ${r.expression.toString()} AS [${RJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Mw.error(t),new Error(gJ)}}a(OJ,"createUpdateRecord");function NJ(e,t){return lp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(NJ,"buildUpdateRecords");async function bJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await hJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Mw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(bJ,"updateRecords")});var qw=T((cle,Hw)=>{var yJ=require("alasql"),IJ=Fr(),wJ=q(),CJ=cs(),fp=require("util"),dp=V(),DJ=N(),LJ=sn(),ole=O_(),ale=pr(),UJ="record",MJ="successfully deleted",PJ=fp.callbackify(qJ),vJ=fp.promisify(IJ.search),BJ=fp.promisify(LJ.getTableSchema);Hw.exports={convertDelete:PJ};function HJ(e){return`${e.deleted_hashes.length} ${UJ}${e.deleted_hashes.length===1?"":"s"} ${MJ}`}a(HJ,"generateReturnMessage");async function qJ({statement:e,hdb_user:t}){let r=await BJ(e.table.databaseid,e.table.tableid);dp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=dp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=yJ.parse(o).statements[0],u={operation:DJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await vJ(c);let _=await CJ.deleteRecords(u);return dp.isEmptyOrZeroLength(_.message)&&(_.message=HJ(_)),delete _.txn_time,_}catch(_){throw wJ.error(_),_.hdb_code?_.message:_}}a(qJ,"convertDelete")});var Vw=T((lle,kw)=>{"use strict";var FJ=vn(),{hdb_errors:Fw}=X(),{getDatabases:Gw}=(fe(),Z(Ce));kw.exports={checkSchemaExists:xw,checkSchemaTableExists:GJ,schema_describe:FJ};async function xw(e){if(!Gw()[e])return Fw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(xw,"checkSchemaExists");async function GJ(e,t){let r=await xw(e);if(r)return r;if(!Gw()[e][t])return Fw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GJ,"checkSchemaTableExists")});var Rc=T((dle,xJ)=>{xJ.exports={name:"harperdb",version:"4.2.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.425.0","@aws-sdk/lib-storage":"3.418.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.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","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-beta.2",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var I_={};Je(I_,{addAnalyticsListener:()=>Oc,recordAction:()=>Nr,recordActionBinary:()=>xr,setAnalyticsEnabled:()=>kJ});function kJ(e){Zw=e}function Nr(e,t,r,s,n){if(!Zw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=y_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},y_.set(i,o)}N_||VJ()}function xr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Oc(e){rC.push(e)}function VJ(){N_=performance.now(),setTimeout(async()=>{let e=performance.now()-N_;N_=0;let t=[],r={time:Date.now(),period:e,threadId:Ci.threadId,metrics:t};for(let[n,i]of y_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of sC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await nC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Ci.threadId,byThread:!0,...s});for(let n of rC)n(t);y_=new Map,Ci.parentPort?Ci.parentPort.postMessage({type:tC,report:r}):aC({report:r})},eC).unref()}async function $J(e,t=6e4){let r=mp(),s=iC(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:g}=p;for(let I of S||[]){let{path:b,method:Y,type:Q,metric:G,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=G+(b?"-"+b:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let ve=se.threads[g];if(ve)se=ve;else{se.threads[g]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let ve in te){let gt=te[ve];typeof gt=="number"&&(se[ve]=(se[ve]*Pt+gt*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[g]=Object.assign({},te),u.push(se));if(B){B=B.map(ve=>typeof ve=="number"?{value:ve,count:1}:ve);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await nC()}for(let h of u){let{path:p,method:S,type:g,metric:I,count:b,total:Y,distribution:Q,threads:G,...w}=h;G=G.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of G){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=G.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((ve,gt)=>ve.value>gt.value?1:-1);let g=S.count-1,I=[],b=0,Y=0,Q;for(let ve of sC){let gt=g*ve;for(;b<gt;)Q=p[Y++],b+=Q.count,Y===1&&b--;let es=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-es.value)*(b-gt)/Q.count)}let[G,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:G,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,b_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,b_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-$w,active:E-Yw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}$w=f,Yw=E}async function Kw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function mp(){return Ww||(Ww=tt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function iC(){return Qw||(Qw=tt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function WJ(){oC=!0;let e=(0,Ac.get)(hp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await $J(eC,e),await Kw(mp(),YJ),await Kw(iC(),KJ)},Math.min(e/2,2147483647)).unref()}function aC(e,t){let r=e.report;r.threadId=t?.threadId||Ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(zw+=s.mean*s.count);r.totalBytesProcessed=zw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Jw.get(t))}),Jw.set(t,t.performance.eventLoopUtilization())),r.id=(0,b_.getNextMonotonicTime)(),mp().primaryStore.put(r.id,r),oC||WJ(),QJ&&(cC=JJ(r))}async function JJ(e){if(await cC,!Vn){let r=(0,gc.dirname)((0,Xw.getLogFilePath)());try{Vn=await(0,Ep.open)((0,gc.join)(r,"analytics.log"),"r+")}catch{Vn=await(0,Ep.open)((0,gc.join)(r,"analytics.log"),"w+")}}let t=(await Vn.stat()).size;if(t>zJ){let r=Buffer.alloc(t);await Vn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Vn.write(r,{position:0}),await Vn.truncate(r.length),t=r.length}await Vn.write(JSON.stringify(e)+`
|
|
6
|
-
`,t)}var Ci,jw,Xw,gc,Ep,b_,Ac,hp,y_,Zw,N_,eC,tC,rC,sC,$w,Yw,nC,
|
|
1
|
+
"use strict";var HH=Object.create;var ga=Object.defineProperty;var qH=Object.getOwnPropertyDescriptor;var FH=Object.getOwnPropertyNames;var GH=Object.getPrototypeOf,xH=Object.prototype.hasOwnProperty;var a=(e,t)=>ga(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Je=(e,t)=>{for(var r in t)ga(e,r,{get:t[r],enumerable:!0})},mg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of FH(t))!xH.call(e,n)&&n!==r&&ga(e,n,{get:()=>t[n],enumerable:!(s=qH(t,n))||s.enumerable});return e};var L=(e,t,r)=>(r=e!=null?HH(GH(e)):{},mg(t||!e||!e.__esModule?ga(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>mg(ga({},"__esModule",{value:!0}),e);var Tg=T((vne,Sg)=>{var kH=require("fast-glob"),{statSync:lE,existsSync:_E,readFileSync:VH,writeFileSync:$H}=require("fs"),{spawnSync:YH,spawn:KH,execFileSync:Pne}=require("child_process"),{isMainThread:WH}=require("worker_threads"),{join:Dn,relative:pg}=require("path"),{PACKAGE_ROOT:rs}=N(),{tmpdir:QH,platform:zH}=require("os");require("source-map-support").install();var JH=["resources","server","dataLayer","components"],Aa="ts-build",dE,jH=__filename.endsWith("tsBuild.js");if(jH){if(WH){let r;try{lE(Dn(rs,Aa)),r=!0}catch{}if(r)for(let s of kH.sync(JH.map(n=>n+"/**/*.ts"),{cwd:rs})){let n=0,i=0;try{n=lE(Dn(rs,s)).mtimeMs-5e3,i=lE(Dn(rs,Aa,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),dE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),dE=!0;if(dE){let s=Dn(rs,"node_modules/.bin/tsc");zH()==="win32"&&(s+=".cmd");let n=YH(s,{cwd:rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Dn(QH(),"harperdb-tsc.pid"),o;if(_E(i))try{process.kill(+VH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=KH(s,["--watch"],{cwd:rs,detached:!0,stdio:"ignore"});$H(i,c.pid.toString()),c.unref()}}}}let e=Sg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(rs)&&!s[0].includes("node_modules")){let i=pg(rs,s[0]),o;i.startsWith(Aa)?o=Dn(rs,pg(Aa,i)):o=Dn(rs,Aa,i);let c=Dn(o,r),u=c+".js";if(_E(u))return u;if(c.includes(".")&&_E(c))return c}return t(r,s,n)}}});var N=T((qne,Mg)=>{"use strict";var Mr=require("path"),XH=require("fs"),{relative:Bne,join:Hne}=Mr,{existsSync:ZH}=XH;function eq(){let e=__dirname;for(;!ZH(Mr.join(e,"package.json"));){let t=Mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(eq,"getHDBPackageRoot");var Ln=eq(),Rg="js",zu=Rg,tq="harperdb-config.yaml",rq="defaultConfig.yaml",sq="hdb",gg=`harperdb.${zu}`,Ag=`customFunctionsServer.${zu}`,nq=`restartHdb.${zu}`,EE="HarperDB",Qu="Custom Functions",Ju="Clustering Hub",ju="Clustering Leaf",iq="Clustering Ingest Service",oq="Clustering Reply Service",aq="foreground.pid",cq="hdb.pid",uq="data",lq={HDB:EE,CLUSTERING_HUB:Ju,CLUSTERING_LEAF:ju,CLUSTERING_INGEST_SERVICE:iq,CLUSTERING_REPLY_SERVICE:oq,CUSTOM_FUNCTIONS:Qu,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},_q={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},dq={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},fq={harperdb:EE,"clustering hub":Ju,"clustering leaf":ju,"custom functions":Qu,custom_functions:Qu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Eq={CLUSTERING_HUB_PROC_DESCRIPTOR:Ju,CLUSTERING_LEAF_PROC_DESCRIPTOR:ju},fE={HDB:Mr.join(Ln,"server/harperdb"),CUSTOM_FUNCTIONS:Mr.join(Ln,"server/customFunctions"),CLUSTERING_HUB:Mr.join(Ln,"server/nats"),CLUSTERING_LEAF:Mr.join(Ln,"server/nats")},hq={HDB:Mr.join(fE.HDB,gg),CUSTOM_FUNCTIONS:Mr.join(fE.CUSTOM_FUNCTIONS,Ag)},mq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Mr.join(Ln,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Mr.join(Ln,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Mr.join(Ln,"launchServiceScripts/launchUpdateNodes4-0-0.js")},pq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Og="support@harperdb.io",Sq="customer-success@harperdb.io",Ng=1,Tq=4141,bg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Rq="https://www.harperdb.io/product",gq=`For support, please submit a request at ${bg} or contact ${Og}`,yg=`For license support, please contact ${Sq}`,Aq="None of the specified records were found.",Oq="hash attribute not found",Nq=`Your current license only supports ${Ng} role. ${yg}`,bq="Your current license only supports 3 connections to a node.",yq="127.0.0.1",Iq=1,wq=/^\.$/,Cq=/^\.\.$/,Dq="U+002E",Lq=/\//g,Uq="U+002F",Mq=/U\+002F/g,Pq=/^U\+002E$/,vq=/^U\+002EU\+002E$/,Bq="d",Hq=999999,qq="*",Fq="--max-old-space-size=",Gq="system",xq="__hdb_hash",kq=".harperdb",Vq=".hdb",$q="keys",Yq="hdb_boot_properties.file",Kq=".updateConfig.json",Wq="SIGTSTP",Qq=24,zq=6e4,Jq=448,jq="blob",Xq="trash",Zq="database",eF="schema",tF="transactions",rF=".count",sF="id",nF="PROCESS_NAME",Ig={SETTINGS_PATH_KEY:"settings_path"},wg=require("lodash"),iF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},oF={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},aF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},cF={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"},uF={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"},_r="hdb_internal:",lF={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},_F={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"},dF="060493.ks",fF=".license",EF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},hF={CSV:".csv",JSON:".json"},mF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},pF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Oa={};Oa[J.INSERT]=J.INSERT;Oa[J.UPDATE]=J.UPDATE;Oa[J.UPSERT]=J.UPSERT;Oa[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var SF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},TF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Cg={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},RF=wg.invert(Cg),gF={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"},O={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},Dg={settings_path:Ig.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];Dg[t.toLowerCase()]=t}var AF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},OF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},NF={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"},bF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},yF={VERSION_DEFAULT:"2.2.0"},IF={DEVELOPMENT:8192,DEFAULT:512},wF={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"},CF={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"},DF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Lg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},LF=Symbol("metadata"),UF="__clustering__",MF=Object.values(Lg),PF=15984864e5,Ug={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},vF=wg.invert(Ug),BF={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"},HF=111,qF=`\r
|
|
2
|
+
`,FF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},GF=["*","%"],xF="unauthorized_access",kF="func_val",VF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},$F={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},YF={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},KF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},WF={HTTP:"http"},QF={STOPPED:"stopped",ONLINE:"online"},zF="3.x.x",JF={SUCCESS:"success",FAILURE:"failure"},jF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Mg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:Og,HDB_SUPPORT_URL:bg,HDB_PRICING_URL:Rq,SUPPORT_HELP_MSG:gq,LICENSE_HELP_MSG:yg,HDB_PROC_NAME:gg,HDB_PROC_DESCRIPTOR:EE,CLUSTERING_LEAF_PROC_DESCRIPTOR:ju,CLUSTERING_HUB_PROC_DESCRIPTOR:Ju,SYSTEM_SCHEMA_NAME:Gq,HASH_FOLDER_NAME:xq,HDB_HOME_DIR_NAME:kq,UPDATE_FILE_NAME:Kq,LICENSE_KEY_DIR_NAME:$q,BOOT_PROPS_FILE_NAME:Yq,JOB_TYPE_ENUM:OF,JOB_STATUS_ENUM:EF,SYSTEM_TABLE_NAMES:cF,SYSTEM_TABLE_HASH_ATTRIBUTES:uF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:hF,S3_BUCKET_AUTH_KEYS:mF,VALID_SQL_OPS_ENUM:pF,GEO_CONVERSION_ENUM:TF,HDB_SETTINGS_NAMES:Cg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:RF,SERVICE_ACTIONS_ENUM:SF,CLUSTER_MESSAGE_TYPE_ENUM:NF,CLUSTER_CONNECTION_DIRECTION_ENUM:bF,CLUSTER_EVENTS_DEFS_ENUM:wF,PERIOD_REGEX:wq,DOUBLE_PERIOD_REGEX:Cq,UNICODE_PERIOD:Dq,FORWARD_SLASH_REGEX:Lq,UNICODE_FORWARD_SLASH:Uq,ESCAPED_FORWARD_SLASH_REGEX:Mq,ESCAPED_PERIOD_REGEX:Pq,ESCAPED_DOUBLE_PERIOD_REGEX:vq,REG_KEY_FILE_NAME:dF,RESTART_TIMEOUT_MS:zq,HDB_FILE_PERMISSIONS:Jq,DATABASES_DIR_NAME:Zq,LEGACY_DATABASES_DIR_NAME:eF,TRANSACTIONS_DIR_NAME:tF,LIMIT_COUNT_NAME:rF,ID_ATTRIBUTE_STRING:sF,INSERT_MODULE_ENUM:oF,UPGRADE_JSON_FIELD_NAMES_ENUM:aF,RESTART_CODE:Wq,RESTART_CODE_NUM:Qq,CLUSTER_OPERATIONS:Oa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:_F,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:lF,CLUSTERING_MESSAGE_TYPES:BF,HDB_FILE_SUFFIX:Vq,BLOB_FOLDER_NAME:jq,HDB_TRASH_DIR:Xq,ORIGINATOR_SET_VALUE:HF,LICENSE_VALUES:yF,RAM_ALLOCATION_ENUM:IF,TIME_STAMP_NAMES_ENUM:Lg,TIME_STAMP_NAMES:MF,PERMS_UPDATE_RELEASE_TIMESTAMP:PF,SEARCH_NOT_FOUND_MESSAGE:Aq,SEARCH_ATTRIBUTE_NOT_FOUND:Oq,LICENSE_ROLE_DENIED_RESPONSE:Nq,LICENSE_MAX_CONNS_REACHED:bq,BASIC_LICENSE_MAX_NON_CU_ROLES:Ng,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Tq,VALUE_SEARCH_COMPARATORS:Ug,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:vF,LICENSE_FILE_NAME:fF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:CF,NEW_LINE:qF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Iq,MOMENT_DAYS_TAG:Bq,API_TURNOVER_SEC:Hq,LOOPBACK:yq,CODE_EXTENSION:zu,WILDCARD_SEARCH_VALUE:qq,NODE_ERROR_CODES:DF,JAVASCRIPT_EXTENSION:Rg,PERMS_CRUD_ENUM:FF,UNAUTHORIZED_PERMISSION_NAME:xF,SEARCH_WILDCARDS:GF,FUNC_VAL:kF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:VF,JWT_ENUM:$F,CLUSTERING_FLAG:UF,ITC_EVENT_TYPES:YF,CUSTOM_FUNCTION_PROC_NAME:Ag,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Qu,SERVICES:KF,THREAD_TYPES:WF,MEM_SETTING_KEY:Fq,HDB_RESTART_SCRIPT:nq,PROCESS_DESCRIPTORS:lq,SERVICE_SERVERS:hq,SERVICE_SERVERS_CWD:fE,PROCESS_DESCRIPTORS_VALIDATE:fq,LAUNCH_SERVICE_SCRIPTS:mq,LOG_LEVELS:dq,PROCESS_NAME_ENV_PROP:nF,LOG_NAMES:_q,PM2_PROCESS_STATUSES:QF,CONFIG_PARAM_MAP:Dg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:tq,HDB_DEFAULT_CONFIG_FILE:rq,ROLE_TYPES_ENUM:pq,BOOT_PROP_PARAMS:Ig,INSTALL_PROMPTS:iF,HDB_ROOT_DIR_NAME:sq,CLUSTERING_PROCESSES:Eq,FOREGROUND_PID_FILE:aq,PACKAGE_ROOT:Ln,PRE_4_0_0_VERSION:zF,DATABASES_PARAM_CONFIG:AF,METADATA_PROPERTY:LF,AUTH_AUDIT_STATUS:JF,AUTH_AUDIT_TYPES:jF,HDB_PID_FILE:cq,DEFAULT_DATABASE_NAME:uq,LEGACY_CONFIG_PARAMS:gF};Tg()});var hE=T((Gne,Bg)=>{"use strict";var Pg=require("minimist");Bg.exports=XF;function XF(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=vg(process.env),s=vg(Pg(process.argv))):(r=process.env,s=Pg(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(XF,"assignCMDENVVariables");function vg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(vg,"objKeysToLowerCase")});var q=T((kne,AE)=>{"use strict";var li=require("fs-extra"),{workerData:ZF,threadId:eG}=require("worker_threads"),Xs=require("path"),Fg=require("yaml"),Gg=require("properties-reader"),ut=N(),Hg=hE(),tG=require("os"),{PACKAGE_ROOT:pE}=N(),{_assignPackageExport:rG}=require("../index"),ba={};for(let e in console)ba[e]||(ba[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},xg={STDOUT:"stdOut",STDERR:"stdErr"},sG=Xs.join(pE,"logs"),nG=Xs.join(pE,"config/yaml/",ut.HDB_DEFAULT_CONFIG_FILE),iG=1e4,js,Is,$t,Xu,Zu,ya,Zi,Na;Na===void 0&&kg();AE.exports={notify:Yg,fatal:Kg,error:Ia,warn:gE,info:el,debug:RE,trace:TE,setLogLevel:dG,log_level:$t,loggerWithTag:oG,suppressLogging:aG,initLogSettings:kg,setupConsoleLogging:Vg,logCustomLevel:lG,closeLogFile:SE,getLogFilePath:()=>ya,OUTPUTS:xg,AuthAuditLog:hG};rG("logger",AE.exports);function kg(e=!1){try{if(Na===void 0||e){SE();let t=_G(),r=Hg(["ROOTPATH"]);try{Na=Gg(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!li.pathExistsSync(Xs.join(r.ROOTPATH,ut.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:Zu,to_file:js,to_stream:Is}=fG(r.ROOTPATH?Xs.join(r.ROOTPATH,ut.HDB_CONFIG_FILE):Na.get("settings_path"))),Xu=ut.LOG_NAMES.HDB,ya=Xs.join(Zu,Xu)}}catch(t){if(Na=void 0,t.code===ut.NODE_ERROR_CODES.ENOENT){let r=Hg(Object.keys(ut.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ut.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ut.CONFIG_PARAMS.LOGGING_LEVEL){$t=u;continue}if(c===ut.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===ut.CONFIG_PARAMS.LOGGING_FILE&&(js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=EG();js=js===void 0?n:js,js=qg(js),Is=Is===void 0?i:Is,Is=qg(Is),$t=$t===void 0?s:$t,Zu=sG,Xu=ut.LOG_NAMES.INSTALL,ya=Xs.join(Zu,Xu);return}throw Ia("Error initializing log settings"),Ia(t),t}process.env.DEV_MODE&&(Is=!0),Vg()}a(kg,"initLogSettings");var mE=!0;function Vg(){Xi("error",Ia),Xi("warn",gE),Xi("log",el),Xi("info",el),Xi("debug",RE),Xi("trace",TE)}a(Vg,"setupConsoleLogging");function Xi(e,t){console[e]=function(...r){if(mE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return ba[e](...r)}}a(Xi,"logConsole");function oG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Yg),fatal:r(Kg),error:r(Ia),warn:r(gE),info:r(el),debug:r(RE),trace:r(TE)};function r(s){return function(...n){return s(t,...n)}}}a(oG,"loggerWithTag");function aG(e){try{mE=!1,e()}finally{mE=!0}}a(aG,"suppressLogging");var cG=ZF?.name?.replace(/ /g,"-")||"main";function Zs(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||cG+"/"+eG);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(Zs,"createLogRecord");function wa(e){js&&$g(e),Is&&process.stdout.write(e)}a(wa,"logStdOut");function tl(e){js&&$g(e),Is&&process.stderr.write(e)}a(tl,"logStdErr");function $g(e){uG(),Zi?li.appendFileSync(Zi,e):ba.log(e)}a($g,"logToFile");function SE(){try{li.closeSync(Zi)}catch{}Zi=null}a(SE,"closeLogFile");function uG(){if(!Zi){try{if(!ya)debugger;Zi=li.openSync(ya,"a")}catch(e){ba.error(e)}setTimeout(()=>{SE()},iG).unref()}}a(uG,"openLogFile");function el(...e){Yt[$t]<=Yt.info&&wa(Zs("info",e))}a(el,"info");function TE(...e){Yt[$t]<=Yt.trace&&wa(Zs("trace",e))}a(TE,"trace");function Ia(...e){Yt[$t]<=Yt.error&&tl(Zs("error",e))}a(Ia,"error");function RE(...e){Yt[$t]<=Yt.debug&&wa(Zs("debug",e))}a(RE,"debug");function Yg(...e){Yt[$t]<=Yt.notify&&wa(Zs("notify",e))}a(Yg,"notify");function Kg(...e){Yt[$t]<=Yt.fatal&&tl(Zs("fatal",e))}a(Kg,"fatal");function gE(...e){Yt[$t]<=Yt.warn&&tl(Zs("warn",e))}a(gE,"warn");function lG(e,t,...r){t===xg.STDERR?tl(Zs(e,r)):wa(Zs(e,r))}a(lG,"logCustomLevel");function _G(){let e;try{e=tG.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,ut.HDB_HOME_DIR_NAME,ut.BOOT_PROPS_FILE_NAME);return li.existsSync(t)||(t=Xs.join(pE,"utility/hdb_boot_properties.file")),t}a(_G,"getPropsFilePath");function dG(e){$t=e}a(dG,"setLogLevel");function qg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(qg,"autoCastBoolean");function fG(e){try{if(e.includes("config/settings.js")){let o=Gg(e);return{level:o.get(ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.dirname(o.get(ut.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Fg.parseDocument(li.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ut.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(fG,"getLogConfig");function EG(){try{let e=Fg.parseDocument(li.readFileSync(nG,"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(EG,"getDefaultConfig");function hG(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(hG,"AuthAuditLog")});var Qg=T(($ne,Wg)=>{"use strict";var mG=require("util"),pG=require("path"),SG=require("child_process"),TG=mG.promisify(SG.execFile),RG=1e3*1e3*10;Wg.exports={findPs:gG};async function gG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await TG("ps",["wwxo",`pid,${r}`],{maxBuffer:RG});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:pG.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(gG,"findPs")});var je=T((Kne,Jg)=>{"use strict";var AG="__dbis__",OG="__txns__",NG="__environment_name__",bG="__dbi_defintion__",yG={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"},IG=["__createdtime__","__updatedtime__"],wG="\uFFFF",zg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},CG=Object.values(zg);Jg.exports={AUDIT_STORE_NAME:OG,INTERNAL_DBIS_NAME:AG,DBI_DEFINITION_NAME:bG,SEARCH_TYPES:yG,TIMESTAMP_NAMES:IG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:NG,TRANSACTIONS_DBI_NAMES_ENUM:zg,TRANSACTIONS_DBIS:CG,OVERFLOW_MARKER:wG}});var dr=T((Wne,iA)=>{"use strict";var jg=N(),Xg=je(),Zg={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},eA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tA={500:eA("There was an error processing your request."),400:"Invalid request"},DG=tA[Zg.INTERNAL_SERVER_ERROR],LG={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.`},UG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},MG={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"},PG={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${Xg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Xg.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"},vG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${jg.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 ${jg.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"},rA={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"},BG={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},HG={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},qG={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},FG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},GG={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`},sA={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.`},nA={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},xG={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},kG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},VG={...rA,...MG,...LG,...BG,...HG,...qG,...FG,...GG,...vG,...sA,...nA,...xG,...kG,...UG};iA.exports={CHECK_LOGS_WRAPPER:eA,HDB_ERROR_MSGS:VG,DEFAULT_ERROR_MSGS:tA,DEFAULT_ERROR_RESP:DG,HTTP_STATUS_CODES:Zg,LMDB_ERRORS_ENUM:PG,AUTHENTICATION_ERROR_MSGS:rA,VALIDATION_ERROR_MSGS:sA,ITC_ERRORS:nA}});var X=T((zne,cA)=>{"use strict";var eo=dr(),$G=q(),YG=N(),rl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,oA),this.statusCode=s||eo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(eo.DEFAULT_ERROR_MSGS[s]?eo.DEFAULT_ERROR_MSGS[s]:eo.DEFAULT_ERROR_MSGS[eo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&$G[n](i)}},OE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},NE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function oA(e,t,r,s=YG.LOG_LEVELS.ERROR,n=null,i=!1){if(aA(e))return e;let o=new rl(e,t,r,s,n);return i&&delete o.stack,o}a(oA,"handleHDBError");function aA(e){return e.__proto__.constructor.name===rl.name}a(aA,"isHDBError");cA.exports={isHDBError:aA,handleHDBError:oA,ClientError:OE,ServerError:NE,hdb_errors:eo}});var Be=T((jne,hA)=>{"use strict";var Ma=N(),KG=V(),Kt=j(),Pa=require("path"),WG=require("minimist"),uA=require("fs-extra"),lA=require("lodash");Kt.initSync();var{CONFIG_PARAMS:Un,DATABASES_PARAM_CONFIG:Ca,SYSTEM_SCHEMA_NAME:sl}=Ma,Da,La,Ua;function _A(){if(Da!==void 0)return Da;if(Kt.getHdbBasePath()!==void 0)return Da=Kt.get(Un.STORAGE_PATH)||Pa.join(Kt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),Da}a(_A,"getBaseSchemaPath");function dA(){if(La!==void 0)return La;if(Kt.getHdbBasePath()!==void 0)return La=EA(sl),La}a(dA,"getSystemSchemaPath");function fA(){if(Ua!==void 0)return Ua;if(Kt.getHdbBasePath()!==void 0)return Ua=Kt.get(Ma.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Pa.join(Kt.getHdbBasePath(),Ma.TRANSACTIONS_DIR_NAME),Ua}a(fA,"getTransactionAuditStoreBasePath");function QG(e,t){let r=Kt.get(Un.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(fA(),e.toString())}a(QG,"getTransactionAuditStorePath");function EA(e,t){e=e.toString(),t=t&&t.toString();let r=Kt.get(Ma.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Pa.join(_A(),e)}a(EA,"getSchemaPath");function zG(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,WG(process.argv));let s=r[Un.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!KG.isObject(s))throw o;i=s}for(let o of i){let c=o[sl];if(!c)continue;let u=Kt.get(Un.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return lA.set(u,[sl,Ca.TABLES,t,Ca.PATH],_),Kt.setProperty(Un.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return lA.set(u,[sl,Ca.PATH],l),Kt.setProperty(Un.DATABASES,u),l}}let n=r[Un.STORAGE_PATH.toUpperCase()];if(n){if(!uA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Pa.join(n,e);return uA.mkdirsSync(i),Kt.setProperty(Un.STORAGE_PATH,n),i}return dA()}a(zG,"initSystemSchemaPaths");function JG(){Da=void 0,La=void 0,Ua=void 0}a(JG,"resetPaths");hA.exports={getBaseSchemaPath:_A,getSystemSchemaPath:dA,getTransactionAuditStorePath:QG,getTransactionAuditStoreBasePath:fA,getSchemaPath:EA,initSystemSchemaPaths:zG,resetPaths:JG}});var fr=T((tie,RA)=>{"use strict";var jG=dr().LMDB_ERRORS_ENUM,Zne=require("lmdb"),XG=je(),eie=require("buffer").Buffer,{OVERFLOW_MARKER:mA,MAX_SEARCH_KEY_LENGTH:nl}=XG,pA=["number","string","symbol","boolean","bigint"];function ZG(e){if(e=e?.primaryStore||e,!e)throw new Error(jG.ENV_REQUIRED)}a(ZG,"validateEnv");function ex(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(ex,"stringifyData");function tx(e){return e instanceof Date?e.valueOf():e}a(tx,"convertKeyValueToWrite");function rx(e){if(e==null)return;if(pA.includes(typeof e))return e.length>nl?[e.slice(0,nl)+mA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(pA.includes(typeof n))n.length>nl?t.push(n.slice(0,nl)+mA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(rx,"getIndexedValues");var il=0,SA=0;function TA(){SA=Date.now()-performance.now()}a(TA,"adjustStartTime");TA();var sx=6e4;setInterval(TA,sx).unref();function nx(){let e=performance.now()+SA;return e>il?(il=e,e):(il+=488e-6,il)}a(nx,"getNextMonotonicTime");RA.exports={validateEnv:ZG,stringifyData:ex,convertKeyValueToWrite:tx,getNextMonotonicTime:nx,getIndexedValues:rx}});var gA,ss,bE,va=Te(()=>{gA=require("events"),ss=class extends gA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new bE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},bE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Pr(e){return e[Bt]||(e[Bt]=Object.create(null))}function ul(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a number, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ns.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ns.ClientError(`${c} must be a Date, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Pr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ns.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=AA(d,o);if(f)return l||(l=this[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ns.ClientError("Can not add a property to a sealed table schema");Pr(this)[o]=c}),i("deleteProperty",function(o){Pr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function AA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Re]=n}},ul(r,t)),new r(e)):new ol(e);case Array:let s=new cl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=AA(o,t?.elements)),s[n]=o}return s}}function ll(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=ll(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Ba(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Ba(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ba(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function al(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[_i]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Re]===n){if(al(i))return!0}else return!0}}else{let r=e[Bt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Re]===i){if(al(n))return!0}else return!0}else return!0}}return!1}var ns,Bt,ol,_i,cl,_l=Te(()=>{is();ns=L(X()),Bt=Symbol("own-data");a(Pr,"getChanges");a(ul,"assignTrackedAccessors");a(AA,"trackObject");ol=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};ul(ol,{});a(ll,"collapseData");a(Ba,"deepFreeze");a(al,"hasChanges");_i=Symbol.for("has-array-changes"),cl=class extends Array{static{a(this,"TrackedArray")}[_i];constructor(t){super(t)}splice(...t){return this[_i]=!0,super.splice(...t)}push(...t){return this[_i]=!0,super.push(...t)}pop(){return this[_i]=!0,super.pop()}unshift(...t){return this[_i]=!0,super.unshift(...t)}shift(){return this[_i]=!0,super.shift()}};cl.prototype.constructor=Array});function cx(){ax=setInterval(function(){for(let e of yE)if(e.stale){let t=e[me]?.url;OA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},ox).unref()}var IE,OA,ix,yE,di,dl,ox,ax,wE=Te(()=>{IE=L(fr()),OA=L(q());is();ix=100,yE=new Set,di=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),yE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(yE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,IE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let g=S();E?E.push?E.push(g):E=[E,g]:E=g}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<ix>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},dl=class extends di{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,IE.getNextMonotonicTime)())}getReadTxn(){}},ox=3e4;a(cx,"startMonitoringTxns");cx()});function ke(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new di;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var NA,fi=Te(()=>{NA=require("../index");is();wE();a(ke,"transaction");(0,NA._assignPackageExport)("transaction",ke);ke.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ke.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function DE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new to.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(IA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case mt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new to.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new to.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=LE(e);if(!S)throw new to.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:I})=>new Promise((b,Y)=>setImmediate(()=>{try{b(I&&S(I)?g:yA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function LE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),IA[t]||t){case mt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case mt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case mt.SEARCH_TYPES.ENDS_WITH:case mt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case mt.SEARCH_TYPES.STARTS_WITH:case mt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case mt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case mt.SEARCH_TYPES.GREATER_THAN:case mt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case mt.SEARCH_TYPES.GREATER_THAN_EQUAL:case mt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case mt.SEARCH_TYPES.LESS_THAN:case"lt":case mt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case mt.SEARCH_TYPES.LESS_THAN_EQUAL:case mt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new to.ClientError(`Unknown query comparator "${t}"`)}}function ws(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function fl(e){if(!e)return;let t=new CE,r,s,n,i,o,c=bA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=ux[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?lx:bA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var to,mt,Cs,yA,ux,IA,bA,lx,CE,El=Te(()=>{to=L(X()),mt=L(je()),Cs=require("ordered-binary"),yA=require("lmdb"),ux={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(DE,"idsForCondition");IA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(LE,"filterByType");a(ws,"attributeComparator");bA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,lx=/([^&|*=]+)([&|*=]*)/g;a(fl,"parseQuery");CE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var PE={};Je(PE,{CONTEXT:()=>me,ID_PROPERTY:()=>Ie,IS_COLLECTION:()=>os,RECORD_PROPERTY:()=>Re,Resource:()=>Ot,SAVE_UPDATES_PROPERTY:()=>MA,snake_case:()=>dx});function dx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function wA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new ME(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function vr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[Ie]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return ke(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[MA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new hl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new hl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Br(e,t){let r=new UA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function UE(e){let t=e[Re];if(t){let r=e[Bt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function CA(e){if(typeof e=="string")return t=>UE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=UE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=UE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var DA,LA,UA,me,Ie,os,MA,Re,_x,Ot,hl,ME,is=Te(()=>{DA=require("crypto");va();LA=require("../index"),UA=L(X());_l();fi();El();me=Symbol.for("context"),Ie=Symbol.for("primary-key"),os=Symbol("is-collection"),MA=Symbol("save-updates"),Re=Symbol("stored-record"),_x={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ot=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ie]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=vr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=CA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=vr(function(t,r,s,n){if(Array.isArray(n)&&t[os]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Br(t,"put")},{hasContent:!0,type:"update"});static delete=vr(function(t,r,s,n){return t.delete?t.delete(r):Br(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,DA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),ke(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Br(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=vr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Br(t,"delete")},{hasContent:!1,type:"update"});static post=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=vr(function(t,r,s,n){return t.connect?t.connect(n,r):Br(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Br(t,"subscribe")},{type:"read"});static publish=vr(function(t,r,s,n){return t[Ie]!=null&&t.update?.(),t.publish?t.publish(n,r):Br(t,"publish")},{hasContent:!0,type:"create"});static search=vr(function(t,r,s,n){let i=t.search?t.search(r):Br(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=CA(o);return i.map(c)}return i},{type:"read"});static query=vr(function(t,r,s,n){return t.search?t.search(n,r):Br(t,"search")},{hasContent:!0,type:"read"});static copy=vr(function(t,r,s,n){return t.copy?t.copy(n,r):Br(t,"copy")},{type:"create"});static move=vr(function(t,r,s,n){return t.move?t.move(n,r):Br(t,"move")},{type:"delete"});post(t){if(this[os])return this.constructor.create(this[Ie],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[os]}static coerceId(t){return t}static parseQuery(t){return fl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&_x[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:wA(t,this)}}return wA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ie]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ie],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[os]=!0),n}subscribe(t){return new ss}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ss}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Ie]}getContext(){return this[me]}};Ot.prototype[me]=null;(0,LA._assignPackageExport)("Resource",Ot);a(dx,"snake_case");hl=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(wA,"pathToId");ME=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(UE,"selectFromObject");a(CA,"transformForSelect")});var ro={};Je(ro,{server:()=>lt});var PA,lt,Hr=Te(()=>{PA=require("../index"),lt={};(0,PA._assignPackageExport)("server",lt)});var BE={};Je(BE,{loadGQLSchema:()=>hx,start:()=>vE,startOnMainThread:()=>Ex});function vE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(G){if(G.kind==="NonNullType"){let B=Q(G.type);return B.nullable=!1,B}if(G.kind==="ListType")return{type:"array",elements:Q(G.type)};let K={type:G.name?.value};return Object.defineProperty(K,"location",{value:G.loc.startToken}),K};a(Q,"getProperty");let g=S.name.value,I=[],b={table:null,database:null,properties:I};f.set(g,b);for(let G of S.directives){if(G.name.value==="table"){for(let w of G.arguments)b[w.name.value]=w.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,E.push(b)}if(G.name.value==="sealed"&&(b.sealed=!0),G.name.value==="export"){b.export=!0;for(let w of G.arguments)w.name.value==="name"&&(b.export={name:w.value.value})}}let Y=!1;for(let G of S.fields){let w=Q(G.type);w.name=G.name.value,I.push(w);for(let K of G.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}b.typeName=g,g==="Query"&&(h=b)}function p(S){let g=f.get(S.type);g?S.properties=g.properties:S.type==="array"?p(S.elements):fx.includes(S.type)||(0,vA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let g of S.properties)p(g);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,ml.dirname)(s),S.tableClass):i.set((0,ml.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let g=f.get(S.type);if(!g)throw new Error(`${S.type} was not found as a Query export`);i.set((0,ml.dirname)(s)+"/"+S.name,g.tableClass)}}}var ml,vA,fx,Ex,hx,BA=Te(()=>{ml=require("path");fe();vA=L(Ge()),fx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(vE,"start");Ex=vE,hx=vE({ensureTable:tt}).handleFile});async function pl(e){return mx?(Ha||(Ha=px(Tx)),(await(await Ha).import(e)).namespace):import(e)}async function px(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ha=new Compartment({console,Math,Date,fetch:Sx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,qA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Ot,tables:Er,databases:Ve})}};let s=await(0,HA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}function Sx(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Tx(){return{Resource:Ot,tables:Er}}var HA,qA,mx,Ha,HE=Te(()=>{is();fe();HA=require("fs/promises"),qA=require("path"),mx=!1;a(pl,"secureImport");a(px,"getCompartment");a(Sx,"secureOnlyFetch");a(Tx,"getGlobalVars")});var FE={};Je(FE,{handleFile:()=>Rx});async function Rx(e,t,r,s){let n=new Map,i=(0,FA.pathToFileURL)(r).toString(),o=await pl(i);u(o.default)&&s.set((0,qE.dirname)(t),o.default),c(o,(0,qE.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var FA,qE,GA=Te(()=>{FA=require("url");HE();qE=require("path");a(Rx,"handleFile")});var xE={};Je(xE,{start:()=>gx});function gx({resources:e}){e.set("login",GE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var GE,xA=Te(()=>{is();a(gx,"start");GE=class extends Ot{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var VE=T((Mie,$A)=>{"use strict";var{Readable:Ax}=require("stream"),Ox=1e4;$A.exports={streamAsJSON(e){return new kE({value:e})}};var kE=class extends Ax{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),kA)}catch(n){yield kA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);VA(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>Ox?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return VA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};function kA(e){return console.error(e),JSON.stringify(e.toString())}a(kA,"handleError");function VA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(VA,"when")});var sO=T((Bie,rO)=>{"use strict";var $E=require("recursive-iterator"),Nx=require("alasql"),YE=require("clone"),YA=V(),{handleHDBError:KA,hdb_errors:bx}=X(),{HDB_ERROR_MSGS:WA,HTTP_STATUS_CODES:QA}=bx,{getDatabases:yx}=(fe(),Z(Ce)),Ix=["DISTINCT_ARRAY"],zA=Symbol("validateTables"),KE=Symbol("validateTable"),vie=Symbol("getAllColumns"),JA=Symbol("validateAllColumns"),Sl=Symbol("findColumn"),jA=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),WE=Symbol("validateColumn"),XA=Symbol("setColumnsForTable"),ZA=Symbol("checkColumnsForAsterisk"),eO=Symbol("validateGroupBy"),tO=Symbol("hasColumns"),QE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[zA](),this[ZA](),this[JA]()}[zA](){if(this[tO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[KE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[KE](t.table)})}}[tO](){let t=!1,r=new $E(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[KE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=yx();if(!r[t.databaseid])throw KA(new Error,WA.SCHEMA_NOT_FOUND(t.databaseid),QA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw KA(new Error,WA.TABLE_NOT_FOUND(t.databaseid,t.tableid),QA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=YE(n);i.table=YE(t),this.attributes.push(i)})}[Sl](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)}[ZA](){let t=new $E(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[XA](r.tableid)}[XA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Nx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[JA](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[eO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new $E(t),n=[];for(let{node:i,path:o}of s)!YA.isEmpty(i)&&!YA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jA](i):n.push(this[WE](i)));return n}[eO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Ix.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=YE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Sl](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[Sl](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`}[jA](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[WE](t)}[WE](t){let r=this[Sl](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]}};rO.exports=QE});var iO=T((qie,nO)=>{"use strict";var zE=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};nO.exports=zE});var aO=T((Gie,oO)=>{"use strict";var JE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};oO.exports=JE});var TO={};Je(TO,{AUDIT_STORE_OPTIONS:()=>pO,createAuditEntry:()=>gl,openAuditStore:()=>Rl,readAuditEntry:()=>hr,setAuditRetention:()=>wx,transactionKeyEncoder:()=>mO});function Rl(e){let t=e.auditStore=e.openDB(dO.AUDIT_STORE_NAME,pO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,EO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-jE})){if((n[0]&15)===ZE){let i=hr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},jE/10).unref())}),t}function wx(e){clearTimeout(Fa),Fa=null,jE=e}function gl(e,t,r,s,n,i,o){let c=SO[i],u=1;s&&(s>1?so.setFloat64(0,s):qr.set(rh),u=9),f(0),f(t),d(r),so.setFloat64(u,e),u+=8,n?d(n):qr[u++]=0,qr[s?8:0]=c;let l=qr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,no.writeKey)(E,qr,u);let p=u-h-1;p>127?p>16383?(th.error("Key or username was too large for audit entry",E),u=h+1,qr[h]=0):(qr.copyWithin(h+2,h+1,u),so.setUint16(h,p|32768),u++):qr[h]=p}function f(E){E<128?qr[u++]=E:E<16384?(so.setUint16(u,E|32768),u+=2):E<1056964608?(so.setUint32(u,E|3221225472),u+=4):(qr[u]=255,so.setUint32(u+1,E),u+=5)}}function hr(e){try{let t=e.dataView||(e.dataView=new eh(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:SO[s&7],tableId:i,get recordId(){return _O(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?_O(e,l,d):void 0},getValue(f){return s&XE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return th.error("Reading audit entry error",e),{}}}function _O(e,t,r){let s=e.subarray(t,r);return(0,no.readKey)(s,0,r-t)}var no,Tl,dO,fO,EO,hO,th,qr,so,mO,pO,jE,Fa,XE,cO,ZE,uO,lO,SO,eh,io=Te(()=>{no=require("ordered-binary"),Tl=L(j()),dO=L(je()),fO=L(N()),EO=L(Ge()),hO=L(V());xa();th=L(q());(0,Tl.initSync)();qr=Buffer.alloc(1024),so=new DataView(qr.buffer,qr.byteOffset,1024),mO={writeKey(e,t,r){return e===Ga?(t.set(Ga,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,no.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,no.readKey)(e,t,r)}},pO={encoding:"binary",keyEncoder:mO},jE=(0,hO.convertToMS)((0,Tl.get)(fO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(Rl,"openAuditStore");a(wx,"setAuditRetention");XE=16,cO=1,ZE=2,uO=3,lO=4,SO={put:cO|XE,[cO]:"put",delete:ZE,[ZE]:"delete",message:uO|XE,[uO]:"message",invalidate:lO,[lO]:"invalidate"};a(gl,"createAuditEntry");a(hr,"readAuditEntry");eh=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(_O,"readKeySafely")});var bO={};Je(bO,{HAS_EXPIRATION:()=>ch,LAST_TIMESTAMP_PLACEHOLDER:()=>Ga,LOCAL_TIMESTAMP:()=>Cx,METADATA:()=>ka,NO_TIMESTAMP:()=>sh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rh,RecordEncoder:()=>ah,TIMESTAMP_ASSIGN_LAST:()=>Lx,TIMESTAMP_ASSIGN_NEW:()=>AO,TIMESTAMP_ASSIGN_PREVIOUS:()=>OO,TIMESTAMP_PLACEHOLDER:()=>Al,TIMESTAMP_RECORD_PREVIOUS:()=>nh,getUpdateRecord:()=>uh,handleLocalTimeForGets:()=>bl});function NO(){return ao[0]=ao[0]^64,Dx.getFloat64(0)}function bl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[ka]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Ux.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(ao,0,d),l.timestampBytes=null,l.localTime=NO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ei.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ei.length;u++){let _=Ei[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ei.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function uh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?oo=i?.localTime?nh|OO:sh:oo=u?i?.localTime?nh|16384:AO|16384:sh,l>0&&(c|=ch),Nl=c,oh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:oo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let g=e.cache.get(s);g&&(c>=0?g.metadataFlags=c:g.metadataFlags>=0&&(g.metadataFlags=void 0),(l||!g.expiresAt)&&(g.expiresAt=l),h.instructedWrite&&(g.localTime||(g.localTime=1),g.timestampBytes=ih,g.timestampOffset=ih.start||0))}if(u){let g=_?.user?.username;if(E&&(Ol=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,b=r.get(I);if(b){let Y=hr(b).previousLocalTime;return r.put(I,gl(o,t,s,Y,g,d,Ol),{ifVersion:p}),S}}r.put(Ga,gl(o,t,s,i?.localTime?1:0,g,d,Ol),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var RO,gO,Al,Ga,rh,Cx,ka,ao,Dx,sh,AO,Lx,OO,nh,ch,ih,Ol,oo,Nl,oh,ah,Ux,Ei,xa=Te(()=>{RO=require("msgpackr");io();gO=L(q()),Al=new Uint8Array([1,1,1,1,4,64,0,0]),Ga=new Uint8Array([1,1,1,1,1,0,0,0]),rh=new Uint8Array([1,1,1,1,3,64,0,0]),Cx=Symbol("local-timestamp"),ka=Symbol("metadata"),ao=new Uint8Array(8),Dx=new DataView(ao.buffer,0,8),sh=0,AO=0,Lx=1,OO=3,nh=4,ch=16,oo=0,Nl=-1,oh=0,ah=class extends RO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(oo||Nl>=0){let i=0,o=oo;o&&(i+=8,oo=0);let c=Nl,u=oh;c>=0&&(i+=2,Nl=-1,u&&(i+=8,oh=0));let _=ih=r.call(this,s,n|2048|i);Ol=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Al[4]=o,Al[5]=o>>8,_.set(Al,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(ao,0,c),c+=8;else for(let d=0;d<8;d++)ao[d]=t[c++];u=NO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ch&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[ka]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(NO,"getTimestamp");Ux=Map.prototype.get;a(bl,"handleLocalTimeForGets");Ei=[];setInterval(()=>{for(let e=0;e<Ei.length;e++){let t=Ei[e].deref();!t||t.isDone||t.isCommitted?Ei.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&gO.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(uh,"getUpdateRecord")});var yl=T((Kie,yO)=>{"use strict";var _h=j(),dh=N(),{RecordEncoder:Mx}=(xa(),Z(bO));_h.initSync();var Px=_h.get(dh.CONFIG_PARAMS.STORAGE_COMPRESSION),vx=_h.get(dh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Bx=dh.UPDATES_PROPERTY,lh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Px&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=vx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Mx},this.alwaysLazyProperty=s=>s===Bx)}};yO.exports=lh});var wl=T((Qie,wO)=>{"use strict";var co=j(),Va=N();co.initSync();var Hx=co.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||co.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||co.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",IO=co.get(Va.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),qx=co.get(Va.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Il=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=Hx,this.noFSAccess=!0,IO!==void 0&&(this.overlappingSync=IO),this.noReadAhead=qx}};wO.exports=Il;Il.MAX_DBS=1e4});var Me=T((Jie,qO)=>{"use strict";var Eh=require("lmdb"),as=require("fs-extra"),mr=require("path"),Cl=fr(),LO=q(),Wt=dr().LMDB_ERRORS_ENUM,Dl=aO(),hh=yl(),UO=wl(),Mn=je(),CO=N(),{table:Fx,resetDatabases:Gx}=(fe(),Z(Ce)),DO=j(),cs=Mn.INTERNAL_DBIS_NAME,MO=Mn.DBI_DEFINITION_NAME,xx="data.mdb",kx="lock.mdb",$a=".mdb",Vx="-lock",fh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Mn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Eh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ll(e,t){if(e===void 0)throw new Error(Wt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Wt.ENV_NAME_REQUIRED)}a(Ll,"pathEnvNameValidation");async function mh(e,t,r=!0){try{await as.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Wt.INVALID_BASE_PATH):s}try{let s=mr.join(e,t+$a);return await as.access(s,as.constants.R_OK|as.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await as.access(mr.join(e,t,xx),as.constants.R_OK|as.constants.F_OK),mr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Wt.INVALID_ENVIRONMENT)}else throw new Error(Wt.INVALID_ENVIRONMENT);throw s}}a(mh,"validateEnvironmentPath");function Ul(e,t){if(Cl.validateEnv(e),t===void 0)throw new Error(Wt.DBI_NAME_REQUIRED)}a(Ul,"validateEnvDBIName");async function $x(e,t,r=!1,s=!1){Ll(e,t);let n=mr.basename(e);t=t.toString();let i=DO.get(CO.CONFIG_PARAMS.DATABASES);i||DO.setProperty(CO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await mh(e,t,s),PO(e,t,r)}catch(o){if(o.message===Wt.INVALID_ENVIRONMENT){let c=mr.join(e,t);await as.mkdirp(s?c:e);let u=new UO(s?c:c+$a,!1),_=Eh.open(u);_.dbis=Object.create(null);let l=new hh(!1);_.openDB(cs,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ph(e,t,r);return _[Mn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a($x,"createEnvironment");async function Yx(e,t,r,s=!0){Ll(e,t),t=t.toString();let n=mr.join(e,t);return Fx({table:t,database:mr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Yx,"copyEnvironment");async function PO(e,t,r=!1){Ll(e,t),t=t.toString();let s=ph(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 mh(e,t),i=mr.join(e,t+$a),o=n!=i,c=new UO(n,o),u=Eh.open(c);u.dbis=Object.create(null);let _=BO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Mn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(PO,"openEnvironment");async function Kx(e,t,r=!1){Ll(e,t),t=t.toString();let s=mr.join(e,t+$a),n=await mh(e,t);if(global.lmdb_map!==void 0){let i=ph(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await vO(o),delete global.lmdb_map[i]}}await as.remove(n),await as.remove(n===s?n+Vx:mr.join(mr.dirname(n),kx))}a(Kx,"deleteEnvironment");async function vO(e){Cl.validateEnv(e);let t=e[Mn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(vO,"closeEnvironment");function ph(e,t,r=!1){let n=`${mr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(ph,"getCachedEnvironmentName");function Wx(e){Cl.validateEnv(e);let t=Object.create(null),r=Fr(e,cs);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==cs)try{t[s]=Object.assign(new Dl,n)}catch{LO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Wx,"listDBIDefinitions");function BO(e){Cl.validateEnv(e);let t=[],r=Fr(e,cs);for(let{key:s}of r.getRange({start:!1}))s!==cs&&t.push(s);return t}a(BO,"listDBIs");function Qx(e,t){let s=Fr(e,cs).getEntry(t),n=new Dl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{LO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Qx,"getDBIDefinition");function HO(e,t,r,s=!r){if(Ul(e,t),t=t.toString(),t===cs)throw new Error(Wt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===Wt.DBI_DOES_NOT_EXIST){let i=new hh(r,s===!0),o=e.openDB(t,i),c=new Dl(r===!0,s);return o[MO]=c,Fr(e,cs).putSync(t,c),e.dbis[t]=o,o}throw n}}a(HO,"createDBI");function Fr(e,t){if(Ul(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==cs?r=Qx(e,t):r=new Dl,r===void 0)throw new Error(Wt.DBI_DOES_NOT_EXIST);let s;try{let n=new hh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Wt.DBI_DOES_NOT_EXIST):n}return s[MO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function zx(e,t){Ul(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Mn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(zx,"statDBI");async function Jx(e,t){try{let r=mr.join(e,t+$a);return(await as.stat(r)).size}catch{throw new Error(Wt.INVALID_ENVIRONMENT)}}a(Jx,"environmentDataSize");function jx(e,t){if(Ul(e,t),t=t.toString(),t===cs)throw new Error(Wt.CANNOT_DROP_INTERNAL_DBIS_NAME);Fr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fr(e,cs).removeSync(t)}a(jx,"dropDBI");function Xx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Fr(e,i)}catch(o){if(o.message===Wt.DBI_DOES_NOT_EXIST)HO(e,i,i!==t,i===t),s=!0;else throw o}}s&&Gx()}a(Xx,"initializeDBIs");qO.exports={openDBI:Fr,openEnvironment:PO,createEnvironment:$x,listDBIs:BO,listDBIDefinitions:Wx,createDBI:HO,dropDBI:jx,statDBI:zx,deleteEnvironment:Kx,initializeDBIs:Xx,TransactionCursor:fh,environmentDataSize:Jx,copyEnvironment:Yx,closeEnvironment:vO}});var GO=T((Xie,FO)=>{"use strict";var Sh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};FO.exports=Sh});var kO=T((eoe,xO)=>{"use strict";var Th=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};xO.exports=Th});var $O=T((roe,VO)=>{"use strict";var Rh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};VO.exports=Rh});var uo=T((aoe,WO)=>{"use strict";var Zx=Me(),ek=GO(),tk=kO(),rk=$O(),Ds=fr(),Ya=dr().LMDB_ERRORS_ENUM,sk=je(),en=N(),nk=V(),ik=require("uuid"),noe=require("lmdb"),{handleHDBError:ok,hdb_errors:ak}=X(),{OVERFLOW_MARKER:ioe,MAX_SEARCH_KEY_LENGTH:ooe}=sk,YO=j();YO.initSync();var Ml=YO.get(en.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gh=en.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hi=en.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ck(e,t,r,s,n=Ds.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new ek,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];KO(_,!0,n);let l=uk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Oh(o,c,s,i,n)}a(ck,"insertRecords");function uk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][en.FUNC_VAL],s[o]=c)}let u=Ds.getIndexedValues(c),_=e.dbis[o];if(u){Ml&&_.prefetch(u.map(l=>({key:l,value:n})),Pl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Ml&&e.dbis[t].prefetch([n],Pl),e.dbis[t].put(n,s,s[hi])})}a(uk,"insertRecord");function lk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(lk,"removeSkippedRecords");function KO(e,t,r){let s=r>0;(s||!Number.isInteger(e[hi]))&&(e[hi]=r||(r=Ds.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[gh]))&&(e[gh]=r||Ds.getNextMonotonicTime()):delete e[gh]}a(KO,"setTimestamps");function Ah(e,t,r){r.indexOf(en.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(en.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(en.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(en.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Zx.initializeDBIs(e,t,r)}a(Ah,"initializeTransaction");async function _k(e,t,r,s,n=Ds.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new tk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Nh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Oh(c,u,s,i,n,o)}a(_k,"updateRecords");async function dk(e,t,r,s,n=Ds.getNextMonotonicTime()){try{bh(e,t,r,s)}catch(u){throw ok(u,u.message,ak.HTTP_STATUS_CODES.BAD_REQUEST)}Ah(e,t,r);let i=new rk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;nk.isEmpty(_[t])?(l=ik.v4(),_[t]=l):l=_[t];let d=Nh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Oh(o,c,s,i,n)}a(dk,"upsertRecords");async function Oh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ds.getNextMonotonicTime(),lk(r,i),s}a(Oh,"finalizeWrite");function Nh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(KO(r,!l,o),Number.isInteger(r[hi])&&_[hi]>r[hi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][en.FUNC_VAL],r[h]=p)}if(p===g)continue;let I=Ds.getIndexedValues(g);if(I){Ml&&S.prefetch(I.map(b=>({key:b,value:s})),Pl);for(let b=0,Y=I.length;b<Y;b++)S.remove(I[b],s)}if(I=Ds.getIndexedValues(p),I){Ml&&S.prefetch(I.map(b=>({key:b,value:s})),Pl);for(let b=0,Y=I.length;b<Y;b++)S.put(I[b],s)}}let E=Object.assign({},_,r);c.put(s,E,E[hi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Nh(e,t,r,s,n,i,o))}a(Nh,"updateUpsertRecord");function fk(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(Ya.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ya.WRITE_ATTRIBUTES_REQUIRED):new Error(Ya.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(fk,"validateBasic");function bh(e,t,r,s){if(fk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ya.RECORDS_REQUIRED):new Error(Ya.RECORDS_MUST_BE_ARRAY)}a(bh,"validateWrite");function Pl(){}a(Pl,"noop");WO.exports={insertRecords:ck,updateRecords:_k,upsertRecords:dk}});var mi=T((uoe,Ek)=>{Ek.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ls=T((loe,JO)=>{"use strict";var zO=V(),QO=N(),lo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,tn=require("joi"),Pn={schema_format:{pattern:lo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},hk=tn.alternatives(tn.string().min(1).max(Pn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),tn.number()).required(),mk=tn.alternatives(tn.string().min(1).max(Pn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),tn.number()),pk=tn.alternatives(tn.string().min(1).max(Pn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),tn.number()).required();function Sk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Pn.schema_length.maximum?`'${e}' maximum of 250 characters`:lo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Sk,"checkValidTable");function Tk(e,t){return zO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Tk,"validateSchemaExists");function Rk(e,t){let r=t.state.ancestors[0].schema;return zO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Rk,"validateTableExists");function gk(e,t){return e.toLowerCase()===QO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${QO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(gk,"validateSchemaName");JO.exports={common_validators:Pn,schema_regex:lo,hdb_schema_table:hk,validateSchemaExists:Tk,validateTableExists:Rk,validateSchemaName:gk,checkValidTable:Sk,hdb_database:mk,hdb_table:pk}});var He=T((doe,jO)=>{"use strict";var Qt=require("validate.js");Qt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Qt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Qt.validators.type.checks={Object:function(e){return Qt.isObject(e)&&!Qt.isArray(e)},Array:Qt.isArray,Integer:Qt.isInteger,Number:Qt.isNumber,String:Qt.isString,Date:Qt.isDate,Boolean:function(e){return typeof e=="boolean"}};Qt.validators.hasValidFileExt=function(e,t){return Qt.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};jO.exports={validateObject:Ak,validateObjectAsync:Ok,validateBySchema:Nk};function Ak(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Qt(e,t,{format:"flat"});return r?new Error(r):null}a(Ak,"validateObject");async function Ok(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Qt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Ok,"validateObjectAsync");function Nk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Nk,"validateBySchema")});var vl=T((Eoe,XO)=>{var{common_validators:Us}=Ls(),Wa=He(),Ka="is required",rt={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function Qa(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(Qa,"makeAttributesStrings");function bk(e){return e=Qa(e),rt.table.presence=!1,rt.attribute.presence=!1,rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(bk,"schema_object");function yk(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence=!1,rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(yk,"table_object");function Ik(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence=!1,Wa.validateObject(e,rt)}a(Ik,"create_table_object");function wk(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence={message:Ka},rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(wk,"attribute_object");function Ck(e){return e=Qa(e),rt.table.presence={message:Ka},rt.attribute.presence=!1,rt.hash_attribute.presence=!1,Wa.validateObject(e,rt)}a(Ck,"describe_table");function Dk(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(Dk,"validateTableResidence");XO.exports={schema_object:bk,create_table_object:Ik,table_object:yk,attribute_object:wk,describe_table:Ck,validateTableResidence:Dk}});var eN=T((moe,ZO)=>{"use strict";var Lk=require("uuid"),yh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Lk.v4(),this.schema_table=`${this.schema}.${this.table}`}};ZO.exports=yh});var Bl=T((Soe,tN)=>{"use strict";var Uk=eN(),Ih=class extends Uk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};tN.exports=Ih});var sN=T((Roe,rN)=>{"use strict";rN.exports=Pk;var Mk="inserted";function Pk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Mk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Pk,"returnObject")});var Hl=T((Aoe,cN)=>{"use strict";var vk=N(),wh=Me(),Bk=uo(),{getSystemSchemaPath:Hk,getSchemaPath:qk}=Be(),Fk=mi(),Gk=vl(),xk=Bl(),kk=sN(),{handleHDBError:nN,hdb_errors:oN}=X(),iN=V(),{HTTP_STATUS_CODES:Vk}=oN,Ch=Fk.hdb_attribute,aN=[];for(let e=0;e<Ch.attributes.length;e++)aN.push(Ch.attributes[e].attribute);var $k="inserted";cN.exports=Yk;async function Yk(e){let t=Gk.attribute_object(e);if(t)throw nN(new Error,t.message,oN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&iN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw nN(new Error,r,Vk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=iN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new xk(e.schema,e.table,e.attribute,e.id);try{let i=await wh.openEnvironment(qk(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);wh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await wh.openEnvironment(Hk(),vk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Bk.insertRecords(o,Ch.hash_attribute,aN,[n]);return kk($k,c,{records:[n]},u)}catch(i){throw i}}a(Yk,"lmdbCreateAttribute")});var Lh=T((Noe,lN)=>{var{hdb_table:Kk,hdb_database:uN}=Ls(),Wk=He(),Dh=require("joi"),Qk={undefined:"undefined",null:"null"},zk=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||Qk[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"),Jk=Dh.object({database:uN,schema:uN,table:Kk,records:Dh.array().items(Dh.object().custom(zk)).required()});lN.exports=function(e){return Wk.validateBySchema(e,Jk)}});var za=T((Ioe,dN)=>{"use strict";var rn=V(),_N=q(),yoe=Lh(),{getDatabases:jk}=(fe(),Z(Ce)),{ClientError:pi}=X();dN.exports=Xk;function Xk(e){if(rn.isEmpty(e))throw new pi("invalid update parameters defined.");if(rn.isEmptyOrZeroLength(e.schema))throw new pi("invalid schema specified.");if(rn.isEmptyOrZeroLength(e.table))throw new pi("invalid table specified.");if(!Array.isArray(e.records))throw new pi("records must be an array");let t=jk()[e.schema]?.[e.table];if(rn.isEmpty(t))throw new pi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&rn.isEmptyOrZeroLength(o[r]))throw _N.error("a valid hash attribute must be provided with update record:",o),new pi("a valid hash attribute must be provided with update record, check log for more info");if(!rn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw _N.error(`a valid hash value must be provided with ${e.operation} record:`,o),new pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!rn.isEmpty(o[r])&&o[r]!==""&&s.has(rn.autoCast(o[r]))&&(o.skip=!0),s.add(rn.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(Xk,"insertUpdateValidate")});var Ja=T((Coe,fN)=>{"use strict";var Zk=N().OPERATIONS_ENUM,Uh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Zk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};fN.exports=Uh});var ec=T((Uoe,EN)=>{"use strict";var Loe=Ja(),ql=N(),Ph=V(),Mh=q(),eV=require("uuid"),{handleHDBError:ja,hdb_errors:tV}=X(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:Za}=tV;EN.exports=rV;function rV(e,t,r){for(let n=0;n<t.length;n++)sV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];nV(i,r,e.operation)}}a(rV,"processRows");function sV(e){if(Buffer.byteLength(String(e))>ql.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),Za.BAD_REQUEST,void 0,void 0,!0);if(Ph.isEmptyOrZeroLength(e)||Ph.isEmpty(e.trim()))throw ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(sV,"validateAttribute");function nV(e,t,r){if(!e.hasOwnProperty(t)||Ph.isEmptyOrZeroLength(e[t])){if(r===ql.OPERATIONS_ENUM.INSERT||r===ql.OPERATIONS_ENUM.UPSERT){e[t]=eV.v4();return}throw Mh.error("Update transaction aborted due to record with no hash value:",e),ja(new Error,Xa.RECORD_MISSING_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ql.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Mh.error(e),ja(new Error,Xa.HASH_VAL_LENGTH_ERR,Za.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Mh.error(e),ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(nV,"validateHash")});var mN=T((Poe,hN)=>{"use strict";var vh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};hN.exports=vh});var TN=T((Boe,SN)=>{"use strict";var Bh=Me(),iV=q(),pN=dr().LMDB_ERRORS_ENUM;SN.exports=oV;async function oV(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 Bh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==pN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Bh.closeEnvironment(global.lmdb_map[s]),await Bh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==pN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){iV.error(t)}}a(oV,"cleanLMDBMap")});var sn=T((qoe,ON)=>{"use strict";var tc=require("crypto"),aV=j(),{CONFIG_PARAMS:cV}=N(),gN="aes-256-cbc",uV=32,lV=16,Hh=64,AN=32,_V=Hh+AN,RN=new Map;ON.exports={encrypt:dV,decrypt:fV,createNatsTableStreamName:EV};function dV(e){let t=tc.randomBytes(uV),r=tc.randomBytes(lV),s=tc.createCipheriv(gN,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(dV,"encrypt");function fV(e){let t=e.substr(0,Hh),r=e.substr(Hh,AN),s=e.substr(_V,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=tc.createDecipheriv(gN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(fV,"decrypt");function EV(e,t){let r=aV.get(cV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=RN.get(r);return s||(s=tc.createHash("md5").update(r).digest("hex"),RN.set(r,s)),s}a(EV,"createNatsTableStreamName")});var vn=T((xoe,bN)=>{"use strict";var Goe=Gr(),Fl=q(),NN=vl(),hV=sn(),Gl=V(),{handleHDBError:xl,hdb_errors:mV}=X(),{HDB_ERROR_MSGS:kl,HTTP_STATUS_CODES:qh}=mV,pV=j();pV.initSync();var{getDatabases:Fh}=(fe(),Z(Ce));bN.exports={describeAll:SV,describeTable:Vl,describeSchema:TV};async function SV(e){try{let t=Gl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Fh(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Vl({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await Vl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Fl.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Fl.error("Got an error in describeAll"),Fl.error(t),xl(new Error,kl.DESCRIBE_ALL_ERR)}}a(SV,"describeAll");async function Vl(e,t){Gl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=NN.describe_table(e);if(i)throw i;let c=Fh()[r];if(!c)throw xl(new Error,kl.SCHEMA_NOT_FOUND(e.schema),qh.NOT_FOUND);let u=c[s];if(!u)throw xl(new Error,kl.TABLE_NOT_FOUND(e.schema,e.table),qh.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=hV.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Fl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Vl,"descTable");async function TV(e){Gl.transformReq(e);let t=NN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Fh()[s];if(!i)throw xl(new Error,kl.SCHEMA_NOT_FOUND(e.schema),qh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Gl.isEmpty(u)||u.describe){let _=await Vl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(TV,"describeSchema")});var nn=T((Yoe,DN)=>{var RV=mi(),{callbackify:IN,promisify:gV}=require("util"),{getDatabases:wN}=(fe(),Z(Ce));DN.exports={setSchemaDataToGlobal:yN,getTableSchema:AV,getSystemSchema:OV,setSchemaDataToGlobalAsync:gV(yN)};var CN=vn(),Voe=IN(CN.describeAll),$oe=IN(CN.describeTable);function yN(e){global.hdb_schema=wN(),e&&e()}a(yN,"setSchemaDataToGlobal");function AV(e,t,r){let s=wN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(AV,"getTableSchema");function OV(){return RV}a(OV,"getSystemSchema")});var pr=T((Woe,PN)=>{"use strict";var Yl=Lh(),Nt=V(),NV=require("util"),Kl=us(),bV=nn(),LN=q(),{handleHDBError:Si,hdb_errors:yV}=X(),{HTTP_STATUS_CODES:Ti}=yV,IV=NV.promisify(bV.getTableSchema),wV="updated",UN="inserted",MN="upserted";PN.exports={insert:DV,update:LV,upsert:UV,validation:CV,flush:MV};async function CV(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await IV(e.schema,e.table),r=Yl(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&&Nt.isEmptyOrZeroLength(c[s]))throw LN.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(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw LN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(CV,"validation");async function DV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Yl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Kl.createRecords(e);return $l(UN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(DV,"insertData");async function LV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Yl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Kl.updateRecords(e);return Nt.isEmpty(s.existing_rows)?$l(wV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):$l(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(LV,"updateData");async function UV(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=Yl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);Nt.transformReq(e);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Kl.upsertRecords(e);return $l(MN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(UV,"upsertData");function $l(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===UN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===MN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a($l,"returnObject");function MV(e){return Nt.transformReq(e),Kl.flush(e.schema,e.table)}a(MV,"flush")});var xh=T((zoe,HN)=>{var PV=He(),Gh=require("joi"),{hdb_table:vV,hdb_database:vN}=Ls(),BN={schema:vN,database:vN,table:vV},BV={date:Gh.date().iso().required()},HV={timestamp:Gh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};HN.exports=function(e,t){let r=t==="timestamp"?{...BN,...HV}:{...BN,...BV},s=Gh.object(r);return PV.validateBySchema(e,s)}});var GN=T((Joe,FN)=>{var qV=He(),kh=require("joi"),{hdb_table:FV,hdb_database:qN}=Ls(),GV=kh.object({schema:qN,database:qN,table:FV,hash_values:kh.array().required(),ids:kh.array()});FN.exports=function(e){return qV.validateBySchema(e,GV)}});var kN=T((joe,xN)=>{"use strict";var Vh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},$h=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Yh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};xN.exports={InsertObject:Vh,NoSQLSeachObject:$h,DeleteResponseObject:Yh}});var qn=T((Zoe,WN)=>{"use strict";var $N=xh(),xV=GN(),Ri=V(),VN=require("moment"),YN=q(),{promisify:kV,callbackify:VV}=require("util"),gi=N(),$V=nn(),Kh=kV($V.getTableSchema),Wh=us(),{DeleteResponseObject:YV}=kN(),{handleHDBError:Bn,hdb_errors:KV}=X(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:Hn}=KV,WV="records successfully deleted",QV=VV(KN);WN.exports={delete:QV,deleteRecord:KN,deleteFilesBefore:zV,deleteAuditLogsBefore:JV};async function zV(e){let t=$N(e,"date");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!VN(e.date,VN.ISO_8601).isValid())throw Bn(new Error,Wl.INVALID_DATE,Hn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Wl.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw Bn(new Error,s,Hn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await Wh.deleteRecordsBefore(e);if(await Kh(e.schema,e.table),YN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(zV,"deleteFilesBefore");async function JV(e){let t=$N(e,"timestamp");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw Bn(new Error,Wl.INVALID_VALUE("Timestamp"),Hn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Wl.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await Wh.deleteAuditLogsBefore(e);return await Kh(e.schema,e.table),YN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(JV,"deleteAuditLogsBefore");async function KN(e){e.ids&&(e.hash_values=e.ids);let t=xV(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await Kh(e.schema,e.table);let s=await Wh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${WV}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new YV;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(KN,"deleteRecord")});var Ql=T((tae,JN)=>{var jV=require("crypto"),QN=9;function XV(e){let t=e$(QN),r=zN(e+t);return t+r}a(XV,"createHash");function ZV(e,t){let r=e.substr(0,QN),s=r+zN(t+r);return e===s}a(ZV,"validateHash");function e$(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(e$,"generateSalt");function zN(e){return jV.createHash("md5").update(e).digest("hex")}a(zN,"md5");JN.exports={hash:XV,validate:ZV}});var XN=T((sae,jN)=>{var Qh=He(),Ht={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 t$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Qh.validateObject(e,Ht)}a(t$,"addUserValidation");function r$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Qh.validateObject(e,Ht)}a(r$,"alterUserValidation");function s$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Qh.validateObject(e,Ht)}a(s$,"dropUserValidation");jN.exports={addUserValidation:t$,alterUserValidation:r$,dropUserValidation:s$}});var De=T((oae,eb)=>{"use strict";var{platform:iae}=require("os"),n$="nats-server.zip",zh="nats-server",i$=process.platform==="win32"?`${zh}.exe`:zh,Jh="HDB",o$=/^[^\s.,*>]+$/,ZN="__request__",a$=a(e=>`${e}.${ZN}`,"REQUEST_SUBJECT"),c$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},u$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},l$={HUB:"hub.pid",LEAF:"leaf.pid"},_$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},d$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Jh,deliver_subject:"__HDB__.WORKQUEUE"},f$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Jh,deliver_subject:"HDB.SCHEMAQUEUE"},E$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Jh,deliver_subject:"HDB.USERQUEUE"},h$={SUCCESS:"success",ERROR:"error"},m$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},p$={TXN:"txn",MSGID:"msgid"},_o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},S$={[_o.ERR]:1,[_o.WRN]:2,[_o.INF]:3,[_o.DBG]:4,[_o.TRC]:5},T$={debug:"-D",trace:"-DVV"};eb.exports={NATS_SERVER_ZIP:n$,NATS_SERVER_NAME:zh,NATS_BINARY_NAME:i$,PID_FILES:l$,NATS_CONFIG_FILES:u$,SERVER_SUFFIX:_$,WORK_QUEUE_CONSUMER_NAMES:d$,SCHEMA_QUEUE_CONSUMER_NAMES:f$,USER_QUEUE_CONSUMER_NAMES:E$,NATS_TERM_CONSTRAINTS_RX:o$,REQUEST_SUFFIX:ZN,UPDATE_REMOTE_RESPONSE_STATUSES:h$,CLUSTER_STATUS_STATUSES:m$,REQUEST_SUBJECT:a$,SUBJECT_PREFIXES:p$,MSG_HEADERS:c$,LOG_LEVELS:_o,LOG_LEVEL_FLAGS:T$,LOG_LEVEL_HIERARCHY:S$}});var rb=T((cae,tb)=>{"use strict";var R$={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))},g$="certificate.pem",A$="privateKey.pem",O$="ca.pem";tb.exports={CERTIFICATE_VALUES:R$,CERTIFICATE_PEM_NAME:g$,PRIVATEKEY_PEM_NAME:A$,CA_PEM_NAME:O$}});var Xh=T((lae,ab)=>{"use strict";var ob=require("fs-extra"),ue=require("joi"),N$=require("os"),{boolean:we,string:Ms,number:bt,array:jh}=ue.types(),{totalmem:sb}=require("os"),fo=require("path"),b$=q(),Jl=V(),uae=rb(),nb=N(),y$=He(),ib="log",I$="components",w$="Invalid logging.rotation.maxSize unit. Available units are G, M or K",C$="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",D$="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",L$="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",U$="rootPath config parameter is undefined",M$="clustering.enabled config parameter is undefined",Ai=bt.min(0).required(),jl=jh.items({host:Ms.required(),port:Ai}).empty(null),on;ab.exports={configValidator:P$,routesValidator:G$,route_constraints:jl};function P$(e){if(on=e.rootPath,Jl.isEmpty(on))throw U$;let t=we.required(),r=bt.min(0).max(1e3).empty(null).default(F$),s=Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(zl),n=Ms.optional().empty(null),i=Ms.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(zl),c=ue.custom(B$).empty(null).default(zl),u=e.clustering?.enabled;if(Jl.isEmpty(u))throw M$;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:Ai,routes:jl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:Ai}).required()}).required(),network:ue.object({port:Ai}).required()}).required(),leafServer:ue.object({network:ue.object({port:Ai,routes:jl}).required(),streams:ue.object({maxAge:bt.min(120).allow(null).optional(),maxBytes:bt.min(1).allow(null).optional(),maxMsgs:bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:we.optional(),databaseLevel:we.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required(),verify:we.optional()}),user:Ms.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:we.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:we,cacheTTL:bt.required(),enableSessions:we}),analytics:ue.object({aggregatePeriod:bt}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:we,logSuccessful:we}),file:we.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:we.optional(),compress:we.optional(),interval:Ms.custom(q$).optional().empty(null),maxSize:Ms.custom(H$).optional().empty(null),path:Ms.optional().empty(null).default(zl)}).required(),root:s,stdStreams:we.required(),auditLog:we.required()}).required(),operationsApi:ue.object({network:ue.object({cors:we.optional(),corsAccessList:jh.optional(),headersTimeout:bt.min(1).optional(),keepAliveTimeout:bt.min(1).optional(),port:bt.optional().empty(null),securePort:bt.optional().empty(null),timeout:bt.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:Ai,securePort:Ai}).required(),webSocket:we.optional(),requireAuthentication:we.optional()}),http:ue.object({compressionThreshold:bt.optional(),cors:we.optional(),corsAccessList:jh.optional(),headersTimeout:bt.min(1).optional(),port:bt.min(0).optional().empty(null),securePort:bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:we.required(),overlappingSync:we.optional(),caching:we.optional(),compression:we.optional(),noReadAhead:we.optional(),path:c,prefetchWrites:we.optional()}).required(),ignoreScripts:we.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(P$,"configValidator");function v$(e){return ob.existsSync(e)?null:`Specified path ${e} does not exist.`}a(v$,"doesPathExist");function B$(e,t){ue.assert(e,Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=v$(e);if(r)return t.message(r)}a(B$,"validatePath");function H$(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(w$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(D$):e}a(H$,"validateRotationMaxSize");function q$(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(C$);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(L$):e}a(q$,"validateRotationInterval");function F$(e,t){let r=t.state.path.join("."),s=N$.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||sb();return i=Math.round(Math.min(i,sb())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),b$.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(F$,"setDefaultThreads");function zl(e,t){if(!Jl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Jl.isEmpty(on))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return fo.join(on,I$);case"logging.root":return fo.join(on,ib);case"clustering.leafServer.streams.path":return fo.join(on,"clustering","leaf");case"storage.path":let s=fo.join(on,nb.LEGACY_DATABASES_DIR_NAME);return ob.existsSync(s)?s:fo.join(on,nb.DATABASES_DIR_NAME);case"logging.rotation.path":return fo.join(on,ib);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(zl,"setDefaultRoot");function G$(e){let t=ue.object({routes:jl});return y$.validateBySchema({routes:e},t)}a(G$,"routesValidator")});var Rr=T((fae,mb)=>{"use strict";var Tr=N(),pt=V(),_t=q(),{configValidator:x$,routesValidator:cb}=Xh(),zt=require("fs-extra"),k$=require("yaml"),ls=require("path"),V$=require("is-number"),lb=require("properties-reader"),$$=require("lodash"),{handleHDBError:Y$}=X(),{HTTP_STATUS_CODES:K$,HDB_ERROR_MSGS:Xl}=dr(),dae=require("minimist"),{server:W$}=(Hr(),Z(ro)),{DATABASES_PARAM_CONFIG:rc,CONFIG_PARAMS:Sr,CONFIG_PARAM_MAP:_s}=Tr,Q$="Unable to get config value because config is uninitialized",z$="Config successfully initialized",J$="Error backing up config file",j$="Empty parameter sent to getConfigValue",_b=ls.join(Tr.PACKAGE_ROOT,"config","yaml",Tr.HDB_DEFAULT_CONFIG_FILE),X$="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ub={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"},Zl,dt,e_;mb.exports={createConfigFile:Z$,getDefaultConfig:eY,getConfigValue:fb,initConfig:em,flattenConfig:Eo,updateConfigValue:Eb,updateConfigObject:rY,getConfiguration:iY,setConfiguration:oY,readConfigFile:rm,getClusteringRoutes:aY,initOldConfig:hb,getConfigFromFile:cY,getConfigFilePath:Oi,addConfig:uY,deleteConfigFromFile:lY,getConfigObj:_Y};function Z$(e){let t=Fn(_b);Zl=Eo(t.toJSON());let r;for(let o in e){let c=_s[o.toLowerCase()];if(c===Sr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Zh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){_t.error(l)}}}r&&db(t,r),tm(t);let s=t.toJSON();dt=Eo(s);let n=t.getIn(["rootPath"]),i=ls.join(n,Tr.HDB_CONFIG_FILE);zt.createFileSync(i),zt.writeFileSync(i,String(t)),_t.trace(`Config file written to ${i}`)}a(Z$,"createConfigFile");function db(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(rc.TABLES))for(let i in s[n][rc.TABLES])for(let o in s[n][rc.TABLES][i]){let c=s[n][rc.TABLES][i][o],u=[Sr.DATABASES,n,rc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Sr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){_t.error("Error parsing schemas CLI/env config arguments",s)}}a(db,"setSchemasConfig");function eY(e){if(Zl===void 0){let r=Fn(_b);Zl=Eo(r.toJSON())}let t=_s[e.toLowerCase()];if(t!==void 0)return Zl[t.toLowerCase()]}a(eY,"getDefaultConfig");function fb(e){if(e==null){_t.error(j$);return}if(dt===void 0){_t.trace(Q$);return}let t=_s[e.toLowerCase()];if(t!==void 0)return dt[t.toLowerCase()]}a(fb,"getConfigValue");function Oi(e=pt.getPropsFilePath()){let t=pt.getEnvCliRootPath();return t?ls.join(t,Tr.HDB_CONFIG_FILE):lb(e).get(Tr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Oi,"getConfigFilePath");function em(e=!1){if(dt===void 0||e){let t;if(!pt.noBootFile()){t=pt.getPropsFilePath();try{zt.accessSync(t,zt.constants.F_OK|zt.constants.R_OK)}catch(i){throw _t.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Oi(t),s;if(r.includes("config/settings.js"))try{hb(r);return}catch(i){if(i.code!==Tr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Fn(r)}catch(i){if(i.code===Tr.NODE_ERROR_CODES.ENOENT){_t.trace(`HarperDB config file not found at ${r}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw _t.error(i),new Error(`Error reading HarperDB config file at ${r}`)}tY(s,r),tm(s);let n=s.toJSON();if(W$.config=n,dt=Eo(n),dt.logging_rotation_rotate)for(let i in ub)dt[i]&&_t.error(`Config ${ub[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_t.trace(z$)}}a(em,"initConfig");function tY(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ls.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ls.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ls.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_t.trace("Updating config file with missing config params"),zt.writeFileSync(t,String(e)))}a(tY,"checkForUpdatedConfig");function tm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=x$(t);if(r.error)throw Xl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(tm,"validateConfig");function rY(e,t){dt===void 0&&(dt={});let r=_s[e.toLowerCase()];if(r===void 0){_t.trace(`Unable to update config object because config param '${e}' does not exist`);return}dt[r.toLowerCase()]=t}a(rY,"updateConfigObject");function Eb(e,t,r=void 0,s=!1,n=!1,i=!1){dt===void 0&&em();let o=fb(_s.hdb_root),c=ls.join(o,Tr.HDB_CONFIG_FILE),u=Fn(c),_;if(r===void 0&&e.toLowerCase()===Sr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=_s[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Zh(f,t);u.setIn([...E],h)}else for(let f in r){let E=_s[f.toLowerCase()];if(E===Sr.HTTP_SECUREPORT&&r[f]===dt[Sr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Sr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===dt[Sr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Sr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Tr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Zh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(g){_t.error(g)}}}_&&db(u,_),tm(u);let l=u.getIn(["rootPath"]),d=ls.join(l,Tr.HDB_CONFIG_FILE);s===!0&&sY(c,l),zt.writeFileSync(d,String(u)),n&&(dt=Eo(u.toJSON())),_t.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Eb,"updateConfigValue");function sY(e,t){try{let r=ls.join(t,"backup",`${Tr.HDB_CONFIG_FILE}.bak`);zt.copySync(e,r),_t.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_t.error(J$),_t.error(r)}}a(sY,"backupConfigFile");var nY=["databases"];function Eo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),e_=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!nY.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Sr[u.toUpperCase()]&&_s[u]&&(n[_s[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Eo,"flattenConfig");function Zh(e,t){if(e===Sr.CLUSTERING_NODENAME||e===Sr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(V$(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return pt.autoCast(t)}a(Zh,"castConfigValue");function iY(){let e=pt.getPropsFilePath(),t=Oi(e);return Fn(t).toJSON()}a(iY,"getConfiguration");async function oY(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Eb(void 0,void 0,n,!0),X$}catch(i){throw typeof i=="string"||i instanceof String?Y$(i,i,K$.BAD_REQUEST,void 0,void 0,!0):i}}a(oY,"setConfiguration");function rm(){let e=pt.getPropsFilePath();try{zt.accessSync(e,zt.constants.F_OK|zt.constants.R_OK)}catch(s){if(!pt.noBootFile())throw _t.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Oi(e);return Fn(t).toJSON()}a(rm,"readConfigFile");function Fn(e){return k$.parseDocument(zt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Fn,"parseYamlDoc");function aY(){let e=rm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pt.isEmptyOrZeroLength(t)?[]:t;let r=cb(t);if(r)throw Xl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pt.isEmptyOrZeroLength(s)?[]:s;let n=cb(s);if(n)throw Xl.CONFIG_VALIDATION(n.message);if(!pt.isEmptyOrZeroLength(s)&&!pt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!pt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Xl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(aY,"getClusteringRoutes");function hb(e){let t=lb(e);dt={};for(let r in _s){let s=t.get(r.toUpperCase());if(pt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=_s[r].toLowerCase();n===Sr.LOGGING_ROOT?dt[n]=ls.dirname(s):dt[n]=s}return dt}a(hb,"initOldConfig");function cY(e){let t=rm();return $$.get(t,e.replaceAll("_","."))}a(cY,"getConfigFromFile");async function uY(e,t){let r=Fn(Oi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await zt.writeFile(Oi(),String(r))}a(uY,"addConfig");function lY(e){let t=Oi(pt.getPropsFilePath()),r=Fn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ls.join(s,Tr.HDB_CONFIG_FILE);zt.writeFileSync(n,String(r))}a(lY,"deleteConfigFromFile");function _Y(){return e_||(em(),e_)}a(_Y,"getConfigObj")});var Sb=T((hae,pb)=>{"use strict";var t_=N(),r_=class{static{a(this,"BaseLicense")}constructor(t=0,r=t_.RAM_ALLOCATION_ENUM.DEFAULT,s=t_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},sm=class extends r_{static{a(this,"ExtendedLicense")}constructor(t=0,r=t_.RAM_ALLOCATION_ENUM.DEFAULT,s=t_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};pb.exports={BaseLicense:r_,ExtendedLicense:sm}});var sc=T((pae,Nb)=>{"use strict";var mo=require("fs-extra"),Tb=Ql(),Rb=require("crypto"),dY=require("moment"),fY=require("uuid").v4,qt=q(),im=require("path"),EY=V(),Gn=N(),hY=Sb().ExtendedLicense,ho="invalid license key format",mY="061183",pY="mofi25",SY="aes-256-cbc",TY=16,RY=32,gb=j();gb.initSync();var nm;Nb.exports={validateLicense:Ab,generateFingerPrint:AY,licenseSearch:Ob,getLicense:bY};function om(){return im.join(gb.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.LICENSE_FILE_NAME)}a(om,"getLicenseDirPath");function gY(){let e=om();return im.join(e,Gn.LICENSE_FILE_NAME)}a(gY,"getLicenseFilePath");function am(){let e=om();return im.join(e,Gn.REG_KEY_FILE_NAME)}a(am,"getFingerPrintFilePath");async function AY(){let e=am();try{return await mo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await OY();throw qt.error(`Error writing fingerprint file to ${e}`),qt.error(t),new Error("There was an error generating the fingerprint")}}a(AY,"generateFingerPrint");async function OY(){let e=fY(),t=Tb.hash(e),r=am();try{await mo.mkdirp(om()),await mo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw qt.error(`Error writing fingerprint file to ${r}`),qt.error(s),new Error("There was an error generating the fingerprint")}return t}a(OY,"writeFingerprint");function Ab(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Gn.RAM_ALLOCATION_ENUM.DEFAULT,version:Gn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return qt.error("empty license key passed to validate."),r;let s=am(),n=!1;try{n=mo.statSync(s)}catch(i){qt.error(i)}if(n){let i;try{i=mo.readFileSync(s,"utf8")}catch{qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(pY),c=o[1];c=Buffer.concat([Buffer.from(c)],TY);let u=Buffer.concat([Buffer.from(i)],RY),_=Rb.createDecipheriv(SY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=NY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ho),qt.error(ho),new Error(ho)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ho),qt.error(ho),new Error(ho)}else r.exp_date=l;r.exp_date<dY().valueOf()&&(r.valid_date=!1),Tb.validate(o[1],`${mY}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||qt.error("Invalid licence"),r}a(Ab,"validateLicense");function NY(e,t){try{let r=Rb.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{qt.warn("Check old license failed")}}a(NY,"checkOldLicense");function Ob(){let e=new hY,t=[];try{t=mo.readFileSync(gY(),"utf-8").split(Gn.NEW_LINE)}catch(r){r.code==="ENOENT"?qt.info("no license file found"):qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(EY.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=Ab(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){qt.error("There was an error parsing the license string."),qt.error(n),e.ram_allocation=Gn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return nm=e,e}a(Ob,"licenseSearch");async function bY(){return nm||await Ob(),nm}a(bY,"getLicense")});var xr=T((Aae,Gb)=>{"use strict";var wb="username is required",Cb="nothing to update, must supply active, role or password to update",Db="password cannot be an empty string",Lb="If role is specified, it cannot be empty.",Ub="active must be true or false";Gb.exports={addUser:PY,alterUser:vY,dropUser:HY,getSuperUser:xY,userInfo:qY,listUsers:n_,listUsersExternal:FY,setUsersToGlobal:So,findAndValidateUser:qb,getClusterUser:kY,USERNAME_REQUIRED:wb,ALTERUSER_NOTHING_TO_UPDATE:Cb,EMPTY_PASSWORD:Db,EMPTY_ROLE:Lb,ACTIVE_BOOLEAN:Ub};var Mb=pr(),yY=qn(),lm=Ql(),Pb=XN(),vb=Gr(),_m=an(),gr=V(),Bb=require("validate.js"),_e=q(),{promisify:IY}=require("util"),dm=sn(),bb=N(),yb=De(),wY=Rr(),Tae=j(),Rae=sc(),CY=mi(),{table:gae}=(fe(),Z(Ce)),{handleHDBError:Ps,hdb_errors:DY}=X(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:cm,HDB_ERROR_MSGS:po}=DY,{UserEventMsg:fm}=ds(),um=require("lodash"),{server:Em}=(Hr(),Z(ro)),LY=q();Em.getUser=qb;var Hb={username:!0,active:!0,role:!0,password:!0},Ib=new Map,s_=vb.searchByValue,UY=vb.searchByHash,MY=IY(yY.delete);async function PY(e){let t=Bb.cleanAttributes(e,Hb),r=Pb.addUserValidation(t);if(r)throw Ps(new Error,r.message,vs.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 s_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ps(new Error,po.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ps(new Error,po.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=dm.encrypt(t.password)),t.password=lm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Mb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await So()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ps(new Error,po.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],_m.signalUserChange(new fm(process.pid)),`${c.username} successfully added`}a(PY,"addUser");async function vY(e){let t=Bb.cleanAttributes(e,Hb);if(gr.isEmptyOrZeroLength(t.username))throw new Error(wb);if(gr.isEmptyOrZeroLength(t.password)&&gr.isEmptyOrZeroLength(t.role)&&gr.isEmptyOrZeroLength(t.active))throw new Error(Cb);if(!gr.isEmpty(t.password)&&gr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Db);if(!gr.isEmpty(t.active)&&!gr.isBoolean(t.active))throw new Error(Ub);let r=BY(t.username);if(!gr.isEmpty(t.password)&&!gr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=dm.encrypt(t.password)),t.password=lm.hash(t.password)),t.role==="")throw new Error(Lb);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await s_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=po.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ps(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=po.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ps(new Error,c,vs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Mb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await So()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return _m.signalUserChange(new fm(process.pid)),n}a(vY,"alterUser");function BY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(BY,"isClusterUser");async function HY(e){try{let t=Pb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(gr.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,po.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await MY(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await So()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return _m.signalUserChange(new fm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(HY,"dropUser");async function qY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=um.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await UY(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(qY,"userInfo");async function FY(){let e;try{e=await n_()}catch(t){throw _e.error("Got an error listing users."),_e.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(FY,"listUsersExternal");async function n_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await s_(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=um.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await s_(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=um.cloneDeep(o),o.role=r[o.role],GY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),gr.errorizeMessage(e)}return null}a(n_,"listUsers");function GY(e){try{if(!e){_e.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(CY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(GY,"appendSystemTablesToRole");async function So(){try{let e=await n_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(So,"setUsersToGlobal");async function qb(e,t,r=!0){global.hdb_users||await So();let s=global.hdb_users.get(e);if(!s)throw Ps(new Error,cm.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ps(new Error,cm.USER_INACTIVE,vs.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(Ib.get(t)===s.password)return n;if(lm.validate(s.password,t))Ib.set(t,s.password);else throw Ps(new Error,cm.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qb,"findAndValidateUser");async function xY(){global.hdb_users||await So();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(xY,"getSuperUser");async function kY(){let e=await n_(),t=wY.getConfigFromFile(bb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!gr.isEmpty(r)&&r?.role?.role===bb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=dm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+yb.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+yb.SERVER_SUFFIX.ADMIN,r}a(kY,"getClusterUser");var Fb=[];Em.invalidateUser=function(e){for(let t of Fb)try{t(e)}catch(r){LY.error("Error invalidating user",r)}};Em.onInvalidatedUser=function(e){Fb.push(e)}});var ic=T((yae,$b)=>{"use strict";var Ni=q(),Ar=N(),VY=TN(),Nae=nn(),bae=vn(),$Y=xr(),{validateEvent:xb}=ds(),nc=us(),YY=require("process"),{resetDatabases:KY}=(fe(),Z(Ce)),WY={[Ar.ITC_EVENT_TYPES.SCHEMA]:QY,[Ar.ITC_EVENT_TYPES.USER]:Vb};async function QY(e){let t=xb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await VY(e.message),await zY(e.message)}a(QY,"schemaHandler");async function zY(e){try{nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=KY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(zY,"syncSchemaMetadata");var kb=[];async function Vb(e){try{try{nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ni.warn(r)}let t=xb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${Ar.HDB_ITC_CLIENT_PREFIX}${YY.pid} received user event:`,e),await $Y.setUsersToGlobal();for(let r of kb)r()}catch(t){Ni.error(t)}}a(Vb,"userHandler");Vb.addListener=function(e){kb.push(e)};$b.exports=WY});var ds=T((Uae,Kb)=>{"use strict";var wae=q(),hm=V(),JY=N(),{ITC_ERRORS:oc}=dr(),{parentPort:Cae,threadId:jY,isMainThread:XY,workerData:Dae}=require("worker_threads"),{onMessageFromWorkers:ZY,broadcast:Lae,broadcastWithAcknowledgement:e1}=Ge();Kb.exports={sendItcEvent:t1,validateEvent:Yb,SchemaEventMsg:r1,UserEventMsg:s1};var i_;ZY(async(e,t)=>{i_=i_||ic(),Yb(e),i_[e.type]&&await i_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function t1(e){return!XY&&e.message&&(e.message.originator=jY),e1(e)}a(t1,"sendItcEvent");function Yb(e){if(typeof e!="object")return oc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||hm.isEmpty(e.type))return oc.MISSING_TYPE;if(!e.hasOwnProperty("message")||hm.isEmpty(e.message))return oc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||hm.isEmpty(e.message.originator))return oc.MISSING_ORIGIN;if(JY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return oc.INVALID_EVENT(e.type)}a(Yb,"validateEvent");function r1(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(r1,"SchemaEventMsg");function s1(e){this.originator=e}a(s1,"UserEventMsg")});var an=T((vae,Jb)=>{"use strict";var Wb=N(),Pae=V(),o_=q(),Qb=mN(),To,{sendItcEvent:zb}=ds();function n1(e){try{o_.trace("signalSchemaChange called with message:",e),To=To||ic();let t=new Qb(Wb.ITC_EVENT_TYPES.SCHEMA,e);return To.schema(t),zb(t)}catch(t){o_.error(t)}}a(n1,"signalSchemaChange");function i1(e){try{o_.trace("signalUserChange called with message:",e),To=To||ic();let t=new Qb(Wb.ITC_EVENT_TYPES.USER,e);return To.user(t),zb(t)}catch(t){o_.error(t)}}a(i1,"signalUserChange");Jb.exports={signalSchemaChange:n1,signalUserChange:i1}});var a_=T((Hae,Xb)=>{"use strict";var jb=V(),o1=N(),a1=q(),c1=Hl(),u1=Bl(),l1=an(),{SchemaEventMsg:_1}=ds(),d1="already exists in";Xb.exports=f1;async function f1(e,t,r){if(jb.isEmptyOrZeroLength(r))return r;let s=[];jb.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 E1(e,t.schema,t.name,i)})),n}a(f1,"lmdbCheckForNewAttributes");async function E1(e,t,r,s){let n=new u1(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await h1(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(d1))a1.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(E1,"createNewAttribute");async function h1(e){let t;return t=await c1(e),l1.signalSchemaChange(new _1(process.pid,o1.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(h1,"createAttribute")});var Ro=T((Fae,Zb)=>{"use strict";var mm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Zb.exports=mm});var ty=T((xae,ey)=>{"use strict";var m1=Ro(),p1=N().OPERATIONS_ENUM,pm=class extends m1{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(p1.INSERT,r,s,n,i),this.records=t}};ey.exports=pm});var sy=T((Vae,ry)=>{"use strict";var S1=Ro(),T1=N().OPERATIONS_ENUM,Sm=class extends S1{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(T1.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ry.exports=Sm});var iy=T((Yae,ny)=>{"use strict";var R1=Ro(),g1=N().OPERATIONS_ENUM,Tm=class extends R1{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(g1.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};ny.exports=Tm});var ay=T((Wae,oy)=>{"use strict";var A1=Ro(),O1=N().OPERATIONS_ENUM,Rm=class extends A1{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(O1.DELETE,s,n,t,i),this.original_records=r}};oy.exports=Rm});var ac=T((Jae,_y)=>{"use strict";var zae=require("path"),cy=Me(),N1=ty(),b1=sy(),y1=iy(),I1=ay(),go=je(),uy=V(),{CONFIG_PARAMS:w1}=N(),ly=j();ly.initSync();var c_=N().OPERATIONS_ENUM,{getTransactionAuditStorePath:C1}=Be();_y.exports=D1;async function D1(e,t){if(ly.get(w1.LOGGING_AUDITLOG)===!1)return;let r=C1(e.schema,e.table),s=await cy.openEnvironment(r,e.table,!0),n=L1(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){cy.initializeDBIs(s,go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,go.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),uy.isEmpty(n.user_name)||s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(D1,"writeTransaction");function L1(e,t){let r=uy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===c_.INSERT)return new N1(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.UPDATE)return new b1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.UPSERT)return new y1(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.DELETE)return new I1(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(L1,"createTransactionObject")});var gm=T((Zae,dy)=>{"use strict";var U1=za(),Xae=Ja(),cc=N(),M1=ec(),P1=uo().insertRecords,v1=Me(),B1=q(),H1=a_(),{getSchemaPath:q1}=Be(),F1=ac();dy.exports=G1;async function G1(e){try{let{schema_table:t,attributes:r}=U1(e);M1(e,r,t.hash_attribute),e.schema!==cc.SYSTEM_SCHEMA_NAME&&(r.includes(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await H1(e.hdb_auth_header,t,r),n=q1(e.schema,e.table),i=await v1.openEnvironment(n,e.table),o=await P1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await F1(e,o)}catch(c){B1.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(G1,"lmdbCreateRecords")});var hy=T((tce,Ey)=>{"use strict";var fy=N(),x1=gm(),k1=Ja(),V1=require("fs-extra"),{getSchemaPath:$1}=Be();Ey.exports=Y1;async function Y1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new k1(fy.SYSTEM_SCHEMA_NAME,fy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await x1(r),await V1.mkdirp($1(e.schema))}a(Y1,"lmdbCreateSchema")});var py=T((sce,my)=>{"use strict";var Am=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};my.exports=Am});var gy=T((cce,Ry)=>{"use strict";var Sy=Me(),Om=fr(),Nm=dr().LMDB_ERRORS_ENUM,K1=je(),Ty=q(),ice=V(),W1=require("lmdb"),Q1=py(),z1=N(),{OVERFLOW_MARKER:oce,MAX_SEARCH_KEY_LENGTH:ace}=K1,J1=z1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function j1(e,t,r,s){if(Om.validateEnv(e),t===void 0)throw new Error(Nm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Nm.IDS_REQUIRED):new Error(Nm.IDS_MUST_BE_ITERABLE);try{let n=Sy.listDBIs(e);Sy.initializeDBIs(e,t,n);let i=new Q1,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[J1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,W1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let g=n[S];if(!h.hasOwnProperty(g)||g===t)continue;let I=e.dbis[g],b=h[g];if(b!=null)try{let Y=Om.getIndexedValues(b);if(Y)for(let Q=0,G=Y.length;Q<G;Q++)I.remove(Y[Q],o)}catch{Ty.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Ty.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Om.getNextMonotonicTime(),i}catch(n){throw n}}a(j1,"deleteRecords");Ry.exports={deleteRecords:j1}});var uc=T((lce,Oy)=>{"use strict";var Ao=V(),X1=gy(),Z1=Me(),{getSchemaPath:eK}=Be(),tK=ac(),rK=q();Oy.exports=sK;async function sK(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ao.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ao.isEmptyOrZeroLength(e.hash_values)&&!Ao.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ao.isEmpty(u)||e.hash_values.push(u)}}if(Ao.isEmptyOrZeroLength(e.hash_values))return Ay([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ao.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=eK(e.schema,e.table),i=await Z1.openEnvironment(n,e.table),o=await X1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await tK(e,o)}catch(c){rK.error(`unable to write transaction due to ${c.message}`)}return Ay(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(sK,"lmdbDeleteRecords");function Ay(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(Ay,"createDeleteResponse")});var ym=T((fce,Ny)=>{"use strict";var nK=N(),dce=fr();function bm(e,t){let r=Object.create(null);if(t.length===1&&nK.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(bm,"parseRow");function iK(e,t,r,s){let n=bm(r,e);s.push(n)}a(iK,"searchAll");function oK(e,t,r,s){let n=bm(r,e);s[t]=n}a(oK,"searchAllToMap");function aK(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(aK,"iterateDBI");function bi(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(bi,"pushResults");function cK(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(cK,"endsWith");function uK(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(uK,"contains");function lK(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(lK,"greaterThanCompare");function _K(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(_K,"greaterThanEqualCompare");function dK(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(dK,"lessThanCompare");function fK(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(fK,"lessThanEqualCompare");Ny.exports={parseRow:bm,searchAll:iK,searchAllToMap:oK,iterateDBI:aK,endsWith:cK,contains:uK,greaterThanCompare:lK,greaterThanEqualCompare:_K,lessThanCompare:dK,lessThanEqualCompare:fK,pushResults:bi}});var Oo=T((Sce,Ly)=>{"use strict";var xn=Me(),hce=q(),Or=fr(),u_=je(),Xe=dr().LMDB_ERRORS_ENUM,mce=V(),EK=N(),l_=ym(),{parseRow:hK}=l_,pce=require("lmdb"),{OVERFLOW_MARKER:by,MAX_SEARCH_KEY_LENGTH:mK}=u_;function yy(e,t,r,s=!1,n=void 0,i=void 0){return yi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(yy,"iterateFullIndex");function lc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return yi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(b=>({value:b}))):d.getRange(I)})}a(lc,"iterateRangeBetween");function yi(e,t,r,s){let n=e.database||e,i=xn.openDBI(n,r);i[u_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&xn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(yi,"setupTransaction");function Iy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(by)){if(!n)if(r)n=xn.openDBI(e,r);else{let u=xn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=xn.openDBI(e,u[_]),!n[u_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Iy,"getOverflowCheck");function pK(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return yi(e,t,t,(o,c,u)=>(__(r),r=_c(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>hK(_.value,r))))}a(pK,"searchAll");function SK(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);__(r),r=_c(e.database||e,r);let o=new Map;for(let{key:c,value:u}of yy(e,t,t,s,n,i))o.set(c,l_.parseRow(u,r));return o}a(SK,"searchAllToMap");function TK(e,t,r=!1,s=void 0,n=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=yy(e,void 0,t,r,s,n),c=o.transaction,u=Iy(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(TK,"iterateDBI");function RK(e,t){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);return xn.statDBI(e,t).entryCount}a(RK,"countAll");function gK(e,t,r,s,n=!1,i=void 0,o=void 0){return kn(e,r,s),yi(e,t,r,(c,u,_,l)=>(s=Or.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(gK,"equals");function AK(e,t,r){return kn(e,t,r),xn.openDBI(e,t).getValuesCount(r)}a(AK,"count");function OK(e,t,r,s,n=!1,i=void 0,o=void 0){return kn(e,r,s),yi(e,null,r,(c,u)=>{s=Or.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(OK,"startsWith");function NK(e,t,r,s,n=!1,i=void 0,o=void 0){return wy(e,t,r,s,n,i,o,!0)}a(NK,"endsWith");function wy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return kn(e,r,s),yi(e,null,r,(u,_,l,d)=>{let f=Iy(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(by)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[u_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(wy,"contains");function bK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!0,!1)}a(bK,"greaterThan");function yK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!1,!1)}a(yK,"greaterThanEqual");function IK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!0)}a(IK,"lessThan");function wK(e,t,r,s,n=!1,i=void 0,o=void 0){kn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!1)}a(wK,"lessThanEqual");function CK(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Or.validateEnv(e),r===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Xe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Xe.END_VALUE_REQUIRED);if(s=Or.convertKeyValueToWrite(s),n=Or.convertKeyValueToWrite(n),s>n)throw new Error(Xe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return lc(e,t,r,s,n,i,o,c)}a(CK,"between");function DK(e,t,r,s){Or.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(__(r),r=_c(n,r),s===void 0)throw new Error(Xe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=l_.parseRow(c,r)),o}a(DK,"searchByHash");function LK(e,t,r){Or.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(LK,"checkHashExists");function UK(e,t,r,s,n=[]){return Dy(e,t,r,s,n),Cy(e,t,r,s,n).map(i=>i[1])}a(UK,"batchSearchByHash");function MK(e,t,r,s,n=[]){Dy(e,t,r,s,n);let i=new Map;for(let[o,c]of Cy(e,t,r,s,n))i.set(o,c);return i}a(MK,"batchSearchByHashToMap");function Cy(e,t,r,s,n=[]){return yi(e,t,t,(i,o,c)=>{r=_c(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,l_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Cy,"batchHashSearch");function Dy(e,t,r,s,n){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.HASH_ATTRIBUTE_REQUIRED);if(__(r),s==null)throw new Error(Xe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Xe.IDS_MUST_BE_ITERABLE)}a(Dy,"initializeBatchSearchByHash");function __(e){if(!Array.isArray(e))throw e===void 0?new Error(Xe.FETCH_ATTRIBUTES_REQUIRED):new Error(Xe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(__,"validateFetchAttributes");function kn(e,t,r){if(Or.validateEnv(e),t===void 0)throw new Error(Xe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Xe.SEARCH_VALUE_REQUIRED);if(r?.length>mK)throw new Error(Xe.SEARCH_VALUE_TOO_LARGE)}a(kn,"validateComparisonFunctions");function _c(e,t){return t.length===1&&EK.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=xn.listDBIs(e)),t}a(_c,"setGetWholeRowAttributes");Ly.exports={searchAll:pK,searchAllToMap:SK,count:AK,countAll:RK,equals:gK,startsWith:OK,endsWith:NK,contains:wy,searchByHash:DK,setGetWholeRowAttributes:_c,batchSearchByHash:UK,batchSearchByHashToMap:MK,checkHashExists:LK,iterateDBI:TK,greaterThan:bK,greaterThanEqual:yK,lessThan:IK,lessThanEqual:wK,between:CK}});var No=T((Rce,By)=>{var Uy=require("lodash"),My=He(),qe=require("joi"),PK=V(),{hdb_schema_table:d_,checkValidTable:Py,hdb_table:vy,hdb_database:f_}=Ls(),{handleHDBError:vK,hdb_errors:BK}=X(),{getDatabases:HK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:qK}=BK,FK=qe.object({database:f_,schema:f_,table:vy,search_attribute:d_,search_value:qe.any().required(),get_attributes:qe.array().min(1).items(d_).optional(),desc:qe.bool(),limit:qe.number().integer().min(1),offset:qe.number().integer().min(0)}),GK=qe.object({database:f_,schema:f_,table:vy,operator:qe.string().valid("and","or").default("and").lowercase(),offset:qe.number().integer().min(0),limit:qe.number().integer().min(1),get_attributes:qe.array().min(1).items(d_).optional(),conditions:qe.array().min(1).items(qe.object({search_attribute:d_,search_type:qe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:qe.when("search_type",{switch:[{is:"equals",then:qe.any()},{is:"between",then:qe.array().items(qe.alternatives([qe.string(),qe.number()])).length(2)}],otherwise:qe.alternatives(qe.string(),qe.number())}).required()})).required()});By.exports=function(e,t){let r=null;switch(t){case"value":r=My.validateBySchema(e,FK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Py("database",e.schema)),i(Py("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=My.validateBySchema(e,GK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=PK.checkGlobalSchemaTable(e.schema,e.table);if(n)return vK(new Error,n,qK.NOT_FOUND);let o=HK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Uy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Uy.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Im=T((Ace,Hy)=>{"use strict";var xK=Me(),kK=No(),{getSchemaPath:VK}=Be();Hy.exports=$K;function $K(e){let t=kK(e,"hashes");if(t)throw t;let r=VK(e.schema,e.table);return xK.openEnvironment(r,e.table)}a($K,"initialize")});var wm=T((Nce,qy)=>{"use strict";var YK=Oo(),KK=Im();qy.exports=WK;async function WK(e){let t=await KK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return YK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(WK,"lmdbGetDataByHash")});var bo=T((yce,Fy)=>{"use strict";var Cm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Fy.exports=Cm});var xy=T((Cce,Gy)=>{"use strict";var wce=bo(),QK=Oo(),zK=Im();Gy.exports=JK;async function JK(e){let t=await zK(e),r=global.hdb_schema[e.schema][e.table];return QK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(JK,"lmdbSearchByHash")});var Bs=T((Lce,ky)=>{"use strict";var Dm=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};ky.exports=Dm});var E_=T((Mce,Qy)=>{"use strict";var Ft=Oo(),jK=Me(),XK=V(),ae=je(),Ii=N(),ZK=mi(),Vy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:eW}=Be(),cn=Ii.SEARCH_WILDCARDS;async function tW(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=ZK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Wy(e,s.hash_attribute,r,t);return Yy(e,n,s.hash_attribute,r)}a(tW,"prepSearch");async function Yy(e,t,r,s){let n=eW(e.schema,e.table),i=await jK.openEnvironment(n,e.table),o=Ky(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(rW(e,r)===!1){let l=e.search_attribute;if(l===r)return s?$y(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?$y(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Ft.batchSearchByHashToMap(c,r,e.get_attributes,_):Ft.batchSearchByHash(c,r,e.get_attributes,_)}a(Yy,"executeSearch");function Ky(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ae.SEARCH_TYPES.EQUALS:n=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Ft.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Ft.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Ft.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Ft.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ft.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Ft.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ft.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Ky,"searchByType");function $y(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a($y,"createMapFromIterable");function rW(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(rW,"checkToFetchMore");function Wy(e,t,r,s){if(XK.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),cn.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(cn[0])<0&&n.indexOf(cn[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(cn.indexOf(i)>=0&&cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(cn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(cn[0])||n.includes(cn[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Vy.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ii.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ii.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Ii.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Vy.UNKNOWN_SEARCH_TYPE)}}a(Wy,"createSearchTypeFromSearchObject");Qy.exports={executeSearch:Yy,createSearchTypeFromSearchObject:Wy,prepSearch:tW,searchByType:Ky}});var Jy=T((Bce,zy)=>{"use strict";var vce=Bs(),sW=No(),nW=V(),iW=N(),oW=E_();zy.exports=aW;function aW(e,t){if(!nW.isEmpty(t)&&iW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=sW(e,"value");if(s)throw s;let n=!0;return oW.prepSearch(e,t,n)}a(aW,"lmdbGetDataByValue")});var dc=T((Fce,jy)=>{"use strict";var qce=Bs(),cW=No(),uW=V(),lW=N(),_W=E_();jy.exports=dW;async function dW(e,t){if(!uW.isEmpty(t)&&lW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=cW(e,"value");if(s)throw s;return _W.prepSearch(e,t,!1)}a(dW,"lmdbSearchByValue")});var Zy=T((kce,Xy)=>{"use strict";var xce=je(),Lm=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Um=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Mm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Xy.exports={SearchByConditionsObject:Lm,SearchCondition:Um,SortAttribute:Mm}});var nI=T((Kce,sI)=>{"use strict";var $ce=Zy().SearchByConditionsObject,fW=Bs(),EW=No(),Pm=Oo(),h_=je(),{Resource:Yce}=(is(),Z(PE)),rI=E_(),hW=ym(),mW=require("lodash"),{getSchemaPath:pW}=Be(),eI=Me(),{handleHDBError:SW,hdb_errors:TW}=X(),{HTTP_STATUS_CODES:RW}=TW,gW=1e8;sI.exports=AW;async function AW(e){let t=EW(e,"conditions");if(t)throw SW(t,t.message,RW.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=pW(e.schema,e.table),s=await eI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)eI.openDBI(s,_.search_attribute);let i=mW.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===h_.SEARCH_TYPES.EQUALS?_.estimated_count=Pm.count(s,_.search_attribute,_.search_value):l===h_.SEARCH_TYPES.CONTAINS||l===h_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=gW}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await tI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(rI.filterByType),d=l.length,f=Pm.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>hW.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await tI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Pm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(AW,"lmdbSearchByConditions");async function tI(e,t,r,s){let n=new fW(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===h_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,rI.searchByType(e,n,i,s).map(o=>o.value)}a(tI,"executeConditionSearch")});var yo=T((Qce,iI)=>{"use strict";var OW=N().OPERATIONS_ENUM,vm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=OW.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};iI.exports=vm});var Bm=T((Jce,fI)=>{"use strict";var uI=Bs(),lI=yo(),_I=dc(),dI=uc(),Jt=N(),oI=V(),aI=Me(),{getTransactionAuditStorePath:NW,getSchemaPath:bW}=Be(),cI=q();fI.exports=yW;async function yW(e){try{if(oI.isEmpty(global.hdb_schema[e.schema])||oI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await IW(e),await wW(e);let t=bW(e.schema,e.table);try{await aI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")cI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=NW(e.schema,e.table);await aI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")cI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(yW,"lmdbDropTable");async function IW(e){let t=new uI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await _I(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 lI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await dI(n)}a(IW,"deleteAttributesFromSystem");async function wW(e){let t=new uI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await _I(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 lI(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await dI(n)}catch(i){throw i}}a(wW,"dropTableFromSystem")});var hI=T((Xce,EI)=>{"use strict";var CW=require("fs-extra"),DW=Bs(),LW=bo(),UW=yo(),MW=Bm(),PW=uc(),vW=wm(),BW=dc(),un=N(),{getSchemaPath:HW}=Be(),{handleHDBError:qW,hdb_errors:FW}=X(),{HDB_ERROR_MSGS:GW,HTTP_STATUS_CODES:xW}=FW;EI.exports=kW;async function kW(e){let t;try{t=await VW(e.schema);let r=new DW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await BW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await MW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new UW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await PW(n);let i=HW(t);await CW.remove(i)}catch(r){throw r}}a(kW,"lmdbDropSchema");async function VW(e){let t=new LW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await vW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw qW(new Error,GW.SCHEMA_NOT_FOUND(e),xW.NOT_FOUND,void 0,void 0,!0);return s}a(VW,"validateDropSchema")});var m_=T((eue,mI)=>{"use strict";var Hm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};mI.exports=Hm});var SI=T((sue,pI)=>{"use strict";var $W=require("fs-extra"),p_=Me(),{getTransactionAuditStorePath:YW}=Be(),qm=je(),rue=m_();pI.exports=KW;async function KW(e){let t;try{let r=YW(e.schema,e.table);await $W.mkdirp(r),t=await p_.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{p_.createDBI(t,qm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),p_.createDBI(t,qm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),p_.createDBI(t,qm.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(KW,"createTransactionsAuditEnvironment")});var AI=T((iue,gI)=>{"use strict";var Fm=N(),TI=Me(),WW=uo(),{getSystemSchemaPath:QW,getSchemaPath:zW}=Be(),JW=mi(),jW=Hl(),Gm=Bl(),XW=q(),ZW=SI(),km=JW.hdb_table,RI=[];for(let e=0;e<km.attributes.length;e++)RI.push(km.attributes[e].attribute);gI.exports=eQ;async function eQ(e,t){let r=zW(t.schema,t.table),s=new Gm(t.schema,t.table,Fm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Gm(t.schema,t.table,Fm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Gm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await TI.createEnvironment(r,t.table),e!==void 0){let o=await TI.openEnvironment(QW(),Fm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await WW.insertRecords(o,km.hash_attribute,RI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await xm(s),await xm(n),await xm(i)}await ZW(t)}catch(o){throw o}}a(eQ,"lmdbCreateTable");async function xm(e){try{await jW(e)}catch(t){XW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(xm,"createAttribute")});var NI=T((aue,OI)=>{"use strict";var tQ=za(),rQ=ec(),sQ=a_(),fc=N(),nQ=uo().updateRecords,iQ=Me(),{getSchemaPath:oQ}=Be(),aQ=ac(),cQ=q();OI.exports=uQ;async function uQ(e){try{let{schema_table:t,attributes:r}=tQ(e);rQ(e,r,t.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(r.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await sQ(e.hdb_auth_header,t,r),n=oQ(e.schema,e.table),i=await iQ.openEnvironment(n,e.table),o=await nQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await aQ(e,o)}catch(c){cQ.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(uQ,"lmdbUpdateRecords")});var yI=T((uue,bI)=>{"use strict";var lQ=N().OPERATIONS_ENUM,Vm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=lQ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};bI.exports=Vm});var wI=T((due,II)=>{"use strict";var _ue=yI(),_Q=za(),dQ=ec(),fQ=a_(),Ec=N(),EQ=uo().upsertRecords,hQ=Me(),{getSchemaPath:mQ}=Be(),pQ=ac(),SQ=q(),{handleHDBError:TQ,hdb_errors:RQ}=X();II.exports=gQ;async function gQ(e){let t;try{t=_Q(e)}catch(u){throw TQ(u,u.message,RQ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;dQ(e,s,r.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(s.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await fQ(e.hdb_auth_header,r,s),i=mQ(e.schema,e.table),o=await hQ.openEnvironment(i,e.table),c=await EQ(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await pQ(e,c)}catch(u){SQ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(gQ,"lmdbUpsertRecords")});var DI=T((Eue,CI)=>{"use strict";var $m=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};CI.exports=$m});var UI=T((mue,LI)=>{"use strict";var Ym=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};LI.exports=Ym});var vI=T((Tue,PI)=>{"use strict";var Km=Me(),{getTransactionAuditStorePath:AQ}=Be(),Sue=DI(),hc=je(),OQ=V(),MI=UI(),NQ=require("util").promisify,bQ=NQ(setTimeout),yQ=1e4,IQ=100;PI.exports=wQ;async function wQ(e){let t=AQ(e.schema,e.table),r=await Km.openEnvironment(t,e.table,!0),s=Km.listDBIs(r);Km.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new MI;do n=await CQ(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 bQ(IQ);while(n.transactions_deleted>0);return i}a(wQ,"deleteAuditLogsBefore");async function CQ(e,t){let r=new MI;try{let s=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];OQ.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>yQ)break}return await n,r}catch(s){throw s}}a(CQ,"deleteTransactions")});var HI=T((gue,BI)=>{"use strict";var Wm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};BI.exports=Wm});var FI=T((Nue,qI)=>{"use strict";var DQ=Bs(),LQ=yo(),Oue=HI(),Hs=N(),UQ=V(),Qm=Me(),MQ=mi(),PQ=dc(),vQ=uc(),{getSchemaPath:BQ}=Be();qI.exports=HQ;async function HQ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=MQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await FQ(e),n=BQ(e.schema,e.table),i=await Qm.openEnvironment(n,e.table);return t===!0&&await qQ(e,i,r.hash_attribute),Qm.dropDBI(i,e.attribute),s}a(HQ,"lmdbDropAttribute");async function qQ(e,t,r){let s=Qm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(qQ,"removeAttributeFromAllObjects");async function FQ(e){let t=new DQ(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await PQ(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(UQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new LQ(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return vQ(i)}a(FQ,"dropAttributeFromSystem")});var YI=T((Iue,$I)=>{"use strict";var zm=Me(),Io=je(),yue=fr(),Jm=N(),GI=V(),{getTransactionAuditStorePath:GQ}=Be(),xQ=Oo(),S_=Ro(),kQ=q();$I.exports=VQ;async function VQ(e){let t=GQ(e.schema,e.table),r=await zm.openEnvironment(t,e.table,!0),s=zm.listDBIs(r);zm.initializeDBIs(r,Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Jm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return xI(r,e.search_values);case Jm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,YQ(r,e.search_values,n);case Jm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return $Q(r,e.search_values);default:return xI(r)}}a(VQ,"readAuditLog");function xI(e,t=[0,Date.now()]){GI.isEmpty(t[0])&&(t[0]=0),GI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new S_,n))}a(xI,"searchTransactionsByTimestamp");function $Q(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[Io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,VI(e,i))}return Object.fromEntries(r)}a($Q,"searchTransactionsByUsername");function YQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=xQ.equals(e,Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=VI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);kI(u,"records",r,l,o),kI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(YQ,"searchTransactionsByHashValues");function kI(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new S_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new S_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(kI,"loopRecords");function VI(e,t){let r=[];try{let s=e.dbis[Io.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 S_,i);r.push(o)}}catch(i){kQ.warn(i)}return r}catch(s){throw s}}a(VI,"batchSearchTransactions")});var WI=T((Lue,KI)=>{"use strict";var{getSchemaPath:Cue}=Be(),Due=Me(),{database:KQ}=(fe(),Z(Ce));KI.exports={writeTransaction:WQ};async function WQ(e,t,r){return KQ({database:e,table:t}).transaction(r)}a(WQ,"writeTransaction")});var jI=T((Mue,JI)=>{"use strict";var{getSchemaPath:QI}=Be(),zI=Me();JI.exports={flush:QQ,resetReadTxn:zQ};async function QQ(e,t){return(await zI.openEnvironment(QI(e,t),t.toString())).flushed}a(QQ,"flush");async function zQ(e,t){try{(await zI.openEnvironment(QI(e,t),t.toString())).resetReadTxn()}catch{}}a(zQ,"resetReadTxn")});var tw=T((vue,ew)=>{"use strict";var{Readable:JQ}=require("stream"),{getDatabases:jQ}=(fe(),Z(Ce)),{readSync:XQ,openSync:ZQ,createReadStream:XI}=require("fs"),{open:ez}=require("lmdb"),ZI=yl(),tz=wl(),{AUDIT_STORE_OPTIONS:rz}=(io(),Z(TO)),{INTERNAL_DBIS_NAME:sz,AUDIT_STORE_NAME:nz}=je();ew.exports=oz;var jm=32768,iz=100;async function oz(e){let t=e.database||e.schema||"data",r=jQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=ez({noSync:!0,maxDbs:tz.MAX_DBS}),f,E=d.openDB(sz,new ZI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,b){b.encoding="binary",b.encoder=void 0;let Y=d.openDB(I,b),Q=l.openDB(I,b);for(let{key:G,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(G,K,w),p++%iz===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:b}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,b);let[,Y]=I.split("/"),Q=!Y,G=new ZI(!Q,Q);await S(I,G)}e.include_audit&&await S(nz,Object.assign({},rz)),await f;let g=XI(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=ZQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(jm);XQ(c,_,0,jm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=XI(null,{fd:c,start:jm}),f=new JQ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(oz,"getBackup")});var nw=T((Hue,sw)=>{"use strict";var az=q(),{handleHDBError:cz}=X(),uz=iO(),lz=Hl(),_z=gm(),dz=hy(),fz=uc(),Ez=wm(),hz=xy(),mz=Jy(),pz=dc(),Sz=nI(),Tz=hI(),Rz=AI(),gz=NI(),Az=wI(),Oz=vI(),Nz=Bm(),bz=FI(),yz=YI(),Iz=WI(),rw=jI(),wz=tw(),Xm=class extends uz{static{a(this,"LMDBBridge")}async searchByConditions(t){return Sz(t)}async getDataByHash(t){return await Ez(t)}async searchByHash(t){return await hz(t)}async getDataByValue(t,r){return await mz(t,r)}async searchByValue(t){return await pz(t)}async createSchema(t){return await dz(t)}async dropSchema(t){return await Tz(t)}async createTable(t,r){return await Rz(t,r)}async dropTable(t){return await Nz(t)}async createAttribute(t){return await lz(t)}async createRecords(t){return await _z(t)}async updateRecords(t){return await gz(t)}async upsertRecords(t){try{return await Az(t)}catch(r){throw cz(r,null,null,az.ERR,r)}}async deleteRecords(t){return await fz(t)}async dropAttribute(t){return await bz(t)}async deleteAuditLogsBefore(t){return await Oz(t)}async readAuditLog(t){return await yz(t)}writeTransaction(t,r,s){return Iz.writeTransaction(t,r,s)}flush(t,r){return rw.flush(t,r)}resetReadTxn(t,r){return rw.resetReadTxn(t,r)}getBackup(t){return wz(t)}};sw.exports=Xm});var fw={};Je(fw,{ResourceBridge:()=>tp});function rp({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function ow(e,t){let r=qs(e),s=rp(e,r);if(!r)throw new Es.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;ke(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&ll(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function qs(e){let t=e.database||e.schema||Dz,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,Cz.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function aw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*cw(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var uw,T_,Es,lw,_w,ms,Zm,ep,dw,Cz,Dz,Lz,Uz,iw,tp,Ew=Te(()=>{"use strict";uw=L(nw()),T_=L(No()),Es=L(X());fe();lw=L(za()),_w=L(ec()),ms=L(N()),Zm=L(an()),ep=L(ds()),dw=L(V());fi();_l();({HDB_ERROR_MSGS:Cz}=Es.hdb_errors),Dz="data",Lz=1e4,Uz=10,tp=class extends uw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),iw=this}async searchByConditions(t){let r=(0,T_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=qs(t);if(!s)throw new Es.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rp(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Es.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await qs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=qs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){qs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Zm.signalSchemaChange(new ep.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await sp(t.schema),Zm.signalSchemaChange(new ep.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,iw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,lw.default)(t);(0,_w.default)(t,s,r.primaryKey);let n,i=hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return ke(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=ll(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=hs()[t.schema][t.table],s={user:t.hdb_user};return ke(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return aw(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Es.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,dw.async_set_timeout)(Uz),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%Lz===0&&await _();return u.length>0&&await _(),n?aw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,T_.default)(t,"hashes");if(r)throw r;return ow(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of ow(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,T_.default)(t,"value");if(s)throw s;let n=qs(t);if(!n)throw new Es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:rp(t,n)})}async getDataByValue(t,r){let s=new Map,n=qs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){qs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return qs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=qs(t),s={};switch(t.search_type){case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of cw(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return cw(r,t.search_values?.[0],t.search_values?.[1])}}};a(rp,"getSelect");a(ow,"getRecords");a(qs,"getTable");a(aw,"createDeleteResponse");a(cw,"groupRecordsInHistory")});var us=T((Vue,hw)=>{"use strict";var{ResourceBridge:Mz}=(Ew(),Z(fw)),Pz=j();Pz.initSync();var R_;function vz(){return R_||(R_=new Mz,R_)}a(vz,"getBridge");hw.exports=vz()});var Tw=T((Yue,Sw)=>{"use strict";var mw=require("lodash"),pc=require("mathjs"),Bz=require("jsonata"),pw=V();Sw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?mw.uniqWith(e,mw.isEqual):e,searchJSON:Hz,mad:Sc.bind(null,pc.mad),mean:Sc.bind(null,pc.mean),mode:Sc.bind(null,pc.mode),prod:Sc.bind(null,pc.prod),median:Sc.bind(null,pc.median)};function Sc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Sc,"aggregateFunction");function Hz(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(pw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),pw.isEmpty(this.__ala__.res[r])){let s=Bz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Hz,"searchJSON")});var gw=T((Wue,Rw)=>{"use strict";var st=require("moment"),np="YYYY-MM-DDTHH:mm:ss.SSSZZ";st.suppressDeprecationWarnings=!0;Rw.exports={current_date:()=>st().utc().format("YYYY-MM-DD"),current_time:()=>st().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return st(e).utc().format("YYYY");case"month":return st(e).utc().format("MM");case"day":return st(e).utc().format("DD");case"hour":return st(e).utc().format("HH");case"minute":return st(e).utc().format("mm");case"second":return st(e).utc().format("ss");case"millisecond":return st(e).utc().format("SSS");default:break}},date:e=>st(e).utc().format(np),date_format:(e,t)=>st(e).utc().format(t),date_add:(e,t,r)=>st(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>st(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=st(e).utc(),n=st(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>st().utc().valueOf(),get_server_time:()=>st().format(np),offset_utc:(e,t)=>st(e).utc().utcOffset(t).format(np)}});var bw=T((Que,Nw)=>{"use strict";var qz=require("@turf/area"),Fz=require("@turf/length"),Gz=require("@turf/circle"),xz=require("@turf/difference"),kz=require("@turf/distance"),Vz=require("@turf/boolean-contains"),$z=require("@turf/boolean-equal"),Yz=require("@turf/boolean-disjoint"),Kz=require("@turf/helpers"),Aw=N(),de=V();Nw.exports={geoArea:Wz,geoLength:Qz,geoCircle:zz,geoDifference:Jz,geoDistance:Ow,geoNear:jz,geoContains:Xz,geoEqual:Zz,geoCrosses:eJ,geoConvert:tJ};var ip="geo1 is required",op="geo2 is required";function Wz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),qz.default(e)}a(Wz,"geoArea");function Qz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),Fz.default(e,{units:t||"kilometers"})}a(Qz,"geoLength");function zz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),Gz.default(e,t,{units:r||"kilometers"})}a(zz,"geoCircle");function Jz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),xz(e,t)}a(Jz,"geoDifference");function Ow(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),kz.default(e,t,{units:r||"kilometers"})}a(Ow,"geoDistance");function jz(e,t,r,s){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ow(e,t,s)<=r}a(jz,"geoNear");function Xz(e,t){if(de.isEmpty(e))throw new Error(ip);if(de.isEmpty(e))throw new Error(op);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Vz.default(e,t)}a(Xz,"geoContains");function Zz(e,t){if(de.isEmpty(e))throw new Error(ip);if(de.isEmpty(e))throw new Error(op);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),$z.default(e,t)}a(Zz,"geoEqual");function eJ(e,t){if(de.isEmpty(e))throw new Error(ip);if(de.isEmpty(e))throw new Error(op);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!Yz.default(e,t)}a(eJ,"geoCrosses");function tJ(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(Aw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Aw.GEO_CONVERSION_ENUM).join(",")}`);return Kz[t](e,r)}a(tJ,"geoConvert")});var g_=T((Jue,yw)=>{var wi=Tw(),Nr=gw(),Fs=bw();yw.exports=e=>{e.aggr.mad=e.aggr.MAD=wi.mad,e.aggr.mean=e.aggr.MEAN=wi.mean,e.aggr.mode=e.aggr.MODE=wi.mode,e.aggr.prod=e.aggr.PROD=wi.prod,e.aggr.median=e.aggr.MEDIAN=wi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Nr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Nr.current_time,e.fn.extract=e.fn.EXTRACT=Nr.extract,e.fn.date=e.fn.DATE=Nr.date,e.fn.date_format=e.fn.DATE_FORMAT=Nr.date_format,e.fn.date_add=e.fn.DATE_ADD=Nr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Nr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Nr.date_diff,e.fn.now=e.fn.NOW=Nr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Nr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Nr.get_server_time,e.fn.getdate=e.fn.GETDATE=Nr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Nr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Fs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Fs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Fs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Fs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Fs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Fs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Fs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Fs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Fs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Fs.geoNear}});var Dw=T((jue,Cw)=>{"use strict";var Tc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var rJ=g_(),Iw=require("clone"),A_=require("recursive-iterator"),re=q(),ie=V(),wo=us(),sJ=N(),{hdb_errors:nJ}=X(),{getDatabases:ww}=(fe(),Z(Ce)),iJ="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";rJ(yt);var ap=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(ps)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(ps)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(ps)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(ps)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(ps)}}_getColumns(){let t=new A_(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(Iw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=ww()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new A_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new A_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty(sJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Tc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await yt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Iw(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(iJ)>-1&&this.tables.forEach(n=>{let i={columnid:ww()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await wo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await wo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await wo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await wo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(ps)}}}_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 yt.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 yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.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 yt.yy.FuncValue:new yt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await yt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,g=p.length;S<g;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new A_(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Tc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(ps)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await wo.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await yt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(nJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await wo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ps)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Cw.exports=ap});var Gr=T((Zue,Lw)=>{"use strict";var oJ=sO();Lw.exports={searchByConditions:cJ,searchByHash:uJ,searchByValue:lJ,search:_J};var cp=us(),{transformReq:up}=V(),aJ=Dw();async function cJ(e){return up(e),cp.searchByConditions(e)}a(cJ,"searchByConditions");async function uJ(e){up(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of cp.searchByHash(e))r&&t.push(r);return t}a(uJ,"searchByHash");async function lJ(e){up(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of cp.searchByValue(e))t.push(r);return t}a(lJ,"searchByValue");function _J(e,t){try{let r=new oJ(e);r.validate(),new aJ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(_J,"search")});var O_=T((tle,Uw)=>{"use strict";var dJ=us();Uw.exports={writeTransaction:fJ};function fJ(e,t,r){return dJ.writeTransaction(e,t,r)}a(fJ,"writeTransaction")});var Bw=T((nle,vw)=>{"use strict";var EJ=Gr(),hJ=nn(),Mw=q(),mJ=pr(),sle=O_(),pJ=require("clone"),_p=require("alasql"),SJ=g_(),Pw=require("util"),TJ=Pw.promisify(hJ.getTableSchema),RJ=Pw.promisify(EJ.search),gJ=N(),lp=V();SJ(_p);vw.exports={update:OJ};var AJ="There was a problem performing this update. Please check the logs and try again.";async function OJ({statement:e,hdb_user:t}){let r=await TJ(e.table.databaseid,e.table.tableid),s=NJ(e.columns);lp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=pJ(n),c=lp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=_p.parse(u).statements[0],l=await RJ(_),d=bJ(s,l);return yJ(o,d,t)}a(OJ,"update");function NJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=_p.compile(`SELECT ${r.expression.toString()} AS [${gJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Mw.error(t),new Error(AJ)}}a(NJ,"createUpdateRecord");function bJ(e,t){return lp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(bJ,"buildUpdateRecords");async function yJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await mJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Mw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(yJ,"updateRecords")});var qw=T((cle,Hw)=>{var IJ=require("alasql"),wJ=Gr(),CJ=q(),DJ=us(),fp=require("util"),dp=V(),LJ=N(),UJ=nn(),ole=O_(),ale=pr(),MJ="record",PJ="successfully deleted",vJ=fp.callbackify(FJ),BJ=fp.promisify(wJ.search),HJ=fp.promisify(UJ.getTableSchema);Hw.exports={convertDelete:vJ};function qJ(e){return`${e.deleted_hashes.length} ${MJ}${e.deleted_hashes.length===1?"":"s"} ${PJ}`}a(qJ,"generateReturnMessage");async function FJ({statement:e,hdb_user:t}){let r=await HJ(e.table.databaseid,e.table.tableid);dp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=dp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=IJ.parse(o).statements[0],u={operation:LJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await BJ(c);let _=await DJ.deleteRecords(u);return dp.isEmptyOrZeroLength(_.message)&&(_.message=qJ(_)),delete _.txn_time,_}catch(_){throw CJ.error(_),_.hdb_code?_.message:_}}a(FJ,"convertDelete")});var Vw=T((lle,kw)=>{"use strict";var GJ=vn(),{hdb_errors:Fw}=X(),{getDatabases:Gw}=(fe(),Z(Ce));kw.exports={checkSchemaExists:xw,checkSchemaTableExists:xJ,schema_describe:GJ};async function xw(e){if(!Gw()[e])return Fw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(xw,"checkSchemaExists");async function xJ(e,t){let r=await xw(e);if(r)return r;if(!Gw()[e][t])return Fw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xJ,"checkSchemaTableExists")});var Rc=T((dle,kJ)=>{kJ.exports={name:"harperdb",version:"4.2.3",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var I_={};Je(I_,{addAnalyticsListener:()=>Oc,recordAction:()=>br,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>VJ});function VJ(e){Zw=e}function br(e,t,r,s,n){if(!Zw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=y_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},y_.set(i,o)}N_||$J()}function kr(e,t,r,s,n){br(!!e,t,r,s,n)}function Oc(e){rC.push(e)}function $J(){N_=performance.now(),setTimeout(async()=>{let e=performance.now()-N_;N_=0;let t=[],r={time:Date.now(),period:e,threadId:Ci.threadId,metrics:t};for(let[n,i]of y_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of sC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await nC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Ci.threadId,byThread:!0,...s});for(let n of rC)n(t);y_=new Map,Ci.parentPort?Ci.parentPort.postMessage({type:tC,report:r}):aC({report:r})},eC).unref()}async function YJ(e,t=6e4){let r=mp(),s=iC(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:g}=p;for(let I of S||[]){let{path:b,method:Y,type:Q,metric:G,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=G+(b?"-"+b:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let ve=se.threads[g];if(ve)se=ve;else{se.threads[g]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let ve in te){let At=te[ve];typeof At=="number"&&(se[ve]=(se[ve]*Pt+At*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[g]=Object.assign({},te),u.push(se));if(B){B=B.map(ve=>typeof ve=="number"?{value:ve,count:1}:ve);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await nC()}for(let h of u){let{path:p,method:S,type:g,metric:I,count:b,total:Y,distribution:Q,threads:G,...w}=h;G=G.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of G){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=G.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((ve,At)=>ve.value>At.value?1:-1);let g=S.count-1,I=[],b=0,Y=0,Q;for(let ve of sC){let At=g*ve;for(;b<At;)Q=p[Y++],b+=Q.count,Y===1&&b--;let ts=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-ts.value)*(b-At)/Q.count)}let[G,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:G,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,b_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,b_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-$w,active:E-Yw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}$w=f,Yw=E}async function Kw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function mp(){return Ww||(Ww=tt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function iC(){return Qw||(Qw=tt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function QJ(){oC=!0;let e=(0,Ac.get)(hp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await YJ(eC,e),await Kw(mp(),KJ),await Kw(iC(),WJ)},Math.min(e/2,2147483647)).unref()}function aC(e,t){let r=e.report;r.threadId=t?.threadId||Ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(zw+=s.mean*s.count);r.totalBytesProcessed=zw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Jw.get(t))}),Jw.set(t,t.performance.eventLoopUtilization())),r.id=(0,b_.getNextMonotonicTime)(),mp().primaryStore.put(r.id,r),oC||QJ(),zJ&&(cC=jJ(r))}async function jJ(e){if(await cC,!Vn){let r=(0,gc.dirname)((0,Xw.getLogFilePath)());try{Vn=await(0,Ep.open)((0,gc.join)(r,"analytics.log"),"r+")}catch{Vn=await(0,Ep.open)((0,gc.join)(r,"analytics.log"),"w+")}}let t=(await Vn.stat()).size;if(t>JJ){let r=Buffer.alloc(t);await Vn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Vn.write(r,{position:0}),await Vn.truncate(r.length),t=r.length}await Vn.write(JSON.stringify(e)+`
|
|
6
|
+
`,t)}var Ci,jw,Xw,gc,Ep,b_,Ac,hp,y_,Zw,N_,eC,tC,rC,sC,$w,Yw,nC,KJ,WJ,Ww,Qw,oC,zw,Jw,zJ,cC,Vn,JJ,$n=Te(()=>{Ci=require("worker_threads"),jw=L(Ge());fe();Xw=L(q()),gc=require("path"),Ep=require("fs/promises"),b_=L(fr()),Ac=L(j()),hp=L(N());Hr();(0,Ac.initSync)();y_=new Map,Zw=(0,Ac.get)(hp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(VJ,"setAnalyticsEnabled");a(br,"recordAction");lt.recordAnalytics=br;a(kr,"recordActionBinary");N_=0,eC=1e3,tC="analytics-report",rC=[];a(Oc,"addAnalyticsListener");sC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a($J,"sendAnalytics");a(YJ,"aggregation");$w=0,Yw=0,nC=a(()=>new Promise(setImmediate),"rest");a(Kw,"cleanup");KJ=36e5,WJ=31536e6;a(mp,"getRawAnalyticsTable");a(iC,"getAnalyticsTable");(0,jw.setChildListenerByType)(tC,aC);a(QJ,"startScheduledTasks");zw=0,Jw=new Map,zJ=!1;a(aC,"recordAnalytics");JJ=1e6;a(jJ,"logAnalytics")});var $e=T((yle,IC)=>{"use strict";var It=j();It.initSync();var XJ=require("fs-extra"),ZJ=require("semver"),yc=require("path"),{monotonicFactory:e2}=require("ulidx"),lC=e2(),t2=require("util"),_C=require("child_process"),r2=t2.promisify(_C.exec),s2=_C.spawn,ge=De(),Oe=N(),Rp=V(),Vr=q(),w_=sn(),n2=O_(),Nc=Rr(),{onMessageByType:i2}=Ge(),{isMainThread:o2}=require("worker_threads"),{Encoder:a2,decode:gp}=require("msgpackr"),dC=new a2,{isEmpty:Di}=Rp,fC=xr(),c2=48*36e11,u2=5e9;o2&&i2(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,Lo=void 0});var{connect:l2,StorageType:EC,RetentionPolicy:hC,AckPolicy:C_,DeliverPolicy:D_,DiscardPolicy:_2,NatsConnection:Ale,JetStreamManager:Ole,JetStreamClient:Nle,StringCodec:ble,JSONCodec:d2,createInbox:Ap,headers:f2,ErrorCode:uC}=require("nats"),{PACKAGE_ROOT:E2}=N(),h2=Rc(),{recordAction:m2}=($n(),Z(I_)),mC=d2(),p2="clustering",S2=h2.engines[ge.NATS_SERVER_NAME],T2=yc.join(E2,"dependencies"),Tp=yc.join(T2,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),pp,Sp,bc,Co,Do;IC.exports={runCommand:pC,checkNATSServerInstalled:R2,createConnection:Op,getConnection:L_,getJetStreamManager:Ic,getJetStream:SC,getNATSReferences:jt,getServerList:A2,createLocalStream:Np,listStreams:TC,deleteLocalStream:O2,getServerConfig:wc,listRemoteStreams:N2,viewStream:b2,viewStreamIterator:y2,publishToStream:I2,createWorkQueueStream:w2,addSourceToWorkStream:gC,request:D2,removeSourceFromWorkStream:OC,reloadNATS:bp,reloadNATSHub:L2,reloadNATSLeaf:U2,extractServerName:AC,requestErrorHandler:M2,updateWorkStream:P2,createLocalTableStream:bC,createTableStreams:v2,purgeTableStream:yC,purgeSchemaTableStreams:B2,getStreamInfo:H2,updateLocalStreams:F2,closeConnection:g2,getJsmServerName:Cc,addNatsMsgHeader:RC,updateIngestStreamConsumer:C2};async function pC(e,t=void 0){let{stdout:r,stderr:s}=await r2(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
7
|
`,""));return r.replace(`
|
|
8
|
-
`,"")}a(pC,"runCommand");async function T2(){try{await jJ.access(Tp)}catch{return!1}let e=await pC(`${Tp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return XJ.eq(t,p2)}a(T2,"checkNATSServerInstalled");async function Op(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await fC.getClusterUser();if(Di(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}kr.trace("create nats connection called");let i=await u2({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),kr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(Op,"createConnection");async function R2(){ps&&(await ps.drain(),ps=void 0,Co=void 0,Do=void 0,Lo=void 0)}a(R2,"closeConnection");var ps,Lo;async function L_(){return Lo||(Lo=Op(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ps=await Lo),ps||Lo}a(L_,"getConnection");async function Ic(){if(Co)return Co;Di(ps)&&await L_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Co=await ps.jetstreamManager({domain:e,timeout:6e4}),Co}a(Ic,"getJetStreamManager");async function SC(){if(Do)return Do;Di(ps)&&await L_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Do=ps.jetstream({domain:e,timeout:6e4}),Do}a(SC,"getJetStream");async function jt(){let e=ps||await L_(),t=Co||await Ic(),r=Do||await SC();return{connection:e,jsm:t,js:r}}a(jt,"getNATSReferences");async function g2(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await fC.getClusterUser(),n=await Op(t,r,s),i=Ap(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=mC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Rp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(g2,"getServerList");async function Np(e,t){let{jsm:r}=await jt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:EC.File,retention:hC.Limits,subjects:t,discard:l2.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Np,"createLocalStream");async function TC(){let{jsm:e}=await jt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(TC,"listStreams");async function A2(e){let{jsm:t}=await jt();await t.streams.delete(e)}a(A2,"deleteLocalStream");async function O2(e){let{connection:t}=await jt(),r=[],s=Ap(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(mC.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(O2,"listRemoteStreams");async function N2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=lC(),o={durable_name:i,ack_policy:C_.Explicit};t&&(o.deliver_policy=D_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=gp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(N2,"viewStream");async function*b2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=lC(),o={durable_name:i,ack_policy:C_.Explicit};t&&(o.deliver_policy=D_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=gp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(b2,"viewStreamIterator");async function y2(e,t,r,s){kr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=RC(s,r);let{js:n}=await jt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:dC.encode(s);try{kr.trace(`publishToStream publishing to subject: ${o}`),h2(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return NC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){kr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Np(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(y2,"publishToStream");function RC(e,t){t===void 0&&(t=d2());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(RC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),m2);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Di(Sp)&&(Sp={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),Sp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Di(pp)&&(pp={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:yc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),pp;kr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function I2(e){let{jsm:t}=await jt(),r=await Cc();try{await t.streams.add({name:e.stream_name,storage:EC.File,retention:hC.Limits,max_age:a2,max_bytes:c2,subjects:[`${ge.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:C_.Explicit,durable_name:e.durable_name,deliver_policy:D_.All,max_ack_pending:1e4});else throw s}}a(I2,"createWorkQueueStream");async function w2(){let{jsm:e}=await jt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(kr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),kr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:C_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:D_.All,max_ack_pending:1e4}))}a(w2,"updateIngestStreamConsumer");async function gC(e,t,r){let{jsm:s}=await jt(),n=await s.streams.info(t),i=AC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=w_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(gC,"addSourceToWorkStream");function AC(e){return e.split(".")[1]}a(AC,"extractServerName");async function OC(e,t,r){let{jsm:s}=await jt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=w_.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(OC,"removeSourceFromWorkStream");async function C2(e,t,r=6e4,s=Ap()){if(!Rp.isObject(t))throw new Error("data param must be an object");let n=dC.encode(t),{connection:i}=await jt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return gp(c.data)}a(C2,"request");function bp(e){return new Promise(async(t,r)=>{let s=r2(Tp,["--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(bp,"reloadNATS");async function D2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await bp(e)}a(D2,"reloadNATSHub");async function L2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await bp(e)}a(L2,"reloadNATSLeaf");function U2(e,t,r){let s;switch(e.code){case uC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case uC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(U2,"requestErrorHandler");async function M2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await NC(async()=>{e.subscribe===!0?await gC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await OC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(M2,"updateWorkStream");function NC(e){return s2.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(NC,"exclusiveLock");async function bC(e,t){let r=w_.createNatsTableStreamName(e,t),s=await Cc(),n=H2(e,t,s);await Np(r,[n])}a(bC,"createLocalTableStream");async function P2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await bC(s,n)}}a(P2,"createTableStreams");async function yC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=w_.createNatsTableStreamName(e,t),{jsm:s}=await jt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")kr.warn(r);else throw r}}a(yC,"purgeTableStream");async function v2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await yC(e,t[r])}a(v2,"purgeSchemaTableStreams");async function B2(e){return(await Ic()).streams.info(e)}a(B2,"getStreamInfo");function H2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(H2,"createSubjectName");async function Cc(){if(bc)return bc;if(bc=(await Ic())?.nc?.info?.server_name,bc===void 0)throw new Error("Unable to get jetstream manager server name");return bc}a(Cc,"getJsmServerName");async function q2(){let e=await Ic(),t=await Cc(),r=await TC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=F2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");kr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(q2,"updateLocalStreams");function F2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(F2,"updateStreamLimits")});var Dc=T((Cle,LC)=>{"use strict";var Uo=vl(),Mo=Vw(),G2=q(),x2=require("uuid").v4,wle=require("clone"),M_=an(),Po=N(),k2=require("util"),Yn=cs(),{handleHDBError:Xt,hdb_errors:V2}=X(),{HDB_ERROR_MSGS:U_,HTTP_STATUS_CODES:Zt}=V2,{SchemaEventMsg:P_}=_s(),wC=$e(),{getDatabases:$2}=(fe(),Z(Ce)),{transformReq:vo}=V();LC.exports={createSchema:Y2,createSchemaStructure:CC,createTable:K2,createTableStructure:DC,createAttribute:j2,dropSchema:W2,dropTable:Q2,dropAttribute:z2,getBackup:X2};async function Y2(e){let t=await CC(e);return M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema)),t}a(Y2,"createSchema");async function CC(e){let t=Uo.schema_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(vo(e),!await Mo.checkSchemaExists(e.schema))throw Xt(new Error,U_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Po.LOG_LEVELS.ERROR,U_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Yn.createSchema(e),`database '${e.schema}' successfully created`}a(CC,"createSchemaStructure");async function K2(e){return vo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await DC(e)}a(K2,"createTable");async function DC(e){let t=Uo.create_table_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo.validateTableResidence(e.residence),!await Mo.checkSchemaTableExists(e.schema,e.table))throw Xt(new Error,U_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Po.LOG_LEVELS.ERROR,U_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:x2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Yn.createTable(s,e);else throw Xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await Yn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(DC,"createTableStructure");async function W2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Uo.schema_object(e),s=t??r;if(s)throw Xt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);vo(e);let n=await Mo.checkSchemaExists(e.schema);if(n)throw Xt(new Error,n,Zt.NOT_FOUND,Po.LOG_LEVELS.ERROR,n,!0);let i=await Mo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Yn.dropSchema(e),M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema)),await wC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(W2,"dropSchema");async function Q2(e){let t=Uo.table_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);vo(e);let r=await Mo.checkSchemaTableExists(e.schema,e.table);if(r)throw Xt(new Error,r,Zt.NOT_FOUND,Po.LOG_LEVELS.ERROR,r,!0);return await Yn.dropTable(e),await wC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Q2,"dropTable");async function z2(e){let t=Uo.attribute_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);vo(e);let r=await Mo.checkSchemaTableExists(e.schema,e.table);if(r)throw Xt(new Error,r,Zt.NOT_FOUND,Po.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Xt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Po.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await Yn.dropAttribute(e),J2(e),M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw G2.error(`Got an error deleting attribute ${k2.inspect(e)}.`),s}}a(z2,"dropAttribute");function J2(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(J2,"dropAttributeFromGlobal");async function j2(e){vo(e);let t=$2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await Yn.createAttribute(e),M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(j2,"createAttribute");function X2(e){return Yn.getBackup(e)}a(X2,"getBackup")});var MC=T((Lle,UC)=>{"use strict";var{OPERATIONS_ENUM:Z2}=N(),yp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Z2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};UC.exports=yp});var Ip=T((Ple,qC)=>{"use strict";var e4=cs(),Mle=MC(),v_=V(),B_=N(),t4=j(),{handleHDBError:PC,hdb_errors:r4}=X(),{HDB_ERROR_MSGS:vC,HTTP_STATUS_CODES:BC}=r4,s4=Object.values(B_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),HC="To use this operation audit log must be enabled in harperdb-config.yaml";qC.exports=n4;async function n4(e){if(v_.isEmpty(e.schema))throw new Error(vC.SCHEMA_REQUIRED_ERR);if(v_.isEmpty(e.table))throw new Error(vC.TABLE_REQUIRED_ERR);if(!t4.get(B_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw PC(new Error,HC,BC.BAD_REQUEST,B_.LOG_LEVELS.ERROR,HC,!0);let t=v_.checkSchemaTableExist(e.schema,e.table);if(t)throw PC(new Error,t,BC.NOT_FOUND,B_.LOG_LEVELS.ERROR,t,!0);if(!v_.isEmpty(e.search_type)&&s4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await e4.readAuditLog(e)}a(n4,"readAuditLog")});var GC=T((Ble,FC)=>{"use strict";var{OPERATIONS_ENUM:i4}=N(),wp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=i4.GET_BACKUP,this.schema=t,this.table=r}};FC.exports=wp});var VC=T((Gle,kC)=>{"use strict";var o4=cs(),qle=GC(),Cp=V(),a4=N(),Fle=j(),{handleHDBError:c4,hdb_errors:u4}=X(),{HDB_ERROR_MSGS:xC,HTTP_STATUS_CODES:l4}=u4;kC.exports=_4;async function _4(e){if(Cp.isEmpty(e.schema))throw new Error(xC.SCHEMA_REQUIRED_ERR);if(Cp.isEmpty(e.table))throw new Error(xC.TABLE_REQUIRED_ERR);let t=Cp.checkSchemaTableExist(e.schema,e.table);if(t)throw c4(new Error,t,l4.NOT_FOUND,a4.LOG_LEVELS.ERROR,t,!0);return await o4.getBackup(read_audit_log_object)}a(_4,"getBackup")});var zC=T((kle,QC)=>{var Kn=require("validate.js"),YC=He(),Bo=N(),{handleHDBError:d4,hdb_errors:f4}=X(),{HDB_ERROR_MSGS:Ze,HTTP_STATUS_CODES:E4}=f4,Dp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),h4={STRUCTURE_USER:"structure_user"},$C=Object.values(Bo.ROLE_TYPES_ENUM),m4="attribute_permissions",p4="attribute_name",{PERMS_CRUD_ENUM:Ho}=Bo,S4=[m4,...Object.values(Ho)],KC=[Ho.READ,Ho.INSERT,Ho.UPDATE],T4=[p4,...KC];function R4(e){let t=Dp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,WC(e,t)}a(R4,"addRoleValidation");function g4(e){let t=Dp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,WC(e,t)}a(g4,"alterRoleValidation");function A4(e){let t=Dp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,YC.validateObject(e,t)}a(A4,"dropRoleValidation");var O4=["operation","role","id","permission","hdb_user","hdb_auth_header"];function WC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)O4.includes(s[o])||n.push(s[o]);n.length>0&&nt(Ze.INVALID_ROLE_JSON_KEYS(n),r);let i=YC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nt(o,r)}),e.permission){let o=N4(e);o&&nt(o,r),$C.forEach(c=>{e.permission[c]&&!Kn.isBoolean(e.permission[c])&&nt(Ze.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if($C.indexOf(o)<0){if(o===h4.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||nt(Ze.SCHEMA_NOT_FOUND(d),r)}continue}nt(Ze.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nt(Ze.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){nt(Ze.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{S4.includes(l)||nt(Ze.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ho).forEach(l=>{Kn.isDefined(_[l])?Kn.isBoolean(_[l])||nt(Ze.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):nt(Ze.TABLE_PERM_MISSING(l),r,o,u)}),Kn.isDefined(_.attribute_permissions)){if(!Kn.isArray(_.attribute_permissions)){nt(Ze.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{nt(Ze.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!T4.includes(p)&&p!==Ho.DELETE&&nt(Ze.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Kn.isDefined(E.attribute_name)){nt(Ze.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){nt(Ze.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}KC.forEach(p=>{Kn.isDefined(E[p])?Kn.isBoolean(E[p])||nt(Ze.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):nt(Ze.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;nt(Ze.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return b4(r)}a(WC,"customValidate");QC.exports={addRoleValidation:R4,alterRoleValidation:g4,dropRoleValidation:A4};function N4(e){let{operation:t,permission:r}=e;if(t===Bo.OPERATIONS_ENUM.ADD_ROLE||t===Bo.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 Ze.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bo.ROLE_TYPES_ENUM.SUPER_USER:Bo.ROLE_TYPES_ENUM.CLUSTER_USER;return Ze.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(N4,"validateNoSUPerms");function b4(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ze.ROLE_PERMS_ERROR,...e};return d4(new Error,s,E4.BAD_REQUEST)}else return null}a(b4,"generateRolePermResponse");function nt(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(nt,"addPermError")});var Bp=T(($le,ZC)=>{"use strict";var JC=pr(),jC=Fr(),y4=qn(),Up=zC(),Mp=an(),I4=require("uuid").v4,w4=require("util"),H_=N(),C4=V(),Pp=jC.searchByValue,D4=jC.searchByHash,L4=w4.promisify(y4.delete),U4=vs(),M4=bo(),{hdb_errors:P4,handleHDBError:qo}=X(),{HDB_ERROR_MSGS:XC,HTTP_STATUS_CODES:q_}=P4,{UserEventMsg:vp}=_s();ZC.exports={addRole:v4,alterRole:B4,dropRole:H4,listRoles:q4};function Lp(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(Lp,"scrubRoleDetails");async function v4(e){let t=Up.addRoleValidation(e);if(t)throw t;e=Lp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Pp(r)||[])}catch(i){throw qo(i)}if(s&&s.length>0)throw qo(new Error,XC.ROLE_ALREADY_EXISTS(e.role),q_.CONFLICT,void 0,void 0,!0);e.id||(e.id=I4());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await JC.insert(n),Mp.signalUserChange(new vp(process.pid)),e=Lp(e),e}a(v4,"addRole");async function B4(e){let t=Up.alterRoleValidation(e);if(t)throw t;e=Lp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await JC.update(r)}catch(n){throw qo(n)}if(s&&s?.message==="updated 0 of 1 records")throw qo(new Error,"Invalid role id",q_.BAD_REQUEST,void 0,void 0,!0);return await Mp.signalUserChange(new vp(process.pid)),e}a(B4,"alterRole");async function H4(e){let t=Up.dropRoleValidation(e);if(t)throw qo(new Error,t,q_.BAD_REQUEST,void 0,void 0,!0);let r=new M4(H_.SYSTEM_SCHEMA_NAME,H_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await D4(r));if(s.length===0)throw qo(new Error,XC.ROLE_NOT_FOUND,q_.NOT_FOUND,void 0,void 0,!0);let n=new U4(H_.SYSTEM_SCHEMA_NAME,H_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Pp(n)),o=!1;if(C4.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await L4(c),Mp.signalUserChange(new vp(process.pid)),`${s[0].role} successfully deleted`}a(H4,"dropRole");async function q4(){return Pp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(q4,"listRoles")});var sD=T((Kle,rD)=>{"use strict";var F4=j(),Wn=require("joi"),G4=He(),eD=require("moment"),x4=require("fs-extra"),Hp=require("path"),k4=require("lodash"),Lc=N(),{LOG_LEVELS:Li}=N(),V4="YYYY-MM-DD hh:mm:ss",$4=Hp.resolve(__dirname,"../logs");rD.exports=function(e){return G4.validateBySchema(e,Y4)};var Y4=Wn.object({from:Wn.custom(tD),until:Wn.custom(tD),level:Wn.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:Wn.valid("asc","desc"),limit:Wn.number().min(1),start:Wn.number().min(0),log_name:Wn.custom(K4)});function tD(e,t){if(eD(e,eD.ISO_8601).format(V4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(tD,"validateDatetime");function K4(e,t){if(k4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=F4.get(Lc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Lc.LOG_NAMES.HDB:e,i=n===Lc.LOG_NAMES.INSTALL?Hp.join($4,Lc.LOG_NAMES.INSTALL):Hp.join(s,n);return x4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(K4,"validateReadLogPath")});var Fp=T((Qle,iD)=>{"use strict";var F_=N(),W4=q(),Q4=j(),z4=sD(),qp=require("path"),nD=require("fs-extra"),{once:J4}=require("events"),{handleHDBError:j4,hdb_errors:X4}=X(),{PACKAGE_ROOT:Z4}=N(),e3=qp.join(Z4,"logs"),t3=1e3,r3=200;iD.exports=s3;async function s3(e){let t=z4(e);if(t)throw j4(t,t.message,X4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Q4.get(F_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?F_.LOG_NAMES.HDB:e.log_name,n=s===F_.LOG_NAMES.INSTALL?qp.join(e3,F_.LOG_NAMES.INSTALL):qp.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?t3:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(nD.statSync(n).size-(h+5)*r3,0));let S=nD.createReadStream(n,{start:p});S.on("error",G=>{W4.error(G)});let g=0,I=[],b="",Y;S.on("data",G=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=b+G;let K=0,B;for(;(B=w.exec(G))&&!S.destroyed;){Y&&(Y.message=G.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Pt=se[0],ve=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:ve,tags:se,message:""},K=B.index+x.length}b=G.slice(K)}),S.on("end",G=>{S.destroyed||Y&&(Y.message=b.trim(),Q(Y))}),S.resume();function Q(G){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),G.level===o&&w>=K&&w<=B&&g<E?g++:G.level===o&&w>=K&&w<=B&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case(i&&c):w=new Date(G.timestamp),K=new Date(u),G.level===o&&w>=K&&g<E?g++:G.level===o&&w>=K&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case(i&&_):w=new Date(G.timestamp),B=new Date(l),G.level===o&&w<=B&&g<E?g++:G.level===o&&w<=B&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case(c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&g<E?g++:w>=K&&w<=B&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case i:G.level===o&&g<E?g++:G.level===o&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case c:w=new Date(G.timestamp),K=new Date(u),w>=K&&g<E?g++:w>=K&&g>=E&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case _:w=new Date(G.timestamp),B=new Date(l),w<=B&&g<E?g++:w<=B&&g>=E&&(Qn(G,f,I),g++,g===h&&S.destroy());break;default:g<E?g++:(Qn(G,f,I),g++,g===h&&S.destroy())}}return a(Q,"onLogMessage"),await J4(S,"close"),I}a(s3,"readLog");function Qn(e,t,r){t==="desc"?n3(e,r):t==="asc"?i3(e,r):r.push(e)}a(Qn,"pushLineToResult");function n3(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(n3,"insertDescending");function i3(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(i3,"insertAscending")});var x_=T((Zle,uD)=>{"use strict";var Gp=require("joi"),{string:G_,boolean:oD,date:o3}=Gp.types(),a3=He(),{validateSchemaExists:Jle,validateTableExists:jle,validateSchemaName:Xle}=Ds(),c3=N(),u3=De(),aD=j();aD.initSync();var l3=G_.invalid(aD.get(c3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(u3.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(),cD={operation:G_.valid("add_node","update_node"),node_name:l3,subscriptions:Gp.array().items({table:G_.optional(),schema:G_.required(),subscribe:oD.required(),publish:oD.required().custom(d3),start_time:o3.iso()}).min(1).required()};function _3(e){return a3.validateBySchema(e,Gp.object(cD))}a(_3,"addUpdateNodeValidator");function d3(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(d3,"checkForFalsy");uD.exports={addUpdateNodeValidator:_3,validation_schema:cD}});var _D=T((t_e,lD)=>{var f3=He(),E3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};lD.exports=function(e){return f3.validateObject(e,E3)}});var k_=T((r_e,dD)=>{"use strict";var h3=N().OPERATIONS_ENUM,xp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=h3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dD.exports=xp});var ED=T((n_e,fD)=>{"use strict";var m3={OPERATION:"operation",REFRESH:"refresh"},kp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Vp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};fD.exports={JWTTokens:kp,TOKEN_TYPE_ENUM:m3,JWTRSAKeys:Vp}});var Pc=T((o_e,SD)=>{"use strict";var Mc=require("jsonwebtoken"),$p=require("fs-extra"),Yp=V(),Vr=N(),{handleHDBError:er,hdb_errors:p3}=X(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=p3,Uc=q(),hD=Ql(),Qp=Gr(),S3=pr().update,T3=k_(),R3=an(),{UserEventMsg:g3}=_s(),zn=j();zn.initSync();var Kp=require("path"),{JWTTokens:A3,JWTRSAKeys:O3,TOKEN_TYPE_ENUM:V_}=ED(),N3=zn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",b3=zn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",$_="RS256",Wp;SD.exports={createTokens:y3,validateOperationToken:w3,refreshOperationToken:I3,validateRefreshToken:pD};async function y3(e){if(Yp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Yp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Yp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Qp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Uc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Y_(),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 mD(i,r.private_key,r.passphrase),c=await Mc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:b3,algorithm:$_,subject:V_.REFRESH}),u=hD.hash(c),_=new T3(Vr.SYSTEM_SCHEMA_NAME,Vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await S3(_)}catch(f){Uc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return R3.signalUserChange(new g3(process.pid)),new A3(o,c)}a(y3,"createTokens");async function mD(e,t,r){return await Mc.sign(e,{key:t,passphrase:r},{expiresIn:N3,algorithm:$_,subject:V_.OPERATION})}a(mD,"signOperationToken");async function Y_(){if(Wp===void 0)try{let e=Kp.join(zn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Kp.join(zn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Kp.join(zn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await $p.readFile(e)).toString(),n=(await $p.readFile(t)).toString(),i=(await $p.readFile(r)).toString();Wp=new O3(i,n,s)}catch(e){throw Uc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Wp}a(Y_,"getJWTRSAKeys");async function I3(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await pD(e.refresh_token);let t=await Y_(),r=await Mc.decode(e.refresh_token);return{operation_token:await mD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(I3,"refreshOperationToken");async function w3(e){try{let t=await Y_(),r=await Mc.verify(e,t.public_key,{algorithms:$_,subject:V_.OPERATION});return await Qp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Uc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(w3,"validateOperationToken");async function pD(e){let t;try{let r=await Y_(),s=await Mc.verify(e,r.public_key,{algorithms:$_,subject:V_.REFRESH});t=await Qp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Uc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!hD.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(pD,"validateRefreshToken")});var zp=T((u_e,gD)=>{"use strict";var C3=_D(),Fo=require("passport"),D3=require("passport-local").Strategy,L3=require("passport-http").BasicStrategy,U3=require("util"),M3=Gr(),RD=U3.callbackify(M3.findAndValidateUser),c_e=dr(),P3=N(),TD=Pc();Fo.use(new D3(function(e,t,r){RD(e,t,r)}));Fo.use(new L3(function(e,t,r){RD(e,t,r)}));Fo.serializeUser(function(e,t){t(null,e)});Fo.deserializeUser(function(e,t){t(null,e)});function v3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Fo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===P3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?TD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):TD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Fo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(v3,"authorize");function B3(e,t){let r=C3(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(B3,"checkPermissions");gD.exports={authorize:v3,checkPermissions:B3}});var Jn=T((__e,AD)=>{"use strict";var Jp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},jp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};AD.exports={Node:Jp,NodeSubscription:jp}});var ND=T((f_e,OD)=>{"use strict";var H3=N().OPERATIONS_ENUM,Xp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=H3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};OD.exports=Xp});var vc=T((h_e,bD)=>{"use strict";var Zp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},eS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};bD.exports={RemotePayloadObject:Zp,RemotePayloadSubscription:eS}});var ID=T((p_e,yD)=>{"use strict";var tS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};yD.exports=tS});var DD=T((A_e,CD)=>{"use strict";var q3=ID(),T_e=je(),wD=Me(),F3=q(),{getSchemaPath:R_e,getTransactionAuditStorePath:g_e}=Be(),{getDatabases:G3}=(fe(),Z(Ce));CD.exports=x3;async function x3(e){let t=new q3;try{let r=G3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await wD.environmentDataSize(schema_path,e.name),o=await wD.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){F3.warn(`unable to stat table dbi due to ${r}`)}return t}a(x3,"lmdbGetTableSize")});var UD=T((N_e,LD)=>{"use strict";var rS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};LD.exports=rS});var Go=T((w_e,BD)=>{"use strict";var k3=require("fs-extra"),V3=require("path"),Gt=require("systeminformation"),jn=q(),$3=$e(),sS=De(),W_=N(),Y3=DD(),vD=vn(),{getThreadInfo:MD}=Ge(),fS=j();fS.initSync();var K3=UD(),{openEnvironment:y_e}=Me(),{getSchemaPath:I_e}=Be(),{database:W3}=(fe(),Z(Ce)),K_;BD.exports={getHDBProcessInfo:aS,getNetworkInfo:uS,getDiskInfo:cS,getMemoryInfo:oS,getCPUInfo:iS,getTimeInfo:nS,getSystemInformation:lS,systemInformation:Q3,getTableSize:_S,getMetrics:dS};function nS(){return Gt.time()}a(nS,"getTimeInfo");async function iS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:g,...I}=await Gt.currentLoad();return I.cpus=[],g.forEach(b=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:G,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=b;I.cpus.push(x)}),l.current_load=I,l}catch(e){return jn.error(`error in getCPUInfo: ${e}`),{}}}a(iS,"getCPUInfo");async function oS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return jn.error(`error in getMemoryInfo: ${e}`),{}}}a(oS,"getMemoryInfo");async function aS(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await k3.readFile(V3.join(fS.get(W_.CONFIG_PARAMS.ROOTPATH),W_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===W_.NODE_ERROR_CODES.ENOENT)jn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return jn.error(`error in getHDBProcessInfo: ${t}`),e}}a(aS,"getHDBProcessInfo");async function cS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return jn.error(`error in getDiskInfo: ${t}`),e}}a(cS,"getDiskInfo");async function uS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return jn.error(`error in getNetworkInfo: ${t}`),e}}a(uS,"getNetworkInfo");async function lS(){if(K_!==void 0)return K_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,K_=e,K_}catch(t){return jn.error(`error in getSystemInformation: ${t}`),e}}a(lS,"getSystemInformation");async function _S(){let e=[],t=await vD.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Y3(s));return e}a(_S,"getTableSize");async function dS(){let e=await vD.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=W3({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){jn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(dS,"getMetrics");async function PD(){if(fS.get(W_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await $3.getNATSReferences(),r=await t.streams.info(sS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(sS.WORK_QUEUE_CONSUMER_NAMES.stream_name,sS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(PD,"getNatsStreamInfo");async function Q3(e){let t=new K3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await lS(),t.time=nS(),t.cpu=await iS(),t.memory=await oS(),t.disk=await cS(),t.network=await uS(),t.harperdb_processes=await aS(),t.table_size=await _S(),t.metrics=await dS(),t.threads=await MD(),t.replication=await PD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await lS();break;case"time":t.time=nS();break;case"cpu":t.cpu=await iS();break;case"memory":t.memory=await oS();break;case"disk":t.disk=await cS();break;case"network":t.network=await uS();break;case"harperdb_processes":t.harperdb_processes=await aS();break;case"table_size":t.table_size=await _S();break;case"database_metrics":case"metrics":t.metrics=await dS();break;case"threads":t.threads=await MD();break;case"replication":t.replication=await PD();break;default:break}return t}a(Q3,"systemInformation")});var ES=T((D_e,HD)=>{"use strict";HD.exports={version:z3,printVersion:J3};var Q_=Rc();function z3(){if(Q_)return Q_.version}a(z3,"version");function J3(){Q_&&console.log(`HarperDB Version ${Q_.version}`)}a(J3,"printVersion")});var $r=T((P_e,xD)=>{"use strict";var j3=pr(),hS=V(),X3=require("util"),Ui=N(),qD=j();qD.initSync();var Z3=zp(),FD=Fr(),{Node:U_e,NodeSubscription:M_e}=Jn(),ej=bo(),tj=ND(),{RemotePayloadObject:rj,RemotePayloadSubscription:sj}=vc(),{handleHDBError:nj,hdb_errors:ij}=X(),{HTTP_STATUS_CODES:oj,HDB_ERROR_MSGS:aj}=ij,cj=vs(),uj=Go(),lj=ES(),{getDatabases:_j}=(fe(),Z(Ce)),dj=X3.promisify(Z3.authorize),fj=FD.searchByHash,Ej=FD.searchByValue;xD.exports={authHeaderToUser:hj,isEmpty:mj,getNodeRecord:pj,upsertNodeRecord:Sj,buildNodePayloads:Tj,checkClusteringEnabled:Rj,getAllNodeRecords:gj,getSystemInfo:Aj,reverseSubscription:GD};async function hj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await dj(t,null),e}a(hj,"authHeaderToUser");function mj(e){return e==null}a(mj,"isEmpty");async function pj(e){let t=new ej(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return fj(t)}a(pj,"getNodeRecord");async function Sj(e){let t=new tj(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return j3.upsert(t)}a(Sj,"upsertNodeRecord");function GD(e){if(hS.isEmpty(e.subscribe)||hS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(GD,"reverseSubscription");function Tj(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=hS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=GD(c),E=_j()[u]?.[_],h=new sj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new rj(r,t,n,s)}a(Tj,"buildNodePayloads");function Rj(){if(!qD.get(Ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw nj(new Error,aj.CLUSTERING_NOT_ENABLED,oj.BAD_REQUEST,void 0,void 0,!0)}a(Rj,"checkClusteringEnabled");async function gj(){let e=new cj(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Ej(e))}a(gj,"getAllNodeRecords");async function Aj(){let e=await uj.getSystemInformation();return{hdb_version:lj.version(),node_version:e.node_version,platform:e.platform}}a(Aj,"getSystemInfo")});var mS=T((B_e,zD)=>{"use strict";var z_=$e(),kD=V(),VD=De(),$D=N(),J_=q(),YD=Dc(),Oj=m_(),{RemotePayloadObject:Nj}=vc(),{handleHDBError:KD,hdb_errors:bj}=X(),{HTTP_STATUS_CODES:WD}=bj,{NodeSubscription:QD}=Jn();zD.exports=yj;async function yj(e,t){let r;try{r=await z_.request(`${t}.${VD.REQUEST_SUFFIX}`,new Nj($D.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),J_.trace("Response from remote describe all request:",r)}catch(o){J_.error(`addNode received error from describe all request to remote node: ${o}`);let c=z_.requestErrorHandler(o,"add_node",t);throw KD(new Error,c,WD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===VD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw KD(new Error,o,WD.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===$D.SYSTEM_SCHEMA_NAME){await z_.createLocalTableStream(c,u);let h=new QD(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=kD.doesSchemaExist(c),l=s[c]!==void 0,d=u?kD.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(J_.trace(`addNode creating schema: ${c}`),await YD.createSchema({operation:"create_schema",schema:c})),!d&&f){J_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new Oj(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await YD.createTable(h)}await z_.createLocalTableStream(c,u);let E=new QD(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(yj,"reviewSubscriptions")});var Z_=T((q_e,XD)=>{"use strict";var{handleHDBError:j_,hdb_errors:Ij}=X(),{HTTP_STATUS_CODES:X_}=Ij,{addUpdateNodeValidator:wj}=x_(),Bc=q(),jD=N(),JD=De(),Cj=V(),pS=$e(),Hc=$r(),Dj=j(),Lj=mS(),{Node:Uj,NodeSubscription:Mj}=Jn(),{broadcast:Pj}=Ge(),vj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Bj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Hj=Dj.get(jD.CONFIG_PARAMS.CLUSTERING_NODENAME);XD.exports=qj;async function qj(e,t=!1){Bc.trace("addNode called with:",e),Hc.checkClusteringEnabled();let r=wj(e);if(r)throw j_(r,r.message,X_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Hc.getNodeRecord(s);if(!Cj.isEmptyOrZeroLength(d))throw j_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,X_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Lj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=vj,o;let c=Hc.buildNodePayloads(n,Hj,jD.OPERATIONS_ENUM.ADD_NODE,await Hc.getSystemInfo());Bc.trace("addNode sending remote payload:",c);let u;try{u=await pS.request(`${s}.${JD.REQUEST_SUFFIX}`,c)}catch(d){Bc.error(`addNode received error from request: ${d}`);let f=pS.requestErrorHandler(d,"add_node",s);throw j_(new Error,f,X_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===JD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw j_(new Error,d,X_.INTERNAL_SERVER_ERROR,"error",d)}Bc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Bc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await pS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Mj(E.schema,E.table,E.publish,E.subscribe))}let l=new Uj(s,_,u.system_info);return await Hc.upsertNodeRecord(l),Pj({type:"nats_update"}),i.length>0?o.message=Bj:o.message=`Successfully added '${s}' to manifest`,o}a(qj,"addNode")});var TS=T((G_e,tL)=>{"use strict";var{handleHDBError:ed,hdb_errors:Fj}=X(),{HTTP_STATUS_CODES:td}=Fj,{addUpdateNodeValidator:Gj}=x_(),qc=q(),eL=N(),ZD=De(),xj=V(),SS=$e(),Fc=$r(),kj=j(),{cloneDeep:Vj}=require("lodash"),$j=mS(),{NodeSubscription:Yj}=Jn(),{broadcast:Kj}=Ge(),Wj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Qj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",zj=kj.get(eL.CONFIG_PARAMS.CLUSTERING_NODENAME);tL.exports=Jj;async function Jj(e){qc.trace("updateNode called with:",e),Fc.checkClusteringEnabled();let t=Gj(e);if(t)throw ed(t,t.message,td.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Vj(await Fc.getNodeRecord(r));if(xj.isEmptyOrZeroLength(s))throw ed(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,td.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await $j(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Wj,o;let c=Fc.buildNodePayloads(n,zj,eL.OPERATIONS_ENUM.UPDATE_NODE,await Fc.getSystemInfo());qc.trace("updateNode sending remote payload:",c);let u;try{u=await SS.request(`${r}.${ZD.REQUEST_SUFFIX}`,c)}catch(_){qc.error(`updateNode received error from request: ${_}`);let l=SS.requestErrorHandler(_,"update_node",r);throw ed(new Error,l,td.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===ZD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw ed(new Error,_,td.INTERNAL_SERVER_ERROR,"error",_)}qc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];qc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await SS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await jj(s[0],n,u.system_info),i.length>0?o.message=Qj:o.message=`Successfully updated '${r}'`,o}a(Jj,"updateNode");async function jj(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Yj(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Fc.upsertNodeRecord(s),Kj({type:"nats_update"})}a(jj,"updateNodeTable")});var oL=T((k_e,iL)=>{"use strict";var nL=require("joi"),{string:rL}=nL.types(),Xj=He(),sL=N(),Zj=j(),eX=De();iL.exports=tX;function tX(e){let t=rL.invalid(Zj.get(sL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(eX.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=nL.object({operation:rL.valid(sL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Xj.validateBySchema(e,r)}a(tX,"removeNodeValidator")});var sd=T(($_e,dL)=>{"use strict";var{handleHDBError:aL,hdb_errors:rX}=X(),{HTTP_STATUS_CODES:cL}=rX,sX=oL(),Gc=q(),uL=$r(),nX=V(),rd=N(),lL=De(),_L=$e(),iX=j(),{RemotePayloadObject:oX}=vc(),{NodeSubscription:aX}=Jn(),cX=yo(),uX=qn(),{broadcast:lX}=Ge(),_X=iX.get(rd.CONFIG_PARAMS.CLUSTERING_NODENAME);dL.exports=dX;async function dX(e){Gc.trace("removeNode called with:",e),uL.checkClusteringEnabled();let t=sX(e);if(t)throw aL(t,t.message,cL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await uL.getNodeRecord(r);if(nX.isEmptyOrZeroLength(s))throw aL(new Error,`Node '${r}' was not found.`,cL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new oX(rd.OPERATIONS_ENUM.REMOVE_NODE,_X,[]),i,o=!1;try{i=await _L.request(`${r}.${lL.REQUEST_SUFFIX}`,n),Gc.trace("Remove node reply from remote node:",r,i)}catch(u){Gc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Gc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new aX(l.schema,l.table,!1,!1);await _L.updateWorkStream(d,r)}let c=new cX(rd.SYSTEM_SCHEMA_NAME,rd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await uX.deleteRecord(c),lX({type:"nats_update"}),i?.status===lL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Gc.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(dX,"removeNode")});var hL=T((K_e,EL)=>{"use strict";var fL=require("joi"),{string:fX,array:EX}=fL.types(),hX=He(),mX=x_();EL.exports=pX;function pX(e){let t=fL.object({operation:fX.valid("configure_cluster").required(),connections:EX.items(mX.validation_schema).required()});return hX.validateBySchema(e,t)}a(pX,"configureClusterValidator")});var RS=T((Q_e,RL)=>{"use strict";var SX=N(),nd=q(),TX=V(),RX=sd(),gX=Z_(),mL=$r(),AX=hL(),{handleHDBError:pL,hdb_errors:OX}=X(),{HTTP_STATUS_CODES:SL}=OX,NX="Configure cluster complete.",bX="Failed to configure the cluster. Check the logs for more details.",yX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";RL.exports=IX;async function IX(e){nd.trace("configure cluster called with:",e),mL.checkClusteringEnabled();let t=AX(e);if(t)throw pL(t,t.message,SL.BAD_REQUEST,void 0,void 0,!0);let r=await mL.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(TL(RX,{operation:SX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);nd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(TL(gX,E,E.node_name))}let c=await Promise.allSettled(i);nd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(nd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(TX.isEmptyOrZeroLength(u))return{message:NX,connections:_};if(l)return{message:yX,failed_nodes:u,connections:_};throw pL(new Error,bX,SL.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(IX,"configureCluster");async function TL(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(TL,"functionWrapper")});var AL=T((J_e,gL)=>{"use strict";var id=require("joi"),wX=He(),{validateSchemaExists:CX,validateTableExists:DX,validateSchemaName:LX}=Ds(),UX=id.object({operation:id.string().valid("purge_stream"),schema:id.string().custom(CX).custom(LX).required(),table:id.string().custom(DX).required()});function MX(e){return wX.validateBySchema(e,UX)}a(MX,"purgeStreamValidator");gL.exports=MX});var gS=T((X_e,OL)=>{"use strict";var{handleHDBError:PX,hdb_errors:vX}=X(),{HTTP_STATUS_CODES:BX}=vX,HX=AL(),qX=$e(),FX=$r();OL.exports=GX;async function GX(e){let t=HX(e);if(t)throw PX(t,t.message,BX.BAD_REQUEST,void 0,void 0,!0);FX.checkClusteringEnabled();let{schema:r,table:s}=e;return await qX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(GX,"purgeStream")});var NS=T((ede,CL)=>{"use strict";var OS=$r(),xX=$e(),yL=j(),od=N(),Mi=De(),kX=V(),AS=q(),{RemotePayloadObject:VX}=vc(),{ErrorCode:NL}=require("nats"),bL=yL.get(od.CONFIG_PARAMS.CLUSTERING_ENABLED),IL=yL.get(od.CONFIG_PARAMS.CLUSTERING_NODENAME);CL.exports={clusterStatus:$X,buildNodeStatus:wL};async function $X(){let e={node_name:IL,is_enabled:bL,connections:[]};if(!bL)return e;let t=await OS.getAllNodeRecords();if(kX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(wL(t[s],e.connections));return await Promise.allSettled(r),e}a($X,"clusterStatus");async function wL(e,t){let r=e.name,s=new VX(od.OPERATIONS_ENUM.CLUSTER_STATUS,IL,void 0,await OS.getSystemInfo()),n,i,o=Mi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await xX.request(Mi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Mi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Mi.CLUSTER_STATUS_STATUSES.CLOSED,AS.error(`Error getting node status from ${r} `,n))}catch(u){AS.warn(`Error getting node status from ${r}`,u),u.code===NL.NoResponders?o=Mi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===NL.Timeout?o=Mi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Mi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new YX(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==od.PRE_4_0_0_VERSION&&await OS.upsertNodeRecord(u)}catch(u){AS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(wL,"buildNodeStatus");function YX(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(YX,"NodeStatusObject")});var yS=T((rde,DL)=>{"use strict";var{handleHDBError:KX,hdb_errors:WX}=X(),{HTTP_STATUS_CODES:QX}=WX,zX=$e(),JX=$r(),bS=V(),ad=require("joi"),jX=He(),XX=2e3,ZX=ad.object({timeout:ad.number().min(1),connected_nodes:ad.boolean(),routes:ad.boolean()});DL.exports=eZ;async function eZ(e){JX.checkClusteringEnabled();let t=jX.validateBySchema(e,ZX);if(t)throw KX(t,t.message,QX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||bS.autoCastBoolean(s),o=n===void 0||bS.autoCastBoolean(n),c={nodes:[]},u=await zX.getServerList(r??XX),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:bS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(eZ,"clusterNetwork")});var PL=T((nde,ML)=>{"use strict";var IS=require("joi"),LL=He(),{route_constraints:UL}=Xh();ML.exports={setRoutesValidator:tZ,deleteRoutesValidator:rZ};function tZ(e){let t=IS.object({server:IS.valid("hub","leaf").required(),routes:UL.required()});return LL.validateBySchema(e,t)}a(tZ,"setRoutesValidator");function rZ(e){let t=IS.object({routes:UL.required()});return LL.validateBySchema(e,t)}a(rZ,"deleteRoutesValidator")});var CS=T((ode,qL)=>{"use strict";var Pi=Tr(),wS=V(),cd=N(),vL=PL(),{handleHDBError:BL,hdb_errors:sZ}=X(),{HTTP_STATUS_CODES:HL}=sZ,nZ="cluster routes successfully set",iZ="cluster routes successfully deleted";qL.exports={setRoutes:oZ,getRoutes:aZ,deleteRoutes:cZ};function oZ(e){let t=vL.setRoutesValidator(e);if(t)throw BL(t,t.message,HL.BAD_REQUEST,void 0,void 0,!0);let r=Pi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=wS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:nZ,set:o,skipped:i}}a(oZ,"setRoutes");function aZ(){let e=Pi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(aZ,"getRoutes");function cZ(e){let t=vL.deleteRoutesValidator(e);if(t)throw BL(t,t.message,HL.BAD_REQUEST,void 0,void 0,!0);let r=Pi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=wS.isEmptyOrZeroLength(s)?null:s,Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=wS.isEmptyOrZeroLength(n)?null:n,Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:iZ,deleted:i,skipped:o}}a(cZ,"deleteRoutes")});var GL=T((cde,FL)=>{"use strict";var xc=require("alasql"),vi=require("recursive-iterator"),Ss=q(),uZ=V(),kc=N(),DS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,_Z(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=>kc.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=>!kc.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][kc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=lZ(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!kc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new xc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function lZ(e){return e.filter(t=>t[kc.PERMS_CRUD_ENUM.READ])}a(lZ,"filterReadRestrictedAttrs");function _Z(e,t,r,s,n){dZ(e,t,r,s,n)}a(_Z,"interpretAST");function Vc(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(Vc,"addSchemaTableToMap");function dZ(e,t,r,s,n){if(!e){Ss.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof xc.yy.Insert?mZ(e,t,r):e instanceof xc.yy.Select?fZ(e,t,r,s,n):e instanceof xc.yy.Update?EZ(e,t,r):e instanceof xc.yy.Delete?hZ(e,t,r):Ss.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(dZ,"getRecordAttributesAST");function fZ(e,t,r,s,n){if(!e){Ss.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(uZ.isEmptyOrZeroLength(i)){Ss.error("No schema specified");return}e.from.forEach(c=>{Vc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Vc(c.table,t,r,s,n)});let o=new vi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ss.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new vi(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ss.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new vi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ss.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new vi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ss.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(fZ,"getSelectAttributes");function EZ(e,t,r){if(!e){Ss.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.table.databaseid;Vc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&LS(e.table.tableid,n,i.columnid,t,r)}a(EZ,"getUpdateAttributes");function hZ(e,t,r){if(!e){Ss.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new vi(e.where),n=e.table.databaseid;Vc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&LS(e.table.tableid,n,i.columnid,t,r)}a(hZ,"getDeleteAttributes");function mZ(e,t,r){if(!e){Ss.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.into.databaseid;Vc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&LS(e.into.tableid,n,i.columnid,t,r)}a(mZ,"getInsertAttributes");function LS(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(LS,"pushAttribute");FL.exports=DS});var PS=T((lde,$L)=>{var ud=sc(),xL=require("chalk"),br=q(),kL=require("prompt"),{promisify:pZ}=require("util"),US=N(),SZ=require("fs-extra"),TZ=require("path"),RZ=V(),gZ=ES(),VL=j();VL.initSync();var AZ=require("moment"),OZ=pZ(kL.get),NZ=TZ.join(VL.getHdbBasePath(),US.LICENSE_KEY_DIR_NAME,US.LICENSE_FILE_NAME,US.LICENSE_FILE_NAME);$L.exports={getFingerprint:yZ,setLicense:bZ,parseLicense:MS,register:IZ,getRegistrationInfo:CZ};async function bZ(e){if(e&&e.key&&e.company){try{br.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await MS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw br.error(r),br.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(bZ,"setLicense");async function yZ(){let e={};try{e=await ud.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(yZ,"getFingerprint");async function MS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");br.info("Validating license input...");let r=ud.validateLicense(e,t);if(br.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(br.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(br.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{br.info("writing license to disk"),await SZ.writeFile(NZ,JSON.stringify({license_key:e,company:t}))}catch(s){throw br.error("Failed to write License"),s}return"Registration successful."}a(MS,"parseLicense");async function IZ(){let e=await wZ();return MS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(IZ,"register");async function wZ(){let e=await ud.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:xL.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:xL.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{kL.start()}catch(s){br.error(s)}let r;try{r=await OZ(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(wZ,"promptForRegistration");async function CZ(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ud.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if(RZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=gZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=AZ.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(CZ,"getRegistrationInfo")});var KL=T((dde,YL)=>{"use strict";var DZ=De(),vS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+DZ.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};YL.exports=vS});var zL=T((Ede,QL)=>{"use strict";var WL=De(),BS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+WL.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+WL.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};QL.exports=BS});var jL=T((mde,JL)=>{"use strict";var HS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};JL.exports=HS});var ZL=T((Sde,XL)=>{"use strict";var LZ=De(),qS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+LZ.SERVER_SUFFIX.ADMIN,this.password=r}};XL.exports=qS});var xS=T((Rde,rU)=>{"use strict";var xo=require("path"),dd=require("fs-extra"),UZ=KL(),MZ=zL(),PZ=jL(),vZ=ZL(),FS=Gr(),Vo=V(),sr=Tr(),_d=N(),$c=De(),{CONFIG_PARAMS:et}=_d,Yc=q(),Kc=j(),eU=rn(),GS=$e(),ko="clustering",BZ=1e4,tU=5;rU.exports={generateNatsConfig:qZ,removeNatsConfig:FZ,getHubConfigPath:HZ};function HZ(){let e=Kc.get(et.ROOTPATH);return xo.join(e,ko,$c.NATS_CONFIG_FILES.HUB_SERVER)}a(HZ,"getHubConfigPath");async function qZ(e=!1,t=void 0){Kc.initSync();let r=Kc.get(et.ROOTPATH),s=xo.join(r,ko,$c.PID_FILES.HUB),n=xo.join(r,ko,$c.PID_FILES.LEAF),i=sr.getConfigFromFile(et.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xo.join(r,ko,$c.NATS_CONFIG_FILES.HUB_SERVER),c=xo.join(r,ko,$c.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(et.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(et.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(et.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(et.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(et.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(et.CLUSTERING_NODENAME),h=sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await GS.checkNATSServerInstalled()||fd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await FS.listUsers(),S=sr.getConfigFromFile(et.CLUSTERING_USER),g=await FS.getClusterUser();(Vo.isEmpty(g)||g.active!==!0)&&fd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ld(et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ld(et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ld(et.CLUSTERING_HUBSERVER_NETWORK_PORT),await ld(et.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],b=[];for(let[x,te]of p.entries())te.role.role===_d.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new vZ(te.username,eU.decrypt(te.hash))),b.push(new PZ(te.username,eU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!Vo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${x.host}:${x.port}`);let G=new UZ(sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,b);l==null&&(delete G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=Vo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===_d.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await dd.writeJson(o,G),Yc.trace(`Hub server config written to ${o}`));let w=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new MZ(sr.getConfigFromFile(et.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,b,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===_d.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await dd.writeJson(c,B),Yc.trace(`Leaf server config written to ${c}`))}a(qZ,"generateNatsConfig");async function ld(e){let t=Kc.get(e);return Vo.isEmpty(t)&&fd(`port undefined for '${e}'`),await Vo.isPortTaken(t)&&fd(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(ld,"isPortAvailable");function fd(e){let t=`Error generating clustering config: ${e}`;Yc.error(t),console.error(t),process.exit(1)}a(fd,"generateNatsConfigError");async function FZ(e){let{port:t,config_file:r}=GS.getServerConfig(e),{username:s,decrypt_hash:n}=await FS.getClusterUser(),i=0,o=2e3;for(;i<tU;){try{let _=await GS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Yc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=tU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await Vo.async_set_timeout(o*(i*2))}let c="0".repeat(BZ),u=xo.join(Kc.get(et.ROOTPATH),ko,r);await dd.writeFile(u,c),await dd.remove(u),Yc.notify(e,"started.")}a(FZ,"removeNatsConfig")});var cU=T((Ade,aU)=>{"use strict";var yr=j(),GZ=sc(),ce=N(),Wc=De(),ln=require("path"),{PACKAGE_ROOT:hd}=N(),sU=j(),Ed=V(),$o="/dev/null",xZ=ln.join(hd,"launchServiceScripts"),nU=ln.join(hd,"utility/scripts"),kZ=ln.join(nU,ce.HDB_RESTART_SCRIPT),iU=ln.resolve(hd,"dependencies",`${process.platform}-${process.arch}`,Wc.NATS_BINARY_NAME);function oU(){let t=GZ.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Ed.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ed.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:hd}}a(oU,"generateMainServerConfig");var VZ=9930;function $Z(){yr.initSync(!0);let e=yr.get(ce.CONFIG_PARAMS.ROOTPATH),t=ln.join(e,"clustering",Wc.NATS_CONFIG_FILES.HUB_SERVER),r=ln.join(yr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=sU.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Wc.LOG_LEVEL_FLAGS[yr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==VZ?"-"+s:""),script:iU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a($Z,"generateNatsHubServerConfig");var YZ=9940;function KZ(){yr.initSync(!0);let e=yr.get(ce.CONFIG_PARAMS.ROOTPATH),t=ln.join(e,"clustering",Wc.NATS_CONFIG_FILES.LEAF_SERVER),r=ln.join(yr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=sU.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Wc.LOG_LEVEL_FLAGS[yr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==YZ?"-"+s:""),script:iU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(KZ,"generateNatsLeafServerConfig");function WZ(){yr.initSync();let e=ln.join(yr.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:xZ,autorestart:!1};return yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$o,t.error_file=$o),t}a(WZ,"generateClusteringUpgradeV4ServiceConfig");function QZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return Ed.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ed.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:nU},script:kZ}}a(QZ,"generateRestart");function zZ(){return{apps:[oU()]}}a(zZ,"generateAllServiceConfigs");aU.exports={generateAllServiceConfigs:zZ,generateMainServerConfig:oU,generateRestart:QZ,generateNatsHubServerConfig:$Z,generateNatsLeafServerConfig:KZ,generateClusteringUpgradeV4ServiceConfig:WZ}});var AU=T((bde,gU)=>{"use strict";var Ae=N(),JZ=V(),_n=xS(),Qc=$e(),Fs=De(),Xn=cU(),md=j(),Zn=q(),jZ=$r(),{startWorker:uU,onMessageFromWorkers:XZ}=Ge(),ZZ=Go(),Nde=require("util"),e5=require("child_process"),t5=require("fs"),{execFile:r5}=e5,pe;gU.exports={enterPM2Mode:s5,start:ei,stop:kS,reload:_U,restart:dU,list:VS,describe:EU,connect:dn,kill:c5,startAllServices:u5,startService:$S,getUniqueServicesList:hU,restartAllServices:l5,isServiceRegistered:mU,reloadStopStart:pU,restartHdb:fU,deleteProcess:o5,startClusteringProcesses:TU,startClusteringThreads:RU,isHdbRestartRunning:a5,isClusteringRunning:d5,stopClustering:_5,reloadClustering:f5};var zc=!1;XZ(e=>{e.type==="restart"&&md.initSync(!0)});function s5(){zc=!0}a(s5,"enterPM2Mode");function dn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Zn.setupConsoleLogging(),r&&t(r),e(s)})})}a(dn,"connect");var nr,n5=10,lU;function ei(e,t=!1){if(zc)return i5(e);let r=r5(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=nr.indexOf(r);o>-1&&nr.splice(o,1),!lU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<n5&&(t5.existsSync(_n.getHubConfigPath())?ei(e):(await _n.generateNatsConfig(!0),ei(e),await new Promise(c=>setTimeout(c,3e3)),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=md.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Fs.LOG_LEVEL_HIERARCHY[o]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Fs.LOG_LEVELS[f]}if(Fs.LOG_LEVEL_HIERARCHY[o]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),nr=[],!nr&&!t){let i=a(()=>{lU=!0,nr&&(nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}nr.push(r)}a(ei,"start");function i5(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(i5,"startWithPM2");function kS(e){if(!zc){for(let t of nr||[])t.name===e&&(nr.splice(nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(kS,"stop");function _U(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(_U,"reload");function dU(e){if(!zc)for(let t of nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(dU,"restart");function o5(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(o5,"deleteProcess");async function fU(){await ei(Xn.generateRestart())}a(fU,"restartHdb");async function a5(){let e=await VS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(a5,"isHdbRestartRunning");function VS(){return new Promise(async(e,t)=>{try{await dn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(VS,"list");function EU(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(EU,"describe");function c5(){if(!zc){for(let e of nr||[])e.kill();nr=[];return}return new Promise(async(e,t)=>{try{await dn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(c5,"kill");async function u5(){try{await TU(),await RU(),await ei(Xn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(u5,"startAllServices");async function $S(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Xn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Xn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Xn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Xn.generateNatsHubServerConfig(),await ei(r,t),await _n.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Xn.generateNatsLeafServerConfig(),await ei(r,t),await _n.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Xn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ei(r)}catch(r){throw pe?.disconnect(),r}}a($S,"startService");async function hU(){try{let e=await VS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(hU,"getUniqueServicesList");async function l5(e=[]){try{let t=!1,r=await hU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await dU(o))}t&&await pU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(l5,"restartAllServices");async function mU(e){if(nr?.find(r=>r.name===e))return!0;let t=await ZZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(mU,"isServiceRegistered");async function pU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?md.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):md.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await EU(e),s=JZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await kS(e),await $S(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await fU():await _U(e)}a(pU,"reloadStopStart");var SU;async function TU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await $S(r,e)}}a(TU,"startClusteringProcesses");async function RU(){SU=uU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Qc.createWorkQueueStream(Fs.WORK_QUEUE_CONSUMER_NAMES),await Qc.updateIngestStreamConsumer(),await Qc.updateLocalStreams();let e=await jZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Zn.info("Starting clustering upgrade 4.0.0 process"),uU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(RU,"startClusteringThreads");async function _5(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await SU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await kS(t)}}a(_5,"stopClustering");async function d5(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await mU(t)===!1)return!1}return!0}a(d5,"isClusteringRunning");async function f5(){await _n.generateNatsConfig(!0),await Qc.reloadNATSHub(),await Qc.reloadNATSLeaf(),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(f5,"reloadClustering")});var Rd=T((Ide,CU)=>{"use strict";var E5=require("minimist"),{isMainThread:WS,parentPort:bU}=require("worker_threads"),Ye=N(),{PROCESS_DESCRIPTORS_VALIDATE:Jc}=Ye,Gs=q(),QS=V(),pd=xS(),Yo=$e(),YS=De(),yU=Tr(),xs=AU(),OU=Go(),h5=hE(),{restartWorkers:Sd,onMessageByType:m5}=Ge(),{handleHDBError:p5,hdb_errors:S5}=X(),{HTTP_STATUS_CODES:T5}=S5,Td=j();Td.initSync();var jc=`Restarting HarperDB. This may take up to ${Ye.RESTART_TIMEOUT_MS/1e3} seconds.`,R5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",NU="Clustering is not enabled so cannot be restarted",g5="Invalid service",Ko,Yr;CU.exports={restart:IU,restartService:zS};WS&&m5(Ye.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?zS({service:e.workerType}):IU({operation:"restart"})});async function IU(e){Yr=Object.keys(e).length===0,Ko=await xs.isServiceRegistered(Ye.HDB_PROC_DESCRIPTOR);let t=E5(process.argv);if(t.service){await zS(t);return}if(Yr&&!Ko){console.error(R5);return}if(Yr&&console.log(jc),Ko){xs.enterPM2Mode(),Gs.notify(jc);let r=h5(Object.keys(Ye.CONFIG_PARAM_MAP),!0);return QS.isEmptyOrZeroLength(Object.keys(r))||yU.updateConfigValue(void 0,void 0,r,!0,!0),O5(),jc}return WS?(Gs.notify(jc),setTimeout(()=>{Sd()},50)):bU.postMessage({type:Ye.ITC_EVENT_TYPES.RESTART}),jc}a(IU,"restart");async function zS(e){let{service:t}=e;if(Ye.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw p5(new Error,g5,T5.BAD_REQUEST,void 0,void 0,!0);if(Ko=await xs.isServiceRegistered(Ye.HDB_PROC_DESCRIPTOR),!WS)return bU.postMessage({type:Ye.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Jc.clustering:if(!Td.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=NU;break}Yr&&console.log("Restarting clustering"),Gs.notify("Restarting clustering"),await wU();break;case Jc.clustering_config:case Jc["clustering config"]:if(!Td.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=NU;break}Yr&&console.log("Restarting clustering_config"),Gs.notify("Restarting clustering_config"),await xs.reloadClustering();break;case"custom_functions":case"custom functions":case Jc.harperdb:case Jc.http_workers:if(Yr&&!Ko){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),Gs.notify("Restarting http_workers"),Yr?await xs.restart(Ye.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Sd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Gs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(zS,"restartService");async function A5(){await Yo.publishToStream(`${YS.SUBJECT_PREFIXES.TXN}.${YS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,YS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(A5,"postDummyNatsMsg");async function O5(){await wU(),await xs.restart(Ye.HDB_PROC_DESCRIPTOR),await QS.async_set_timeout(2e3),Td.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await KS(),Yr&&(await Yo.closeConnection(),process.exit(0))}a(O5,"restartPM2Mode");async function wU(){if(!yU.getConfigFromFile(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await OU.getHDBProcessInfo()).clustering.length===0)Gs.trace("Clustering not running, restart will start clustering services"),await pd.generateNatsConfig(!0),await xs.startClusteringProcesses(),await xs.startClusteringThreads(),await KS(),Yr&&await Yo.closeConnection();else{await A5(),await pd.generateNatsConfig(!0),Ko?(Gs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await xs.restart(Ye.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xs.restart(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await OU.getHDBProcessInfo()).clustering.forEach(n=>{Gs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await QS.async_set_timeout(3e3),await KS(),await Yo.updateLocalStreams(),Yr&&await Yo.closeConnection(),Gs.trace("Restart clustering restarting ingest and reply service threads");let t=Sd(Ye.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Sd(Ye.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wU,"restartClustering");async function KS(){await pd.removeNatsConfig(Ye.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await pd.removeNatsConfig(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(KS,"removeNatsConfig")});var GU=T((Dde,FU)=>{"use strict";var Cde=require("lodash"),ir=N(),{handleHDBError:DU,hdb_errors:N5}=X(),{HDB_ERROR_MSGS:b5,HTTP_STATUS_CODES:y5}=N5,JS=q();FU.exports={getRolePermissions:w5};var Bi=Object.create(null),I5=a(e=>({key:e,perms:{}}),"perms_template_obj"),PU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),vU=a((e=!1,t=!1,r=!1,s=!1)=>({[ir.PERMS_CRUD_ENUM.READ]:e,[ir.PERMS_CRUD_ENUM.INSERT]:t,[ir.PERMS_CRUD_ENUM.UPDATE]:r,[ir.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),jS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...vU(t,r,s,n)}),"table_perms_template"),LU=a((e,t=vU())=>({attribute_name:e,describe:qU(t),[Xc]:t[Xc],[XS]:t[XS],[ZS]:t[ZS]}),"attr_perms_template"),UU=a((e,t=!1)=>({attribute_name:e,describe:t,[Xc]:t}),"timestamp_attr_perms_template"),{READ:Xc,INSERT:XS,UPDATE:ZS}=ir.PERMS_CRUD_ENUM,BU=Object.values(ir.PERMS_CRUD_ENUM),HU=[Xc,XS,ZS];function w5(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[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bi[t]&&Bi[t].key===s)return Bi[t].perms;let n=C5(e,r);return Bi[t]?Bi[t].key=s:Bi[t]=I5(s),Bi[t].perms=n,n}catch(r){if(!e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ir.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 JS.error(s),JS.debug(r),DU(new Error,b5.OUTDATED_PERMS_TRANSLATION_ERROR,y5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
-
${r.stack}`;throw JS.error(s),DU(new Error)}}}a(w5,"getRolePermissions");function C5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ir.SYSTEM_SCHEMA_NAME]=s[ir.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]=D5(t[i]);return}r[i]=PU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=L5(c,u);r[i].describe||BU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=jS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=jS()})}),r}a(C5,"translateRolePermissions");function D5(e){let t=PU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jS(!0,!0,!0,!0,!0)}),t}a(D5,"createStructureUserPermissions");function L5(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return ir.TIME_STAMP_NAMES.includes(d)&&(f=UU(d,l[Xc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=LU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=qU(l),n.attribute_permissions.push(l),c||U5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=UU(_):l=LU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=MU(n),n}else return e.describe=MU(e),e}a(L5,"getTableAttrPerms");function MU(e){return BU.filter(t=>e[t]).length>0}a(MU,"getSchemaTableDescribePerm");function qU(e){return HU.filter(t=>e[t]).length>0}a(qU,"getAttributeDescribePerm");function U5(e,t){HU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(U5,"checkForHashPerms")});var xU={};Je(xU,{Resources:()=>gd,keyArrayToString:()=>Wo,resetResources:()=>M5,resources:()=>ti});function M5(){return ti=new gd}function Wo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var gd,ti,Zc=Te(()=>{fi();gd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(M5,"resetResources");a(Wo,"keyArrayToString")});var Hi,eT=Te(()=>{Hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var eu={};Je(eu,{authentication:()=>zU,bypassAuth:()=>G5,login:()=>k5,logout:()=>V5,start:()=>x5});function G5(){QU=!0}async function zU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?H5?B5:[]:v5?P5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Hi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ad&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ad&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Ad){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await VU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Nd.AuthAuditLog(E,h,wt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===wt.AUTH_AUDIT_STATUS.SUCCESS?kU.notify(S):kU.error(S)},"authAuditLog"),d;if(s){if(d=qi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.getUser(p,S):null;break;case"Bearer":try{d=await(0,Od.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,Od.validateRefreshToken)(h),c({status:-1})}catch{throw g}}break}}catch(g){return F5&&(qi.get(h)||(qi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ri({error:g.message},e)})}qi.set(s,d),q5&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,!1):QU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,YU.getSuperUser)());Ad&&(e.session.update=function(E){if(!u){u=(0,KU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return E.id=u,VU.put(E)},e.login=async function(E,h){e.user=await lt.getUser(E,h),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&ti.loginPath?(f.status=302,f.headers.set("Location",ti.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Hi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function x5({server:e,port:t}){e.request(zU,{port:t||"all"}),$U||($U=!0,setInterval(()=>{qi=new Map},Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),WU.user.addListener(()=>{qi=new Map}))}async function k5(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function V5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var YU,Od,KU,Kr,wt,Nd,WU,kU,P5,v5,B5,H5,VU,Ad,QU,q5,F5,qi,$U,bd=Te(()=>{YU=L(Gr());Br();Zc();Od=L(Pc());fe();KU=require("uuid"),Kr=L(j()),wt=L(N()),Nd=L(q()),WU=L(ic());eT();Qo();kU=(0,Nd.loggerWithTag)("auth-event");Kr.initSync();P5=Kr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),v5=Kr.get(wt.CONFIG_PARAMS.HTTP_CORS),B5=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),H5=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),VU=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ad=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,QU=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,q5=Kr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,F5=Kr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,qi=new Map;lt.onInvalidatedUser(()=>{qi=new Map});a(G5,"bypassAuth");a(zU,"authentication");a(x5,"start");a(k5,"login");a(V5,"logout")});var rM=T((kde,tM)=>{"use strict";var Se=require("joi"),JU=require("fs-extra"),jU=require("path"),En=He(),XU=j(),ZU=N(),eM=q(),{hdb_errors:$5}=X(),{HDB_ERROR_MSGS:xt}=$5,fn=/^[a-zA-Z0-9-_]+$/;tM.exports={getDropCustomFunctionValidator:K5,setCustomFunctionValidator:W5,addComponentValidator:j5,dropCustomFunctionProjectValidator:X5,packageComponentValidator:Z5,deployComponentValidator:e8,setComponentFileValidator:Q5,getComponentFileValidator:J5,dropComponentFileValidator:z5};function yd(e,t,r){try{let s=XU.get(ZU.CONFIG_PARAMS.COMPONENTSROOT),n=jU.join(s,t);return JU.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return eM.error(s),r.message(xt.VALIDATION_ERR)}}a(yd,"checkProjectExists");function tu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(tu,"checkFilePath");function Y5(e,t,r,s){try{let n=XU.get(ZU.CONFIG_PARAMS.COMPONENTSROOT),i=jU.join(n,e,t,r+".js");return JU.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return eM.error(n),s.message(xt.VALIDATION_ERR)}}a(Y5,"checkFileExists");function K5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(fn).custom(Y5.bind(null,e.project,e.type)).custom(tu).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return En.validateBySchema(e,t)}a(K5,"getDropCustomFunctionValidator");function W5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(tu).required(),function_content:Se.string().required()});return En.validateBySchema(e,t)}a(W5,"setCustomFunctionValidator");function Q5(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(tu).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return En.validateBySchema(e,t)}a(Q5,"setComponentFileValidator");function z5(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(tu).optional()});return En.validateBySchema(e,t)}a(z5,"dropComponentFileValidator");function J5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(tu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return En.validateBySchema(e,t)}a(J5,"getComponentFileValidator");function j5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return En.validateBySchema(e,t)}a(j5,"addComponentValidator");function X5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return En.validateBySchema(e,t)}a(X5,"dropCustomFunctionProjectValidator");function Z5(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return En.validateBySchema(e,t)}a(Z5,"packageComponentValidator");function e8(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:Se.string().optional()});return En.validateBySchema(e,t)}a(e8,"deployComponentValidator")});var Dd=T(($de,uM)=>{"use strict";var Id=require("joi"),wd=require("path"),sM=require("fs-extra"),{exec:t8}=require("child_process"),r8=require("util"),nM=r8.promisify(t8),ru=N(),{handleHDBError:zo,hdb_errors:s8}=X(),{HTTP_STATUS_CODES:Jo}=s8,su=j(),n8=He(),jo=q();su.initSync();var tT=su.get(ru.CONFIG_PARAMS.COMPONENTSROOT),iM="npm install --omit=dev --json",i8=`${iM} --dry-run`;uM.exports={installModules:u8,auditModules:l8,installAllRootModules:o8,uninstallRootModule:a8,linkHarperdb:c8};async function o8(e=!1){await Cd(),await nu(e?"npm install --ignore-scripts":"npm install",su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(o8,"installAllRootModules");async function a8(e){await nu(`npm uninstall ${e}`,su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(a8,"uninstallRootModule");async function c8(){await Cd(),await nu(`npm link ${ru.PACKAGE_ROOT}`,su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(c8,"linkHarperdb");async function nu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await nM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
8
|
+
`,"")}a(pC,"runCommand");async function R2(){try{await XJ.access(Tp)}catch{return!1}let e=await pC(`${Tp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ZJ.eq(t,S2)}a(R2,"checkNATSServerInstalled");async function Op(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await fC.getClusterUser();if(Di(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Vr.trace("create nats connection called");let i=await l2({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Vr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(Op,"createConnection");async function g2(){Ss&&(await Ss.drain(),Ss=void 0,Co=void 0,Do=void 0,Lo=void 0)}a(g2,"closeConnection");var Ss,Lo;async function L_(){return Lo||(Lo=Op(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Lo),Ss||Lo}a(L_,"getConnection");async function Ic(){if(Co)return Co;Di(Ss)&&await L_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Co=await Ss.jetstreamManager({domain:e,timeout:6e4}),Co}a(Ic,"getJetStreamManager");async function SC(){if(Do)return Do;Di(Ss)&&await L_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Do=Ss.jetstream({domain:e,timeout:6e4}),Do}a(SC,"getJetStream");async function jt(){let e=Ss||await L_(),t=Co||await Ic(),r=Do||await SC();return{connection:e,jsm:t,js:r}}a(jt,"getNATSReferences");async function A2(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await fC.getClusterUser(),n=await Op(t,r,s),i=Ap(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=mC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Rp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(A2,"getServerList");async function Np(e,t){let{jsm:r}=await jt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:EC.File,retention:hC.Limits,subjects:t,discard:_2.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Np,"createLocalStream");async function TC(){let{jsm:e}=await jt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(TC,"listStreams");async function O2(e){let{jsm:t}=await jt();await t.streams.delete(e)}a(O2,"deleteLocalStream");async function N2(e){let{connection:t}=await jt(),r=[],s=Ap(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(mC.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(N2,"listRemoteStreams");async function b2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=lC(),o={durable_name:i,ack_policy:C_.Explicit};t&&(o.deliver_policy=D_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=gp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(b2,"viewStream");async function*y2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),i=lC(),o={durable_name:i,ack_policy:C_.Explicit};t&&(o.deliver_policy=D_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=gp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(y2,"viewStreamIterator");async function I2(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=RC(s,r);let{js:n}=await jt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:dC.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),m2(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return NC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Vr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Np(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(I2,"publishToStream");function RC(e,t){t===void 0&&(t=f2());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(RC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),p2);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Di(Sp)&&(Sp={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),Sp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Di(pp)&&(pp={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:yc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),pp;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function w2(e){let{jsm:t}=await jt(),r=await Cc();try{await t.streams.add({name:e.stream_name,storage:EC.File,retention:hC.Limits,max_age:c2,max_bytes:u2,subjects:[`${ge.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:C_.Explicit,durable_name:e.durable_name,deliver_policy:D_.All,max_ack_pending:1e4});else throw s}}a(w2,"createWorkQueueStream");async function C2(){let{jsm:e}=await jt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:C_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:D_.All,max_ack_pending:1e4}))}a(C2,"updateIngestStreamConsumer");async function gC(e,t,r){let{jsm:s}=await jt(),n=await s.streams.info(t),i=AC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=w_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(gC,"addSourceToWorkStream");function AC(e){return e.split(".")[1]}a(AC,"extractServerName");async function OC(e,t,r){let{jsm:s}=await jt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=w_.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(OC,"removeSourceFromWorkStream");async function D2(e,t,r=6e4,s=Ap()){if(!Rp.isObject(t))throw new Error("data param must be an object");let n=dC.encode(t),{connection:i}=await jt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return gp(c.data)}a(D2,"request");function bp(e){return new Promise(async(t,r)=>{let s=s2(Tp,["--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(bp,"reloadNATS");async function L2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await bp(e)}a(L2,"reloadNATSHub");async function U2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await bp(e)}a(U2,"reloadNATSLeaf");function M2(e,t,r){let s;switch(e.code){case uC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case uC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(M2,"requestErrorHandler");async function P2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await NC(async()=>{e.subscribe===!0?await gC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await OC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(P2,"updateWorkStream");function NC(e){return n2.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(NC,"exclusiveLock");async function bC(e,t){let r=w_.createNatsTableStreamName(e,t),s=await Cc(),n=q2(e,t,s);await Np(r,[n])}a(bC,"createLocalTableStream");async function v2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await bC(s,n)}}a(v2,"createTableStreams");async function yC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=w_.createNatsTableStreamName(e,t),{jsm:s}=await jt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Vr.warn(r);else throw r}}a(yC,"purgeTableStream");async function B2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await yC(e,t[r])}a(B2,"purgeSchemaTableStreams");async function H2(e){return(await Ic()).streams.info(e)}a(H2,"getStreamInfo");function q2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(q2,"createSubjectName");async function Cc(){if(bc)return bc;if(bc=(await Ic())?.nc?.info?.server_name,bc===void 0)throw new Error("Unable to get jetstream manager server name");return bc}a(Cc,"getJsmServerName");async function F2(){let e=await Ic(),t=await Cc(),r=await TC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=G2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Vr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(F2,"updateLocalStreams");function G2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(G2,"updateStreamLimits")});var Dc=T((Cle,LC)=>{"use strict";var Uo=vl(),Mo=Vw(),x2=q(),k2=require("uuid").v4,wle=require("clone"),M_=an(),Po=N(),V2=require("util"),Yn=us(),{handleHDBError:Xt,hdb_errors:$2}=X(),{HDB_ERROR_MSGS:U_,HTTP_STATUS_CODES:Zt}=$2,{SchemaEventMsg:P_}=ds(),wC=$e(),{getDatabases:Y2}=(fe(),Z(Ce)),{transformReq:vo}=V();LC.exports={createSchema:K2,createSchemaStructure:CC,createTable:W2,createTableStructure:DC,createAttribute:X2,dropSchema:Q2,dropTable:z2,dropAttribute:J2,getBackup:Z2};async function K2(e){let t=await CC(e);return M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema)),t}a(K2,"createSchema");async function CC(e){let t=Uo.schema_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(vo(e),!await Mo.checkSchemaExists(e.schema))throw Xt(new Error,U_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Po.LOG_LEVELS.ERROR,U_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Yn.createSchema(e),`database '${e.schema}' successfully created`}a(CC,"createSchemaStructure");async function W2(e){return vo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await DC(e)}a(W2,"createTable");async function DC(e){let t=Uo.create_table_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo.validateTableResidence(e.residence),!await Mo.checkSchemaTableExists(e.schema,e.table))throw Xt(new Error,U_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Po.LOG_LEVELS.ERROR,U_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:k2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Yn.createTable(s,e);else throw Xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await Yn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(DC,"createTableStructure");async function Q2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Uo.schema_object(e),s=t??r;if(s)throw Xt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);vo(e);let n=await Mo.checkSchemaExists(e.schema);if(n)throw Xt(new Error,n,Zt.NOT_FOUND,Po.LOG_LEVELS.ERROR,n,!0);let i=await Mo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Yn.dropSchema(e),M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema)),await wC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Q2,"dropSchema");async function z2(e){let t=Uo.table_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);vo(e);let r=await Mo.checkSchemaTableExists(e.schema,e.table);if(r)throw Xt(new Error,r,Zt.NOT_FOUND,Po.LOG_LEVELS.ERROR,r,!0);return await Yn.dropTable(e),await wC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(z2,"dropTable");async function J2(e){let t=Uo.attribute_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);vo(e);let r=await Mo.checkSchemaTableExists(e.schema,e.table);if(r)throw Xt(new Error,r,Zt.NOT_FOUND,Po.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Xt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Po.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await Yn.dropAttribute(e),j2(e),M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw x2.error(`Got an error deleting attribute ${V2.inspect(e)}.`),s}}a(J2,"dropAttribute");function j2(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(j2,"dropAttributeFromGlobal");async function X2(e){vo(e);let t=Y2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await Yn.createAttribute(e),M_.signalSchemaChange(new P_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(X2,"createAttribute");function Z2(e){return Yn.getBackup(e)}a(Z2,"getBackup")});var MC=T((Lle,UC)=>{"use strict";var{OPERATIONS_ENUM:e4}=N(),yp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=e4.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};UC.exports=yp});var Ip=T((Ple,qC)=>{"use strict";var t4=us(),Mle=MC(),v_=V(),B_=N(),r4=j(),{handleHDBError:PC,hdb_errors:s4}=X(),{HDB_ERROR_MSGS:vC,HTTP_STATUS_CODES:BC}=s4,n4=Object.values(B_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),HC="To use this operation audit log must be enabled in harperdb-config.yaml";qC.exports=i4;async function i4(e){if(v_.isEmpty(e.schema))throw new Error(vC.SCHEMA_REQUIRED_ERR);if(v_.isEmpty(e.table))throw new Error(vC.TABLE_REQUIRED_ERR);if(!r4.get(B_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw PC(new Error,HC,BC.BAD_REQUEST,B_.LOG_LEVELS.ERROR,HC,!0);let t=v_.checkSchemaTableExist(e.schema,e.table);if(t)throw PC(new Error,t,BC.NOT_FOUND,B_.LOG_LEVELS.ERROR,t,!0);if(!v_.isEmpty(e.search_type)&&n4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await t4.readAuditLog(e)}a(i4,"readAuditLog")});var GC=T((Ble,FC)=>{"use strict";var{OPERATIONS_ENUM:o4}=N(),wp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=o4.GET_BACKUP,this.schema=t,this.table=r}};FC.exports=wp});var VC=T((Gle,kC)=>{"use strict";var a4=us(),qle=GC(),Cp=V(),c4=N(),Fle=j(),{handleHDBError:u4,hdb_errors:l4}=X(),{HDB_ERROR_MSGS:xC,HTTP_STATUS_CODES:_4}=l4;kC.exports=d4;async function d4(e){if(Cp.isEmpty(e.schema))throw new Error(xC.SCHEMA_REQUIRED_ERR);if(Cp.isEmpty(e.table))throw new Error(xC.TABLE_REQUIRED_ERR);let t=Cp.checkSchemaTableExist(e.schema,e.table);if(t)throw u4(new Error,t,_4.NOT_FOUND,c4.LOG_LEVELS.ERROR,t,!0);return await a4.getBackup(read_audit_log_object)}a(d4,"getBackup")});var zC=T((kle,QC)=>{var Kn=require("validate.js"),YC=He(),Bo=N(),{handleHDBError:f4,hdb_errors:E4}=X(),{HDB_ERROR_MSGS:Ze,HTTP_STATUS_CODES:h4}=E4,Dp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),m4={STRUCTURE_USER:"structure_user"},$C=Object.values(Bo.ROLE_TYPES_ENUM),p4="attribute_permissions",S4="attribute_name",{PERMS_CRUD_ENUM:Ho}=Bo,T4=[p4,...Object.values(Ho)],KC=[Ho.READ,Ho.INSERT,Ho.UPDATE],R4=[S4,...KC];function g4(e){let t=Dp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,WC(e,t)}a(g4,"addRoleValidation");function A4(e){let t=Dp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,WC(e,t)}a(A4,"alterRoleValidation");function O4(e){let t=Dp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,YC.validateObject(e,t)}a(O4,"dropRoleValidation");var N4=["operation","role","id","permission","hdb_user","hdb_auth_header"];function WC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)N4.includes(s[o])||n.push(s[o]);n.length>0&&nt(Ze.INVALID_ROLE_JSON_KEYS(n),r);let i=YC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nt(o,r)}),e.permission){let o=b4(e);o&&nt(o,r),$C.forEach(c=>{e.permission[c]&&!Kn.isBoolean(e.permission[c])&&nt(Ze.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if($C.indexOf(o)<0){if(o===m4.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||nt(Ze.SCHEMA_NOT_FOUND(d),r)}continue}nt(Ze.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nt(Ze.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){nt(Ze.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{T4.includes(l)||nt(Ze.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ho).forEach(l=>{Kn.isDefined(_[l])?Kn.isBoolean(_[l])||nt(Ze.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):nt(Ze.TABLE_PERM_MISSING(l),r,o,u)}),Kn.isDefined(_.attribute_permissions)){if(!Kn.isArray(_.attribute_permissions)){nt(Ze.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{nt(Ze.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!R4.includes(p)&&p!==Ho.DELETE&&nt(Ze.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Kn.isDefined(E.attribute_name)){nt(Ze.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){nt(Ze.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}KC.forEach(p=>{Kn.isDefined(E[p])?Kn.isBoolean(E[p])||nt(Ze.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):nt(Ze.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;nt(Ze.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return y4(r)}a(WC,"customValidate");QC.exports={addRoleValidation:g4,alterRoleValidation:A4,dropRoleValidation:O4};function b4(e){let{operation:t,permission:r}=e;if(t===Bo.OPERATIONS_ENUM.ADD_ROLE||t===Bo.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 Ze.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bo.ROLE_TYPES_ENUM.SUPER_USER:Bo.ROLE_TYPES_ENUM.CLUSTER_USER;return Ze.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(b4,"validateNoSUPerms");function y4(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ze.ROLE_PERMS_ERROR,...e};return f4(new Error,s,h4.BAD_REQUEST)}else return null}a(y4,"generateRolePermResponse");function nt(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(nt,"addPermError")});var Bp=T(($le,ZC)=>{"use strict";var JC=pr(),jC=Gr(),I4=qn(),Up=zC(),Mp=an(),w4=require("uuid").v4,C4=require("util"),H_=N(),D4=V(),Pp=jC.searchByValue,L4=jC.searchByHash,U4=C4.promisify(I4.delete),M4=Bs(),P4=bo(),{hdb_errors:v4,handleHDBError:qo}=X(),{HDB_ERROR_MSGS:XC,HTTP_STATUS_CODES:q_}=v4,{UserEventMsg:vp}=ds();ZC.exports={addRole:B4,alterRole:H4,dropRole:q4,listRoles:F4};function Lp(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(Lp,"scrubRoleDetails");async function B4(e){let t=Up.addRoleValidation(e);if(t)throw t;e=Lp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Pp(r)||[])}catch(i){throw qo(i)}if(s&&s.length>0)throw qo(new Error,XC.ROLE_ALREADY_EXISTS(e.role),q_.CONFLICT,void 0,void 0,!0);e.id||(e.id=w4());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await JC.insert(n),Mp.signalUserChange(new vp(process.pid)),e=Lp(e),e}a(B4,"addRole");async function H4(e){let t=Up.alterRoleValidation(e);if(t)throw t;e=Lp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await JC.update(r)}catch(n){throw qo(n)}if(s&&s?.message==="updated 0 of 1 records")throw qo(new Error,"Invalid role id",q_.BAD_REQUEST,void 0,void 0,!0);return await Mp.signalUserChange(new vp(process.pid)),e}a(H4,"alterRole");async function q4(e){let t=Up.dropRoleValidation(e);if(t)throw qo(new Error,t,q_.BAD_REQUEST,void 0,void 0,!0);let r=new P4(H_.SYSTEM_SCHEMA_NAME,H_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await L4(r));if(s.length===0)throw qo(new Error,XC.ROLE_NOT_FOUND,q_.NOT_FOUND,void 0,void 0,!0);let n=new M4(H_.SYSTEM_SCHEMA_NAME,H_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Pp(n)),o=!1;if(D4.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await U4(c),Mp.signalUserChange(new vp(process.pid)),`${s[0].role} successfully deleted`}a(q4,"dropRole");async function F4(){return Pp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(F4,"listRoles")});var sD=T((Kle,rD)=>{"use strict";var G4=j(),Wn=require("joi"),x4=He(),eD=require("moment"),k4=require("fs-extra"),Hp=require("path"),V4=require("lodash"),Lc=N(),{LOG_LEVELS:Li}=N(),$4="YYYY-MM-DD hh:mm:ss",Y4=Hp.resolve(__dirname,"../logs");rD.exports=function(e){return x4.validateBySchema(e,K4)};var K4=Wn.object({from:Wn.custom(tD),until:Wn.custom(tD),level:Wn.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:Wn.valid("asc","desc"),limit:Wn.number().min(1),start:Wn.number().min(0),log_name:Wn.custom(W4)});function tD(e,t){if(eD(e,eD.ISO_8601).format($4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(tD,"validateDatetime");function W4(e,t){if(V4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=G4.get(Lc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Lc.LOG_NAMES.HDB:e,i=n===Lc.LOG_NAMES.INSTALL?Hp.join(Y4,Lc.LOG_NAMES.INSTALL):Hp.join(s,n);return k4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(W4,"validateReadLogPath")});var Fp=T((Qle,iD)=>{"use strict";var F_=N(),Q4=q(),z4=j(),J4=sD(),qp=require("path"),nD=require("fs-extra"),{once:j4}=require("events"),{handleHDBError:X4,hdb_errors:Z4}=X(),{PACKAGE_ROOT:e3}=N(),t3=qp.join(e3,"logs"),r3=1e3,s3=200;iD.exports=n3;async function n3(e){let t=J4(e);if(t)throw X4(t,t.message,Z4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=z4.get(F_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?F_.LOG_NAMES.HDB:e.log_name,n=s===F_.LOG_NAMES.INSTALL?qp.join(t3,F_.LOG_NAMES.INSTALL):qp.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?r3:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(nD.statSync(n).size-(h+5)*s3,0));let S=nD.createReadStream(n,{start:p});S.on("error",G=>{Q4.error(G)});let g=0,I=[],b="",Y;S.on("data",G=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=b+G;let K=0,B;for(;(B=w.exec(G))&&!S.destroyed;){Y&&(Y.message=G.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Pt=se[0],ve=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:ve,tags:se,message:""},K=B.index+x.length}b=G.slice(K)}),S.on("end",G=>{S.destroyed||Y&&(Y.message=b.trim(),Q(Y))}),S.resume();function Q(G){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),G.level===o&&w>=K&&w<=B&&g<E?g++:G.level===o&&w>=K&&w<=B&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case(i&&c):w=new Date(G.timestamp),K=new Date(u),G.level===o&&w>=K&&g<E?g++:G.level===o&&w>=K&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case(i&&_):w=new Date(G.timestamp),B=new Date(l),G.level===o&&w<=B&&g<E?g++:G.level===o&&w<=B&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case(c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&g<E?g++:w>=K&&w<=B&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case i:G.level===o&&g<E?g++:G.level===o&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case c:w=new Date(G.timestamp),K=new Date(u),w>=K&&g<E?g++:w>=K&&g>=E&&(Qn(G,f,I),g++,g===h&&S.destroy());break;case _:w=new Date(G.timestamp),B=new Date(l),w<=B&&g<E?g++:w<=B&&g>=E&&(Qn(G,f,I),g++,g===h&&S.destroy());break;default:g<E?g++:(Qn(G,f,I),g++,g===h&&S.destroy())}}return a(Q,"onLogMessage"),await j4(S,"close"),I}a(n3,"readLog");function Qn(e,t,r){t==="desc"?i3(e,r):t==="asc"?o3(e,r):r.push(e)}a(Qn,"pushLineToResult");function i3(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(i3,"insertDescending");function o3(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(o3,"insertAscending")});var x_=T((Zle,uD)=>{"use strict";var Gp=require("joi"),{string:G_,boolean:oD,date:a3}=Gp.types(),c3=He(),{validateSchemaExists:Jle,validateTableExists:jle,validateSchemaName:Xle}=Ls(),u3=N(),l3=De(),aD=j();aD.initSync();var _3=G_.invalid(aD.get(u3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(l3.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(),cD={operation:G_.valid("add_node","update_node"),node_name:_3,subscriptions:Gp.array().items({table:G_.optional(),schema:G_.required(),subscribe:oD.required(),publish:oD.required().custom(f3),start_time:a3.iso()}).min(1).required()};function d3(e){return c3.validateBySchema(e,Gp.object(cD))}a(d3,"addUpdateNodeValidator");function f3(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(f3,"checkForFalsy");uD.exports={addUpdateNodeValidator:d3,validation_schema:cD}});var _D=T((t_e,lD)=>{var E3=He(),h3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};lD.exports=function(e){return E3.validateObject(e,h3)}});var k_=T((r_e,dD)=>{"use strict";var m3=N().OPERATIONS_ENUM,xp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=m3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dD.exports=xp});var ED=T((n_e,fD)=>{"use strict";var p3={OPERATION:"operation",REFRESH:"refresh"},kp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Vp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};fD.exports={JWTTokens:kp,TOKEN_TYPE_ENUM:p3,JWTRSAKeys:Vp}});var Pc=T((o_e,SD)=>{"use strict";var Mc=require("jsonwebtoken"),$p=require("fs-extra"),Yp=V(),$r=N(),{handleHDBError:er,hdb_errors:S3}=X(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=S3,Uc=q(),hD=Ql(),Qp=xr(),T3=pr().update,R3=k_(),g3=an(),{UserEventMsg:A3}=ds(),zn=j();zn.initSync();var Kp=require("path"),{JWTTokens:O3,JWTRSAKeys:N3,TOKEN_TYPE_ENUM:V_}=ED(),b3=zn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",y3=zn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",$_="RS256",Wp;SD.exports={createTokens:I3,validateOperationToken:C3,refreshOperationToken:w3,validateRefreshToken:pD};async function I3(e){if(Yp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Yp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Yp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Qp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Uc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Y_(),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 mD(i,r.private_key,r.passphrase),c=await Mc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:y3,algorithm:$_,subject:V_.REFRESH}),u=hD.hash(c),_=new R3($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await T3(_)}catch(f){Uc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return g3.signalUserChange(new A3(process.pid)),new O3(o,c)}a(I3,"createTokens");async function mD(e,t,r){return await Mc.sign(e,{key:t,passphrase:r},{expiresIn:b3,algorithm:$_,subject:V_.OPERATION})}a(mD,"signOperationToken");async function Y_(){if(Wp===void 0)try{let e=Kp.join(zn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Kp.join(zn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Kp.join(zn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await $p.readFile(e)).toString(),n=(await $p.readFile(t)).toString(),i=(await $p.readFile(r)).toString();Wp=new N3(i,n,s)}catch(e){throw Uc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Wp}a(Y_,"getJWTRSAKeys");async function w3(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await pD(e.refresh_token);let t=await Y_(),r=await Mc.decode(e.refresh_token);return{operation_token:await mD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(w3,"refreshOperationToken");async function C3(e){try{let t=await Y_(),r=await Mc.verify(e,t.public_key,{algorithms:$_,subject:V_.OPERATION});return await Qp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Uc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(C3,"validateOperationToken");async function pD(e){let t;try{let r=await Y_(),s=await Mc.verify(e,r.public_key,{algorithms:$_,subject:V_.REFRESH});t=await Qp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Uc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!hD.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(pD,"validateRefreshToken")});var zp=T((u_e,gD)=>{"use strict";var D3=_D(),Fo=require("passport"),L3=require("passport-local").Strategy,U3=require("passport-http").BasicStrategy,M3=require("util"),P3=xr(),RD=M3.callbackify(P3.findAndValidateUser),c_e=dr(),v3=N(),TD=Pc();Fo.use(new L3(function(e,t,r){RD(e,t,r)}));Fo.use(new U3(function(e,t,r){RD(e,t,r)}));Fo.serializeUser(function(e,t){t(null,e)});Fo.deserializeUser(function(e,t){t(null,e)});function B3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Fo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===v3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?TD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):TD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Fo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(B3,"authorize");function H3(e,t){let r=D3(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(H3,"checkPermissions");gD.exports={authorize:B3,checkPermissions:H3}});var Jn=T((__e,AD)=>{"use strict";var Jp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},jp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};AD.exports={Node:Jp,NodeSubscription:jp}});var ND=T((f_e,OD)=>{"use strict";var q3=N().OPERATIONS_ENUM,Xp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=q3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};OD.exports=Xp});var vc=T((h_e,bD)=>{"use strict";var Zp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},eS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};bD.exports={RemotePayloadObject:Zp,RemotePayloadSubscription:eS}});var ID=T((p_e,yD)=>{"use strict";var tS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};yD.exports=tS});var DD=T((A_e,CD)=>{"use strict";var F3=ID(),T_e=je(),wD=Me(),G3=q(),{getSchemaPath:R_e,getTransactionAuditStorePath:g_e}=Be(),{getDatabases:x3}=(fe(),Z(Ce));CD.exports=k3;async function k3(e){let t=new F3;try{let r=x3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await wD.environmentDataSize(schema_path,e.name),o=await wD.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){G3.warn(`unable to stat table dbi due to ${r}`)}return t}a(k3,"lmdbGetTableSize")});var UD=T((N_e,LD)=>{"use strict";var rS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};LD.exports=rS});var Go=T((w_e,BD)=>{"use strict";var V3=require("fs-extra"),$3=require("path"),Gt=require("systeminformation"),jn=q(),Y3=$e(),sS=De(),W_=N(),K3=DD(),vD=vn(),{getThreadInfo:MD}=Ge(),fS=j();fS.initSync();var W3=UD(),{openEnvironment:y_e}=Me(),{getSchemaPath:I_e}=Be(),{database:Q3}=(fe(),Z(Ce)),K_;BD.exports={getHDBProcessInfo:aS,getNetworkInfo:uS,getDiskInfo:cS,getMemoryInfo:oS,getCPUInfo:iS,getTimeInfo:nS,getSystemInformation:lS,systemInformation:z3,getTableSize:_S,getMetrics:dS};function nS(){return Gt.time()}a(nS,"getTimeInfo");async function iS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:g,...I}=await Gt.currentLoad();return I.cpus=[],g.forEach(b=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:G,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=b;I.cpus.push(x)}),l.current_load=I,l}catch(e){return jn.error(`error in getCPUInfo: ${e}`),{}}}a(iS,"getCPUInfo");async function oS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return jn.error(`error in getMemoryInfo: ${e}`),{}}}a(oS,"getMemoryInfo");async function aS(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await V3.readFile($3.join(fS.get(W_.CONFIG_PARAMS.ROOTPATH),W_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===W_.NODE_ERROR_CODES.ENOENT)jn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return jn.error(`error in getHDBProcessInfo: ${t}`),e}}a(aS,"getHDBProcessInfo");async function cS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return jn.error(`error in getDiskInfo: ${t}`),e}}a(cS,"getDiskInfo");async function uS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return jn.error(`error in getNetworkInfo: ${t}`),e}}a(uS,"getNetworkInfo");async function lS(){if(K_!==void 0)return K_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,K_=e,K_}catch(t){return jn.error(`error in getSystemInformation: ${t}`),e}}a(lS,"getSystemInformation");async function _S(){let e=[],t=await vD.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await K3(s));return e}a(_S,"getTableSize");async function dS(){let e=await vD.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Q3({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){jn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(dS,"getMetrics");async function PD(){if(fS.get(W_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await Y3.getNATSReferences(),r=await t.streams.info(sS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(sS.WORK_QUEUE_CONSUMER_NAMES.stream_name,sS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(PD,"getNatsStreamInfo");async function z3(e){let t=new W3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await lS(),t.time=nS(),t.cpu=await iS(),t.memory=await oS(),t.disk=await cS(),t.network=await uS(),t.harperdb_processes=await aS(),t.table_size=await _S(),t.metrics=await dS(),t.threads=await MD(),t.replication=await PD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await lS();break;case"time":t.time=nS();break;case"cpu":t.cpu=await iS();break;case"memory":t.memory=await oS();break;case"disk":t.disk=await cS();break;case"network":t.network=await uS();break;case"harperdb_processes":t.harperdb_processes=await aS();break;case"table_size":t.table_size=await _S();break;case"database_metrics":case"metrics":t.metrics=await dS();break;case"threads":t.threads=await MD();break;case"replication":t.replication=await PD();break;default:break}return t}a(z3,"systemInformation")});var ES=T((D_e,HD)=>{"use strict";HD.exports={version:J3,printVersion:j3};var Q_=Rc();function J3(){if(Q_)return Q_.version}a(J3,"version");function j3(){Q_&&console.log(`HarperDB Version ${Q_.version}`)}a(j3,"printVersion")});var Yr=T((P_e,xD)=>{"use strict";var X3=pr(),hS=V(),Z3=require("util"),Ui=N(),qD=j();qD.initSync();var ej=zp(),FD=Gr(),{Node:U_e,NodeSubscription:M_e}=Jn(),tj=bo(),rj=ND(),{RemotePayloadObject:sj,RemotePayloadSubscription:nj}=vc(),{handleHDBError:ij,hdb_errors:oj}=X(),{HTTP_STATUS_CODES:aj,HDB_ERROR_MSGS:cj}=oj,uj=Bs(),lj=Go(),_j=ES(),{getDatabases:dj}=(fe(),Z(Ce)),fj=Z3.promisify(ej.authorize),Ej=FD.searchByHash,hj=FD.searchByValue;xD.exports={authHeaderToUser:mj,isEmpty:pj,getNodeRecord:Sj,upsertNodeRecord:Tj,buildNodePayloads:Rj,checkClusteringEnabled:gj,getAllNodeRecords:Aj,getSystemInfo:Oj,reverseSubscription:GD};async function mj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await fj(t,null),e}a(mj,"authHeaderToUser");function pj(e){return e==null}a(pj,"isEmpty");async function Sj(e){let t=new tj(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Ej(t)}a(Sj,"getNodeRecord");async function Tj(e){let t=new rj(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return X3.upsert(t)}a(Tj,"upsertNodeRecord");function GD(e){if(hS.isEmpty(e.subscribe)||hS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(GD,"reverseSubscription");function Rj(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=hS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=GD(c),E=dj()[u]?.[_],h=new nj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new sj(r,t,n,s)}a(Rj,"buildNodePayloads");function gj(){if(!qD.get(Ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ij(new Error,cj.CLUSTERING_NOT_ENABLED,aj.BAD_REQUEST,void 0,void 0,!0)}a(gj,"checkClusteringEnabled");async function Aj(){let e=new uj(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await hj(e))}a(Aj,"getAllNodeRecords");async function Oj(){let e=await lj.getSystemInformation();return{hdb_version:_j.version(),node_version:e.node_version,platform:e.platform}}a(Oj,"getSystemInfo")});var mS=T((B_e,zD)=>{"use strict";var z_=$e(),kD=V(),VD=De(),$D=N(),J_=q(),YD=Dc(),Nj=m_(),{RemotePayloadObject:bj}=vc(),{handleHDBError:KD,hdb_errors:yj}=X(),{HTTP_STATUS_CODES:WD}=yj,{NodeSubscription:QD}=Jn();zD.exports=Ij;async function Ij(e,t){let r;try{r=await z_.request(`${t}.${VD.REQUEST_SUFFIX}`,new bj($D.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),J_.trace("Response from remote describe all request:",r)}catch(o){J_.error(`addNode received error from describe all request to remote node: ${o}`);let c=z_.requestErrorHandler(o,"add_node",t);throw KD(new Error,c,WD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===VD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw KD(new Error,o,WD.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===$D.SYSTEM_SCHEMA_NAME){await z_.createLocalTableStream(c,u);let h=new QD(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=kD.doesSchemaExist(c),l=s[c]!==void 0,d=u?kD.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(J_.trace(`addNode creating schema: ${c}`),await YD.createSchema({operation:"create_schema",schema:c})),!d&&f){J_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new Nj(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await YD.createTable(h)}await z_.createLocalTableStream(c,u);let E=new QD(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(Ij,"reviewSubscriptions")});var Z_=T((q_e,XD)=>{"use strict";var{handleHDBError:j_,hdb_errors:wj}=X(),{HTTP_STATUS_CODES:X_}=wj,{addUpdateNodeValidator:Cj}=x_(),Bc=q(),jD=N(),JD=De(),Dj=V(),pS=$e(),Hc=Yr(),Lj=j(),Uj=mS(),{Node:Mj,NodeSubscription:Pj}=Jn(),{broadcast:vj}=Ge(),Bj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Hj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",qj=Lj.get(jD.CONFIG_PARAMS.CLUSTERING_NODENAME);XD.exports=Fj;async function Fj(e,t=!1){Bc.trace("addNode called with:",e),Hc.checkClusteringEnabled();let r=Cj(e);if(r)throw j_(r,r.message,X_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Hc.getNodeRecord(s);if(!Dj.isEmptyOrZeroLength(d))throw j_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,X_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Uj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Bj,o;let c=Hc.buildNodePayloads(n,qj,jD.OPERATIONS_ENUM.ADD_NODE,await Hc.getSystemInfo());Bc.trace("addNode sending remote payload:",c);let u;try{u=await pS.request(`${s}.${JD.REQUEST_SUFFIX}`,c)}catch(d){Bc.error(`addNode received error from request: ${d}`);let f=pS.requestErrorHandler(d,"add_node",s);throw j_(new Error,f,X_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===JD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw j_(new Error,d,X_.INTERNAL_SERVER_ERROR,"error",d)}Bc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Bc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await pS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Pj(E.schema,E.table,E.publish,E.subscribe))}let l=new Mj(s,_,u.system_info);return await Hc.upsertNodeRecord(l),vj({type:"nats_update"}),i.length>0?o.message=Hj:o.message=`Successfully added '${s}' to manifest`,o}a(Fj,"addNode")});var TS=T((G_e,tL)=>{"use strict";var{handleHDBError:ed,hdb_errors:Gj}=X(),{HTTP_STATUS_CODES:td}=Gj,{addUpdateNodeValidator:xj}=x_(),qc=q(),eL=N(),ZD=De(),kj=V(),SS=$e(),Fc=Yr(),Vj=j(),{cloneDeep:$j}=require("lodash"),Yj=mS(),{NodeSubscription:Kj}=Jn(),{broadcast:Wj}=Ge(),Qj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Jj=Vj.get(eL.CONFIG_PARAMS.CLUSTERING_NODENAME);tL.exports=jj;async function jj(e){qc.trace("updateNode called with:",e),Fc.checkClusteringEnabled();let t=xj(e);if(t)throw ed(t,t.message,td.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=$j(await Fc.getNodeRecord(r));if(kj.isEmptyOrZeroLength(s))throw ed(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,td.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await Yj(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Qj,o;let c=Fc.buildNodePayloads(n,Jj,eL.OPERATIONS_ENUM.UPDATE_NODE,await Fc.getSystemInfo());qc.trace("updateNode sending remote payload:",c);let u;try{u=await SS.request(`${r}.${ZD.REQUEST_SUFFIX}`,c)}catch(_){qc.error(`updateNode received error from request: ${_}`);let l=SS.requestErrorHandler(_,"update_node",r);throw ed(new Error,l,td.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===ZD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw ed(new Error,_,td.INTERNAL_SERVER_ERROR,"error",_)}qc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];qc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await SS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await Xj(s[0],n,u.system_info),i.length>0?o.message=zj:o.message=`Successfully updated '${r}'`,o}a(jj,"updateNode");async function Xj(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Kj(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Fc.upsertNodeRecord(s),Wj({type:"nats_update"})}a(Xj,"updateNodeTable")});var oL=T((k_e,iL)=>{"use strict";var nL=require("joi"),{string:rL}=nL.types(),Zj=He(),sL=N(),eX=j(),tX=De();iL.exports=rX;function rX(e){let t=rL.invalid(eX.get(sL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(tX.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=nL.object({operation:rL.valid(sL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Zj.validateBySchema(e,r)}a(rX,"removeNodeValidator")});var sd=T(($_e,dL)=>{"use strict";var{handleHDBError:aL,hdb_errors:sX}=X(),{HTTP_STATUS_CODES:cL}=sX,nX=oL(),Gc=q(),uL=Yr(),iX=V(),rd=N(),lL=De(),_L=$e(),oX=j(),{RemotePayloadObject:aX}=vc(),{NodeSubscription:cX}=Jn(),uX=yo(),lX=qn(),{broadcast:_X}=Ge(),dX=oX.get(rd.CONFIG_PARAMS.CLUSTERING_NODENAME);dL.exports=fX;async function fX(e){Gc.trace("removeNode called with:",e),uL.checkClusteringEnabled();let t=nX(e);if(t)throw aL(t,t.message,cL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await uL.getNodeRecord(r);if(iX.isEmptyOrZeroLength(s))throw aL(new Error,`Node '${r}' was not found.`,cL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new aX(rd.OPERATIONS_ENUM.REMOVE_NODE,dX,[]),i,o=!1;try{i=await _L.request(`${r}.${lL.REQUEST_SUFFIX}`,n),Gc.trace("Remove node reply from remote node:",r,i)}catch(u){Gc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Gc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new cX(l.schema,l.table,!1,!1);await _L.updateWorkStream(d,r)}let c=new uX(rd.SYSTEM_SCHEMA_NAME,rd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await lX.deleteRecord(c),_X({type:"nats_update"}),i?.status===lL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Gc.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(fX,"removeNode")});var hL=T((K_e,EL)=>{"use strict";var fL=require("joi"),{string:EX,array:hX}=fL.types(),mX=He(),pX=x_();EL.exports=SX;function SX(e){let t=fL.object({operation:EX.valid("configure_cluster").required(),connections:hX.items(pX.validation_schema).required()});return mX.validateBySchema(e,t)}a(SX,"configureClusterValidator")});var RS=T((Q_e,RL)=>{"use strict";var TX=N(),nd=q(),RX=V(),gX=sd(),AX=Z_(),mL=Yr(),OX=hL(),{handleHDBError:pL,hdb_errors:NX}=X(),{HTTP_STATUS_CODES:SL}=NX,bX="Configure cluster complete.",yX="Failed to configure the cluster. Check the logs for more details.",IX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";RL.exports=wX;async function wX(e){nd.trace("configure cluster called with:",e),mL.checkClusteringEnabled();let t=OX(e);if(t)throw pL(t,t.message,SL.BAD_REQUEST,void 0,void 0,!0);let r=await mL.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(TL(gX,{operation:TX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);nd.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(TL(AX,E,E.node_name))}let c=await Promise.allSettled(i);nd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(nd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(RX.isEmptyOrZeroLength(u))return{message:bX,connections:_};if(l)return{message:IX,failed_nodes:u,connections:_};throw pL(new Error,yX,SL.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(wX,"configureCluster");async function TL(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(TL,"functionWrapper")});var AL=T((J_e,gL)=>{"use strict";var id=require("joi"),CX=He(),{validateSchemaExists:DX,validateTableExists:LX,validateSchemaName:UX}=Ls(),MX=id.object({operation:id.string().valid("purge_stream"),schema:id.string().custom(DX).custom(UX).required(),table:id.string().custom(LX).required()});function PX(e){return CX.validateBySchema(e,MX)}a(PX,"purgeStreamValidator");gL.exports=PX});var gS=T((X_e,OL)=>{"use strict";var{handleHDBError:vX,hdb_errors:BX}=X(),{HTTP_STATUS_CODES:HX}=BX,qX=AL(),FX=$e(),GX=Yr();OL.exports=xX;async function xX(e){let t=qX(e);if(t)throw vX(t,t.message,HX.BAD_REQUEST,void 0,void 0,!0);GX.checkClusteringEnabled();let{schema:r,table:s}=e;return await FX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(xX,"purgeStream")});var NS=T((ede,CL)=>{"use strict";var OS=Yr(),kX=$e(),yL=j(),od=N(),Mi=De(),VX=V(),AS=q(),{RemotePayloadObject:$X}=vc(),{ErrorCode:NL}=require("nats"),bL=yL.get(od.CONFIG_PARAMS.CLUSTERING_ENABLED),IL=yL.get(od.CONFIG_PARAMS.CLUSTERING_NODENAME);CL.exports={clusterStatus:YX,buildNodeStatus:wL};async function YX(){let e={node_name:IL,is_enabled:bL,connections:[]};if(!bL)return e;let t=await OS.getAllNodeRecords();if(VX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(wL(t[s],e.connections));return await Promise.allSettled(r),e}a(YX,"clusterStatus");async function wL(e,t){let r=e.name,s=new $X(od.OPERATIONS_ENUM.CLUSTER_STATUS,IL,void 0,await OS.getSystemInfo()),n,i,o=Mi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await kX.request(Mi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Mi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Mi.CLUSTER_STATUS_STATUSES.CLOSED,AS.error(`Error getting node status from ${r} `,n))}catch(u){AS.warn(`Error getting node status from ${r}`,u),u.code===NL.NoResponders?o=Mi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===NL.Timeout?o=Mi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Mi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new KX(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==od.PRE_4_0_0_VERSION&&await OS.upsertNodeRecord(u)}catch(u){AS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(wL,"buildNodeStatus");function KX(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(KX,"NodeStatusObject")});var yS=T((rde,DL)=>{"use strict";var{handleHDBError:WX,hdb_errors:QX}=X(),{HTTP_STATUS_CODES:zX}=QX,JX=$e(),jX=Yr(),bS=V(),ad=require("joi"),XX=He(),ZX=2e3,eZ=ad.object({timeout:ad.number().min(1),connected_nodes:ad.boolean(),routes:ad.boolean()});DL.exports=tZ;async function tZ(e){jX.checkClusteringEnabled();let t=XX.validateBySchema(e,eZ);if(t)throw WX(t,t.message,zX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||bS.autoCastBoolean(s),o=n===void 0||bS.autoCastBoolean(n),c={nodes:[]},u=await JX.getServerList(r??ZX),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:bS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(tZ,"clusterNetwork")});var PL=T((nde,ML)=>{"use strict";var IS=require("joi"),LL=He(),{route_constraints:UL}=Xh();ML.exports={setRoutesValidator:rZ,deleteRoutesValidator:sZ};function rZ(e){let t=IS.object({server:IS.valid("hub","leaf").required(),routes:UL.required()});return LL.validateBySchema(e,t)}a(rZ,"setRoutesValidator");function sZ(e){let t=IS.object({routes:UL.required()});return LL.validateBySchema(e,t)}a(sZ,"deleteRoutesValidator")});var CS=T((ode,qL)=>{"use strict";var Pi=Rr(),wS=V(),cd=N(),vL=PL(),{handleHDBError:BL,hdb_errors:nZ}=X(),{HTTP_STATUS_CODES:HL}=nZ,iZ="cluster routes successfully set",oZ="cluster routes successfully deleted";qL.exports={setRoutes:aZ,getRoutes:cZ,deleteRoutes:uZ};function aZ(e){let t=vL.setRoutesValidator(e);if(t)throw BL(t,t.message,HL.BAD_REQUEST,void 0,void 0,!0);let r=Pi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=wS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:iZ,set:o,skipped:i}}a(aZ,"setRoutes");function cZ(){let e=Pi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(cZ,"getRoutes");function uZ(e){let t=vL.deleteRoutesValidator(e);if(t)throw BL(t,t.message,HL.BAD_REQUEST,void 0,void 0,!0);let r=Pi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=wS.isEmptyOrZeroLength(s)?null:s,Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=wS.isEmptyOrZeroLength(n)?null:n,Pi.updateConfigValue(cd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:oZ,deleted:i,skipped:o}}a(uZ,"deleteRoutes")});var GL=T((cde,FL)=>{"use strict";var xc=require("alasql"),vi=require("recursive-iterator"),Ts=q(),lZ=V(),kc=N(),DS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,dZ(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=>kc.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=>!kc.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][kc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=_Z(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!kc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new xc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function _Z(e){return e.filter(t=>t[kc.PERMS_CRUD_ENUM.READ])}a(_Z,"filterReadRestrictedAttrs");function dZ(e,t,r,s,n){fZ(e,t,r,s,n)}a(dZ,"interpretAST");function Vc(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(Vc,"addSchemaTableToMap");function fZ(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof xc.yy.Insert?pZ(e,t,r):e instanceof xc.yy.Select?EZ(e,t,r,s,n):e instanceof xc.yy.Update?hZ(e,t,r):e instanceof xc.yy.Delete?mZ(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(fZ,"getRecordAttributesAST");function EZ(e,t,r,s,n){if(!e){Ts.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(lZ.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{Vc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Vc(c.table,t,r,s,n)});let o=new vi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ts.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new vi(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new vi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new vi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ts.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(EZ,"getSelectAttributes");function hZ(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.table.databaseid;Vc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&LS(e.table.tableid,n,i.columnid,t,r)}a(hZ,"getUpdateAttributes");function mZ(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new vi(e.where),n=e.table.databaseid;Vc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&LS(e.table.tableid,n,i.columnid,t,r)}a(mZ,"getDeleteAttributes");function pZ(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.into.databaseid;Vc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&LS(e.into.tableid,n,i.columnid,t,r)}a(pZ,"getInsertAttributes");function LS(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(LS,"pushAttribute");FL.exports=DS});var PS=T((lde,$L)=>{var ud=sc(),xL=require("chalk"),yr=q(),kL=require("prompt"),{promisify:SZ}=require("util"),US=N(),TZ=require("fs-extra"),RZ=require("path"),gZ=V(),AZ=ES(),VL=j();VL.initSync();var OZ=require("moment"),NZ=SZ(kL.get),bZ=RZ.join(VL.getHdbBasePath(),US.LICENSE_KEY_DIR_NAME,US.LICENSE_FILE_NAME,US.LICENSE_FILE_NAME);$L.exports={getFingerprint:IZ,setLicense:yZ,parseLicense:MS,register:wZ,getRegistrationInfo:DZ};async function yZ(e){if(e&&e.key&&e.company){try{yr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await MS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw yr.error(r),yr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(yZ,"setLicense");async function IZ(){let e={};try{e=await ud.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw yr.error(r),yr.error(t),new Error(r)}return e}a(IZ,"getFingerprint");async function MS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");yr.info("Validating license input...");let r=ud.validateLicense(e,t);if(yr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(yr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(yr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{yr.info("writing license to disk"),await TZ.writeFile(bZ,JSON.stringify({license_key:e,company:t}))}catch(s){throw yr.error("Failed to write License"),s}return"Registration successful."}a(MS,"parseLicense");async function wZ(){let e=await CZ();return MS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(wZ,"register");async function CZ(){let e=await ud.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:xL.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:xL.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{kL.start()}catch(s){yr.error(s)}let r;try{r=await NZ(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(CZ,"promptForRegistration");async function DZ(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ud.getLicense()}catch(r){throw yr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(gZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=AZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=OZ.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(DZ,"getRegistrationInfo")});var KL=T((dde,YL)=>{"use strict";var LZ=De(),vS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+LZ.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};YL.exports=vS});var zL=T((Ede,QL)=>{"use strict";var WL=De(),BS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+WL.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+WL.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};QL.exports=BS});var jL=T((mde,JL)=>{"use strict";var HS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};JL.exports=HS});var ZL=T((Sde,XL)=>{"use strict";var UZ=De(),qS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+UZ.SERVER_SUFFIX.ADMIN,this.password=r}};XL.exports=qS});var xS=T((Rde,rU)=>{"use strict";var xo=require("path"),dd=require("fs-extra"),MZ=KL(),PZ=zL(),vZ=jL(),BZ=ZL(),FS=xr(),Vo=V(),sr=Rr(),_d=N(),$c=De(),{CONFIG_PARAMS:et}=_d,Yc=q(),Kc=j(),eU=sn(),GS=$e(),ko="clustering",HZ=1e4,tU=5;rU.exports={generateNatsConfig:FZ,removeNatsConfig:GZ,getHubConfigPath:qZ};function qZ(){let e=Kc.get(et.ROOTPATH);return xo.join(e,ko,$c.NATS_CONFIG_FILES.HUB_SERVER)}a(qZ,"getHubConfigPath");async function FZ(e=!1,t=void 0){Kc.initSync();let r=Kc.get(et.ROOTPATH),s=xo.join(r,ko,$c.PID_FILES.HUB),n=xo.join(r,ko,$c.PID_FILES.LEAF),i=sr.getConfigFromFile(et.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xo.join(r,ko,$c.NATS_CONFIG_FILES.HUB_SERVER),c=xo.join(r,ko,$c.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(et.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(et.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(et.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(et.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(et.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(et.CLUSTERING_NODENAME),h=sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await GS.checkNATSServerInstalled()||fd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await FS.listUsers(),S=sr.getConfigFromFile(et.CLUSTERING_USER),g=await FS.getClusterUser();(Vo.isEmpty(g)||g.active!==!0)&&fd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ld(et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ld(et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ld(et.CLUSTERING_HUBSERVER_NETWORK_PORT),await ld(et.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],b=[];for(let[x,te]of p.entries())te.role.role===_d.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new BZ(te.username,eU.decrypt(te.hash))),b.push(new vZ(te.username,eU.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!Vo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${x.host}:${x.port}`);let G=new MZ(sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,b);l==null&&(delete G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=Vo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===_d.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await dd.writeJson(o,G),Yc.trace(`Hub server config written to ${o}`));let w=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new PZ(sr.getConfigFromFile(et.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,b,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===_d.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await dd.writeJson(c,B),Yc.trace(`Leaf server config written to ${c}`))}a(FZ,"generateNatsConfig");async function ld(e){let t=Kc.get(e);return Vo.isEmpty(t)&&fd(`port undefined for '${e}'`),await Vo.isPortTaken(t)&&fd(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(ld,"isPortAvailable");function fd(e){let t=`Error generating clustering config: ${e}`;Yc.error(t),console.error(t),process.exit(1)}a(fd,"generateNatsConfigError");async function GZ(e){let{port:t,config_file:r}=GS.getServerConfig(e),{username:s,decrypt_hash:n}=await FS.getClusterUser(),i=0,o=2e3;for(;i<tU;){try{let _=await GS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Yc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=tU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await Vo.async_set_timeout(o*(i*2))}let c="0".repeat(HZ),u=xo.join(Kc.get(et.ROOTPATH),ko,r);await dd.writeFile(u,c),await dd.remove(u),Yc.notify(e,"started.")}a(GZ,"removeNatsConfig")});var cU=T((Ade,aU)=>{"use strict";var Ir=j(),xZ=sc(),ce=N(),Wc=De(),ln=require("path"),{PACKAGE_ROOT:hd}=N(),sU=j(),Ed=V(),$o="/dev/null",kZ=ln.join(hd,"launchServiceScripts"),nU=ln.join(hd,"utility/scripts"),VZ=ln.join(nU,ce.HDB_RESTART_SCRIPT),iU=ln.resolve(hd,"dependencies",`${process.platform}-${process.arch}`,Wc.NATS_BINARY_NAME);function oU(){let t=xZ.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Ed.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ed.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:hd}}a(oU,"generateMainServerConfig");var $Z=9930;function YZ(){Ir.initSync(!0);let e=Ir.get(ce.CONFIG_PARAMS.ROOTPATH),t=ln.join(e,"clustering",Wc.NATS_CONFIG_FILES.HUB_SERVER),r=ln.join(Ir.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=sU.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Wc.LOG_LEVEL_FLAGS[Ir.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==$Z?"-"+s:""),script:iU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ir.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(YZ,"generateNatsHubServerConfig");var KZ=9940;function WZ(){Ir.initSync(!0);let e=Ir.get(ce.CONFIG_PARAMS.ROOTPATH),t=ln.join(e,"clustering",Wc.NATS_CONFIG_FILES.LEAF_SERVER),r=ln.join(Ir.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=sU.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Wc.LOG_LEVEL_FLAGS[Ir.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==KZ?"-"+s:""),script:iU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ir.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(WZ,"generateNatsLeafServerConfig");function QZ(){Ir.initSync();let e=ln.join(Ir.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:kZ,autorestart:!1};return Ir.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$o,t.error_file=$o),t}a(QZ,"generateClusteringUpgradeV4ServiceConfig");function zZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return Ed.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ed.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:nU},script:VZ}}a(zZ,"generateRestart");function JZ(){return{apps:[oU()]}}a(JZ,"generateAllServiceConfigs");aU.exports={generateAllServiceConfigs:JZ,generateMainServerConfig:oU,generateRestart:zZ,generateNatsHubServerConfig:YZ,generateNatsLeafServerConfig:WZ,generateClusteringUpgradeV4ServiceConfig:QZ}});var AU=T((bde,gU)=>{"use strict";var Ae=N(),jZ=V(),_n=xS(),Qc=$e(),Gs=De(),Xn=cU(),md=j(),Zn=q(),XZ=Yr(),{startWorker:uU,onMessageFromWorkers:ZZ}=Ge(),e5=Go(),Nde=require("util"),t5=require("child_process"),r5=require("fs"),{execFile:s5}=t5,pe;gU.exports={enterPM2Mode:n5,start:ei,stop:kS,reload:_U,restart:dU,list:VS,describe:EU,connect:dn,kill:u5,startAllServices:l5,startService:$S,getUniqueServicesList:hU,restartAllServices:_5,isServiceRegistered:mU,reloadStopStart:pU,restartHdb:fU,deleteProcess:a5,startClusteringProcesses:TU,startClusteringThreads:RU,isHdbRestartRunning:c5,isClusteringRunning:f5,stopClustering:d5,reloadClustering:E5};var zc=!1;ZZ(e=>{e.type==="restart"&&md.initSync(!0)});function n5(){zc=!0}a(n5,"enterPM2Mode");function dn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Zn.setupConsoleLogging(),r&&t(r),e(s)})})}a(dn,"connect");var nr,i5=10,lU;function ei(e,t=!1){if(zc)return o5(e);let r=s5(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=nr.indexOf(r);o>-1&&nr.splice(o,1),!lU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<i5&&(r5.existsSync(_n.getHubConfigPath())?ei(e):(await _n.generateNatsConfig(!0),ei(e),await new Promise(c=>setTimeout(c,3e3)),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=md.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Gs.LOG_LEVELS[f]}if(Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Zn.OUTPUTS.STDERR:Zn.OUTPUTS.STDOUT;Zn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),nr=[],!nr&&!t){let i=a(()=>{lU=!0,nr&&(nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}nr.push(r)}a(ei,"start");function o5(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(o5,"startWithPM2");function kS(e){if(!zc){for(let t of nr||[])t.name===e&&(nr.splice(nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(kS,"stop");function _U(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(_U,"reload");function dU(e){if(!zc)for(let t of nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(dU,"restart");function a5(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(a5,"deleteProcess");async function fU(){await ei(Xn.generateRestart())}a(fU,"restartHdb");async function c5(){let e=await VS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(c5,"isHdbRestartRunning");function VS(){return new Promise(async(e,t)=>{try{await dn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(VS,"list");function EU(e){return new Promise(async(t,r)=>{try{await dn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(EU,"describe");function u5(){if(!zc){for(let e of nr||[])e.kill();nr=[];return}return new Promise(async(e,t)=>{try{await dn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(u5,"kill");async function l5(){try{await TU(),await RU(),await ei(Xn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(l5,"startAllServices");async function $S(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Xn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Xn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Xn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Xn.generateNatsHubServerConfig(),await ei(r,t),await _n.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Xn.generateNatsLeafServerConfig(),await ei(r,t),await _n.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Xn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ei(r)}catch(r){throw pe?.disconnect(),r}}a($S,"startService");async function hU(){try{let e=await VS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(hU,"getUniqueServicesList");async function _5(e=[]){try{let t=!1,r=await hU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await dU(o))}t&&await pU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(_5,"restartAllServices");async function mU(e){if(nr?.find(r=>r.name===e))return!0;let t=await e5.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(mU,"isServiceRegistered");async function pU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?md.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):md.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await EU(e),s=jZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await kS(e),await $S(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await fU():await _U(e)}a(pU,"reloadStopStart");var SU;async function TU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await $S(r,e)}}a(TU,"startClusteringProcesses");async function RU(){SU=uU(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Qc.createWorkQueueStream(Gs.WORK_QUEUE_CONSUMER_NAMES),await Qc.updateIngestStreamConsumer(),await Qc.updateLocalStreams();let e=await XZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Zn.info("Starting clustering upgrade 4.0.0 process"),uU(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(RU,"startClusteringThreads");async function d5(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await SU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await kS(t)}}a(d5,"stopClustering");async function f5(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await mU(t)===!1)return!1}return!0}a(f5,"isClusteringRunning");async function E5(){await _n.generateNatsConfig(!0),await Qc.reloadNATSHub(),await Qc.reloadNATSLeaf(),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _n.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(E5,"reloadClustering")});var Rd=T((Ide,CU)=>{"use strict";var h5=require("minimist"),{isMainThread:WS,parentPort:bU}=require("worker_threads"),Ye=N(),{PROCESS_DESCRIPTORS_VALIDATE:Jc}=Ye,xs=q(),QS=V(),pd=xS(),Yo=$e(),YS=De(),yU=Rr(),ks=AU(),OU=Go(),m5=hE(),{restartWorkers:Sd,onMessageByType:p5}=Ge(),{handleHDBError:S5,hdb_errors:T5}=X(),{HTTP_STATUS_CODES:R5}=T5,Td=j();Td.initSync();var jc=`Restarting HarperDB. This may take up to ${Ye.RESTART_TIMEOUT_MS/1e3} seconds.`,g5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",NU="Clustering is not enabled so cannot be restarted",A5="Invalid service",Ko,Kr;CU.exports={restart:IU,restartService:zS};WS&&p5(Ye.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?zS({service:e.workerType}):IU({operation:"restart"})});async function IU(e){Kr=Object.keys(e).length===0,Ko=await ks.isServiceRegistered(Ye.HDB_PROC_DESCRIPTOR);let t=h5(process.argv);if(t.service){await zS(t);return}if(Kr&&!Ko){console.error(g5);return}if(Kr&&console.log(jc),Ko){ks.enterPM2Mode(),xs.notify(jc);let r=m5(Object.keys(Ye.CONFIG_PARAM_MAP),!0);return QS.isEmptyOrZeroLength(Object.keys(r))||yU.updateConfigValue(void 0,void 0,r,!0,!0),N5(),jc}return WS?(xs.notify(jc),setTimeout(()=>{Sd()},50)):bU.postMessage({type:Ye.ITC_EVENT_TYPES.RESTART}),jc}a(IU,"restart");async function zS(e){let{service:t}=e;if(Ye.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw S5(new Error,A5,R5.BAD_REQUEST,void 0,void 0,!0);if(Ko=await ks.isServiceRegistered(Ye.HDB_PROC_DESCRIPTOR),!WS)return bU.postMessage({type:Ye.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Jc.clustering:if(!Td.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=NU;break}Kr&&console.log("Restarting clustering"),xs.notify("Restarting clustering"),await wU();break;case Jc.clustering_config:case Jc["clustering config"]:if(!Td.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=NU;break}Kr&&console.log("Restarting clustering_config"),xs.notify("Restarting clustering_config"),await ks.reloadClustering();break;case"custom_functions":case"custom functions":case Jc.harperdb:case Jc.http_workers:if(Kr&&!Ko){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Kr&&console.log("Restarting http_workers"),xs.notify("Restarting http_workers"),Kr?await ks.restart(Ye.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Sd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(xs.error(r),Kr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(zS,"restartService");async function O5(){await Yo.publishToStream(`${YS.SUBJECT_PREFIXES.TXN}.${YS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,YS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(O5,"postDummyNatsMsg");async function N5(){await wU(),await ks.restart(Ye.HDB_PROC_DESCRIPTOR),await QS.async_set_timeout(2e3),Td.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await KS(),Kr&&(await Yo.closeConnection(),process.exit(0))}a(N5,"restartPM2Mode");async function wU(){if(!yU.getConfigFromFile(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await OU.getHDBProcessInfo()).clustering.length===0)xs.trace("Clustering not running, restart will start clustering services"),await pd.generateNatsConfig(!0),await ks.startClusteringProcesses(),await ks.startClusteringThreads(),await KS(),Kr&&await Yo.closeConnection();else{await O5(),await pd.generateNatsConfig(!0),Ko?(xs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ks.restart(Ye.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ks.restart(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await OU.getHDBProcessInfo()).clustering.forEach(n=>{xs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await QS.async_set_timeout(3e3),await KS(),await Yo.updateLocalStreams(),Kr&&await Yo.closeConnection(),xs.trace("Restart clustering restarting ingest and reply service threads");let t=Sd(Ye.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Sd(Ye.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wU,"restartClustering");async function KS(){await pd.removeNatsConfig(Ye.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await pd.removeNatsConfig(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(KS,"removeNatsConfig")});var GU=T((Dde,FU)=>{"use strict";var Cde=require("lodash"),ir=N(),{handleHDBError:DU,hdb_errors:b5}=X(),{HDB_ERROR_MSGS:y5,HTTP_STATUS_CODES:I5}=b5,JS=q();FU.exports={getRolePermissions:C5};var Bi=Object.create(null),w5=a(e=>({key:e,perms:{}}),"perms_template_obj"),PU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),vU=a((e=!1,t=!1,r=!1,s=!1)=>({[ir.PERMS_CRUD_ENUM.READ]:e,[ir.PERMS_CRUD_ENUM.INSERT]:t,[ir.PERMS_CRUD_ENUM.UPDATE]:r,[ir.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),jS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...vU(t,r,s,n)}),"table_perms_template"),LU=a((e,t=vU())=>({attribute_name:e,describe:qU(t),[Xc]:t[Xc],[XS]:t[XS],[ZS]:t[ZS]}),"attr_perms_template"),UU=a((e,t=!1)=>({attribute_name:e,describe:t,[Xc]:t}),"timestamp_attr_perms_template"),{READ:Xc,INSERT:XS,UPDATE:ZS}=ir.PERMS_CRUD_ENUM,BU=Object.values(ir.PERMS_CRUD_ENUM),HU=[Xc,XS,ZS];function C5(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[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bi[t]&&Bi[t].key===s)return Bi[t].perms;let n=D5(e,r);return Bi[t]?Bi[t].key=s:Bi[t]=w5(s),Bi[t].perms=n,n}catch(r){if(!e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ir.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 JS.error(s),JS.debug(r),DU(new Error,y5.OUTDATED_PERMS_TRANSLATION_ERROR,I5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
+
${r.stack}`;throw JS.error(s),DU(new Error)}}}a(C5,"getRolePermissions");function D5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ir.SYSTEM_SCHEMA_NAME]=s[ir.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]=L5(t[i]);return}r[i]=PU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=U5(c,u);r[i].describe||BU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=jS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=jS()})}),r}a(D5,"translateRolePermissions");function L5(e){let t=PU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jS(!0,!0,!0,!0,!0)}),t}a(L5,"createStructureUserPermissions");function U5(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return ir.TIME_STAMP_NAMES.includes(d)&&(f=UU(d,l[Xc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=LU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=qU(l),n.attribute_permissions.push(l),c||M5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=UU(_):l=LU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=MU(n),n}else return e.describe=MU(e),e}a(U5,"getTableAttrPerms");function MU(e){return BU.filter(t=>e[t]).length>0}a(MU,"getSchemaTableDescribePerm");function qU(e){return HU.filter(t=>e[t]).length>0}a(qU,"getAttributeDescribePerm");function M5(e,t){HU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(M5,"checkForHashPerms")});var xU={};Je(xU,{Resources:()=>gd,keyArrayToString:()=>Wo,resetResources:()=>P5,resources:()=>ti});function P5(){return ti=new gd}function Wo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var gd,ti,Zc=Te(()=>{fi();gd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(P5,"resetResources");a(Wo,"keyArrayToString")});var Hi,eT=Te(()=>{Hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var eu={};Je(eu,{authentication:()=>zU,bypassAuth:()=>x5,login:()=>V5,logout:()=>$5,start:()=>k5});function x5(){QU=!0}async function zU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?q5?H5:[]:B5?v5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Hi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ad&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ad&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Ad){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await VU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Nd.AuthAuditLog(E,h,wt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===wt.AUTH_AUDIT_STATUS.SUCCESS?kU.notify(S):kU.error(S)},"authAuditLog"),d;if(s){if(d=qi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.getUser(p,S):null;break;case"Bearer":try{d=await(0,Od.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,Od.validateRefreshToken)(h),c({status:-1})}catch{throw g}}break}}catch(g){return G5&&(qi.get(h)||(qi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ri({error:g.message},e)})}qi.set(s,d),F5&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,!1):QU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,YU.getSuperUser)());Ad&&(e.session.update=function(E){if(!u){u=(0,KU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return E.id=u,VU.put(E)},e.login=async function(E,h){e.user=await lt.getUser(E,h),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&ti.loginPath?(f.status=302,f.headers.set("Location",ti.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Hi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function k5({server:e,port:t}){e.request(zU,{port:t||"all"}),$U||($U=!0,setInterval(()=>{qi=new Map},Wr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),WU.user.addListener(()=>{qi=new Map}))}async function V5(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function $5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var YU,Od,KU,Wr,wt,Nd,WU,kU,v5,B5,H5,q5,VU,Ad,QU,F5,G5,qi,$U,bd=Te(()=>{YU=L(xr());Hr();Zc();Od=L(Pc());fe();KU=require("uuid"),Wr=L(j()),wt=L(N()),Nd=L(q()),WU=L(ic());eT();Qo();kU=(0,Nd.loggerWithTag)("auth-event");Wr.initSync();v5=Wr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),B5=Wr.get(wt.CONFIG_PARAMS.HTTP_CORS),H5=Wr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),q5=Wr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),VU=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ad=Wr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,QU=Wr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,F5=Wr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,G5=Wr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,qi=new Map;lt.onInvalidatedUser(()=>{qi=new Map});a(x5,"bypassAuth");a(zU,"authentication");a(k5,"start");a(V5,"login");a($5,"logout")});var rM=T((kde,tM)=>{"use strict";var Se=require("joi"),JU=require("fs-extra"),jU=require("path"),En=He(),XU=j(),ZU=N(),eM=q(),{hdb_errors:Y5}=X(),{HDB_ERROR_MSGS:xt}=Y5,fn=/^[a-zA-Z0-9-_]+$/;tM.exports={getDropCustomFunctionValidator:W5,setCustomFunctionValidator:Q5,addComponentValidator:X5,dropCustomFunctionProjectValidator:Z5,packageComponentValidator:e8,deployComponentValidator:t8,setComponentFileValidator:z5,getComponentFileValidator:j5,dropComponentFileValidator:J5};function yd(e,t,r){try{let s=XU.get(ZU.CONFIG_PARAMS.COMPONENTSROOT),n=jU.join(s,t);return JU.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return eM.error(s),r.message(xt.VALIDATION_ERR)}}a(yd,"checkProjectExists");function tu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(tu,"checkFilePath");function K5(e,t,r,s){try{let n=XU.get(ZU.CONFIG_PARAMS.COMPONENTSROOT),i=jU.join(n,e,t,r+".js");return JU.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return eM.error(n),s.message(xt.VALIDATION_ERR)}}a(K5,"checkFileExists");function W5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(fn).custom(K5.bind(null,e.project,e.type)).custom(tu).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return En.validateBySchema(e,t)}a(W5,"getDropCustomFunctionValidator");function Q5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(tu).required(),function_content:Se.string().required()});return En.validateBySchema(e,t)}a(Q5,"setCustomFunctionValidator");function z5(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(tu).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return En.validateBySchema(e,t)}a(z5,"setComponentFileValidator");function J5(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(tu).optional()});return En.validateBySchema(e,t)}a(J5,"dropComponentFileValidator");function j5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(tu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return En.validateBySchema(e,t)}a(j5,"getComponentFileValidator");function X5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return En.validateBySchema(e,t)}a(X5,"addComponentValidator");function Z5(e){let t=Se.object({project:Se.string().pattern(fn).custom(yd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return En.validateBySchema(e,t)}a(Z5,"dropCustomFunctionProjectValidator");function e8(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return En.validateBySchema(e,t)}a(e8,"packageComponentValidator");function t8(e){let t=Se.object({project:Se.string().pattern(fn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:Se.string().optional()});return En.validateBySchema(e,t)}a(t8,"deployComponentValidator")});var Dd=T(($de,uM)=>{"use strict";var Id=require("joi"),wd=require("path"),sM=require("fs-extra"),{exec:r8}=require("child_process"),s8=require("util"),nM=s8.promisify(r8),ru=N(),{handleHDBError:zo,hdb_errors:n8}=X(),{HTTP_STATUS_CODES:Jo}=n8,su=j(),i8=He(),jo=q();su.initSync();var tT=su.get(ru.CONFIG_PARAMS.COMPONENTSROOT),iM="npm install --omit=dev --json",o8=`${iM} --dry-run`;uM.exports={installModules:l8,auditModules:_8,installAllRootModules:a8,uninstallRootModule:c8,linkHarperdb:u8};async function a8(e=!1){await Cd(),await nu(e?"npm install --ignore-scripts":"npm install",su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(a8,"installAllRootModules");async function c8(e){await nu(`npm uninstall ${e}`,su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(c8,"uninstallRootModule");async function u8(){await Cd(),await nu(`npm link ${ru.PACKAGE_ROOT}`,su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(u8,"linkHarperdb");async function nu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await nM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
10
10
|
`,""))}return s&&!s.includes("Debugger listening")&&jo.error("Error running NPM command:",e,s),jo.trace(r,s),r.replace(`
|
|
11
|
-
`,"")}a(nu,"runCommand");async function
|
|
11
|
+
`,"")}a(nu,"runCommand");async function l8(e){jo.info(`starting installModules for request: ${e}`);let t=cM(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?o8:iM;await Cd(),await aM(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=wd.join(tT,u),l,d=null;try{let{stdout:f,stderr:E}=await nM(n,{cwd:_});l=f?f.replace(`
|
|
12
12
|
`,""):null,d=E?E.replace(`
|
|
13
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=oM(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return jo.info(`finished installModules with response ${i}`),i}a(
|
|
14
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(oM,"parseNPMStdErr");async function l8(e){jo.info(`starting auditModules for request: ${e}`);let t=cM(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r}=e;await Cd(),await aM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=wd.join(tT,o);s[o]={npm_output:null,npm_error:null};try{let u=await nu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=oM(u.stderr)}}return jo.info(`finished auditModules with response ${s}`),s}a(l8,"auditModules");async function Cd(){try{return await nu("npm -v"),!0}catch{throw zo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jo.BAD_REQUEST,void 0,void 0,!0)}}a(Cd,"checkNPMInstalled");async function aM(e){if(!Array.isArray(e)||e.length===0)throw zo(new Error,"projects argument must be an array with at least 1 element",Jo.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=wd.join(tT,i.toString());if(!await sM.pathExists(o)){t.push(i);continue}let u=wd.join(o,"package.json");await sM.pathExists(u)||r.push(i)}if(t.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jo.BAD_REQUEST,void 0,void 0,!0)}a(aM,"checkProjectPaths");function cM(e){let t=Id.object({projects:Id.array().min(1).items(Id.string()).required(),dry_run:Id.boolean().default(!1)});return n8.validateBySchema(e,t)}a(cM,"modulesValidator")});var sT=T((Kde,EM)=>{"use strict";var Xo=require("fs-extra"),rT=require("path"),Ld=q(),lM=V(),Ud=N(),fM=j(),_8=Tr();EM.exports=d8;async function d8(){let e=f8(),t=fM.get(Ud.CONFIG_PARAMS.ROOTPATH),r=rT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Ud.PACKAGE_ROOT}},n=rT.join(t,"node_modules");await Xo.ensureDir(n);let i,o=!0,c=!1;try{i=await Xo.readJson(r)}catch(u){if(lM.isEmptyOrZeroLength(e))return;if(u.code!==Ud.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!lM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await _M(_);s.dependencies[u]=l+_}if(!o){Ld.notify("Installing components"),await dM(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await _M(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Ld.notify("Removing component",u),c=!0);c&&(Ld.notify("Updating components."),await dM(r,s,i))}a(d8,"installComponents");function f8(){let e=_8.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(f8,"getComponentsConfig");async function _M(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":rT.extname(e)||await Xo.pathExists(e)?"file:":"github:"}a(_M,"getPkgPrefix");async function dM(e,t,r){Ld.trace("npm installing components package.json",t),await Xo.writeFile(e,JSON.stringify(t,null," "));try{await Dd().installAllRootModules(fM.get(Ud.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Xo.writeFile(e,JSON.stringify(r,null," ")):await Xo.unlink(e),s}}a(dM,"installPackages")});var oT=T((zde,SM)=>{"use strict";var Le=require("fs-extra"),nT=require("fast-glob"),le=require("path"),mM=require("tar-fs"),Qde=require("uuid").v4,iT=require("normalize-path"),ks=rM(),pt=q(),Pe=N(),it=j(),iu=Tr(),E8=V(),{PACKAGE_ROOT:h8}=N(),{handleHDBError:St,hdb_errors:m8}=X(),{basename:p8}=require("path"),S8=sT(),pM=j(),T8=N(),{Readable:R8}=require("stream"),{isMainThread:g8}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Tt}=m8,A8=le.join(h8,"application-template"),hM=le.join(it.get(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function O8(){pt.trace("getting custom api status");let e={};try{e={port:it.get(Pe.CONFIG_PARAMS.HTTP_PORT),directory:it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw St(new Error,Fi.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(O8,"customFunctionsStatus");function N8(){pt.trace("getting custom api endpoints");let e={},t=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT);try{nT.sync(iT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:nT.sync(iT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:nT.sync(iT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw St(new Error,Fi.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(N8,"getCustomFunctions");function b8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("getting custom api endpoint file content");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw St(new Error,Fi.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(b8,"getCustomFunction");function y8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("setting custom function file content");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw St(new Error,Fi.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(y8,"setCustomFunction");function I8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function file");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw St(new Error,Fi.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(I8,"dropCustomFunction");function w8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("adding component");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(A8,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,Fi.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a(w8,"addComponent");function C8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function project");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=it.get(Pe.CONFIG_PARAMS.APPS);if(!E8.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return iu.updateConfigValue(Pe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw St(new Error,Fi.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(C8,"dropCustomFunctionProject");async function D8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;pt.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Pe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(it.get(Pe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Pe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(hM);let i=le.join(hM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),mM.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(D8,"packageComponent");async function L8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(pt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=R8.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(mM.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await iu.addConfig(s,{package:i}),!n){await S8();let f=pM.get(T8.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(g8)return;let c=new Map;c.isWorker=!0;let u=(Pd(),Z(Md)),_;u.setErrorReporter(f=>_=f);let l=p8(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return pt.info("Installed component"),`Successfully deployed: ${s}`}a(L8,"deployComponent");async function U8(){let e=iu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{name:it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(it.get(Pe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Pd(),Z(Md)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(U8,"getComponents");async function M8(e){let t=ks.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let s=iu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(pM.get(Pe.CONFIG_PARAMS.ROOTPATH),"node_modules"):it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Pe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(M8,"getComponentFile");async function P8(e){let t=ks.setComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(P8,"setComponentFile");async function v8(e){let t=ks.dropComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),iu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(v8,"dropComponent");SM.exports={customFunctionsStatus:O8,getCustomFunctions:N8,getCustomFunction:b8,setCustomFunction:y8,dropCustomFunction:I8,addComponent:w8,dropCustomFunctionProject:C8,packageComponent:D8,deployComponent:L8,getComponents:U8,getComponentFile:M8,setComponentFile:P8,dropComponent:v8}});var aT=T((jde,RM)=>{"use strict";var Vs=require("joi"),TM=He();RM.exports={readTransactionLogValidator:B8,deleteTransactionLogsBeforeValidator:H8};function B8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return TM.validateBySchema(e,t)}a(B8,"readTransactionLogValidator");function H8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return TM.validateBySchema(e,t)}a(H8,"deleteTransactionLogsBeforeValidator")});var Bd=T((Zde,bM)=>{"use strict";var cT=N(),vd=$e(),gM=V(),AM=j(),OM=rn(),{handleHDBError:Zo,hdb_errors:q8}=X(),{HTTP_STATUS_CODES:ea}=q8,{readTransactionLogValidator:F8,deleteTransactionLogsBeforeValidator:G8}=aT(),NM="This operation relies on clustering and cannot run with it disable.",x8="Logs successfully deleted from transaction log.",k8="All logs successfully deleted from transaction log.";bM.exports={readTransactionLog:V8,deleteTransactionLogsBefore:$8};async function*V8(e){let t=F8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!AM.get(cT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,NM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=gM.checkSchemaTableExist(r,s);if(n)throw Zo(new Error,n,ea.NOT_FOUND,void 0,void 0,!0);let i=OM.createNatsTableStreamName(r,s),o=await vd.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===cT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(V8,"readTransactionLog");async function $8(e){let t=G8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!AM.get(cT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,NM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=gM.checkSchemaTableExist(r,s);if(i)throw Zo(new Error,i,ea.NOT_FOUND,void 0,void 0,!0);let o=OM.createNatsTableStreamName(r,s),{jsm:c}=await vd.getNATSReferences(),u=await vd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=x8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=k8):d=(await vd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a($8,"deleteTransactionLogsBefore")});var IM=T((tfe,yM)=>{"use strict";var uT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};yM.exports=uT});var CM=T((sfe,wM)=>{"use strict";var lT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};wM.exports=lT});var dT=T((ife,LM)=>{"use strict";var DM=IM(),Y8=CM(),{HDB_ERROR_MSGS:K8}=dr(),_T=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=K8.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 DM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Y8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new DM(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}};LM.exports=_T});var Gd=T((afe,WM)=>{"use strict";var fT=pr(),Hd=Fr(),Qr=Dc(),cu=vn(),ET=qn(),W8=Ip(),Q8=VC(),uu=Gr(),qd=Bp(),dt=q(),z8=Fp(),J8=Z_(),j8=TS(),X8=sd(),Z8=RS(),e6=gS(),t6=NS(),r6=yS(),hT=CS(),hn=V(),s6=GL(),mT=PS(),PM=Rd(),Wr=N(),vM=GU(),n6=Go(),BM=Pc(),HM=(bd(),Z(eu)),qM=Tr(),Ir=oT(),i6=require("alasql"),FM=Bd(),GM=Dd(),xM=dT(),{handleHDBError:or,hdb_errors:kM}=X(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:ou}=kM,v=new Map,VM="delete",si="insert",mn="read",Gi="update",au="describe",UM=cu.describeSchema.name,MM=cu.describeTable.name,$M={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},o6="catchup",a6="handleGetJob",c6="handleGetJobsByStartDate",Fd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},u6=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],YM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(fT.insert.name,new F(!1,[si]));v.set(fT.update.name,new F(!1,[Gi]));v.set(fT.upsert.name,new F(!1,[si,Gi]));v.set(Hd.searchByConditions.name,new F(!1,[mn]));v.set(Hd.searchByHash.name,new F(!1,[mn]));v.set(Hd.searchByValue.name,new F(!1,[mn]));v.set(Hd.search.name,new F(!1,[mn]));v.set(Qr.createSchema.name,new F(!0,[]));v.set(Qr.createTable.name,new F(!0,[]));v.set(Qr.createAttribute.name,new F(!1,[si]));v.set(Qr.dropSchema.name,new F(!0,[]));v.set(Qr.dropTable.name,new F(!0,[]));v.set(Qr.dropAttribute.name,new F(!0,[]));v.set(cu.describeSchema.name,new F(!1,[mn]));v.set(cu.describeTable.name,new F(!1,[mn]));v.set(ET.deleteRecord.name,new F(!1,[VM]));v.set(uu.addUser.name,new F(!0,[]));v.set(uu.alterUser.name,new F(!0,[]));v.set(uu.dropUser.name,new F(!0,[]));v.set(uu.listUsersExternal.name,new F(!0,[]));v.set(qd.listRoles.name,new F(!0,[]));v.set(qd.addRole.name,new F(!0,[]));v.set(qd.alterRole.name,new F(!0,[]));v.set(qd.dropRole.name,new F(!0,[]));v.set(z8.name,new F(!0,[]));v.set(J8.name,new F(!0,[]));v.set(j8.name,new F(!0,[]));v.set(X8.name,new F(!0,[]));v.set(Z8.name,new F(!0,[]));v.set(e6.name,new F(!0,[]));v.set(hT.setRoutes.name,new F(!0,[]));v.set(hT.getRoutes.name,new F(!0,[]));v.set(hT.deleteRoutes.name,new F(!0,[]));v.set(qM.setConfiguration.name,new F(!0,[]));v.set(t6.clusterStatus.name,new F(!0,[]));v.set(r6.name,new F(!0,[]));v.set(mT.getFingerprint.name,new F(!0,[]));v.set(mT.setLicense.name,new F(!0,[]));v.set(ET.deleteFilesBefore.name,new F(!0,[]));v.set(ET.deleteAuditLogsBefore.name,new F(!0,[]));v.set(PM.restart.name,new F(!0,[]));v.set(PM.restartService.name,new F(!0,[]));v.set(W8.name,new F(!0,[]));v.set(Q8.name,new F(!0,[mn]));v.set(n6.systemInformation.name,new F(!0,[]));v.set(qM.getConfiguration.name,new F(!0,[]));v.set(FM.readTransactionLog.name,new F(!0,[]));v.set(FM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(GM.installModules.name,new F(!0,[]));v.set(GM.auditModules.name,new F(!0,[]));v.set(BM.createTokens.name,new F(!1,[]));v.set(BM.refreshOperationToken.name,new F(!1,[]));v.set(HM.login.name,new F(!1,[]));v.set(HM.logout.name,new F(!1,[]));v.set(Ir.customFunctionsStatus.name,new F(!0,[]));v.set(Ir.getCustomFunctions.name,new F(!0,[]));v.set(Ir.getComponents.name,new F(!0,[]));v.set(Ir.getComponentFile.name,new F(!0,[]));v.set(Ir.setComponentFile.name,new F(!0,[]));v.set(Ir.dropComponent.name,new F(!0,[]));v.set(Ir.getCustomFunction.name,new F(!0,[]));v.set(Ir.setCustomFunction.name,new F(!0,[]));v.set(Ir.dropCustomFunction.name,new F(!0,[]));v.set(Ir.addComponent.name,new F(!0,[]));v.set(Ir.dropCustomFunctionProject.name,new F(!0,[]));v.set(Ir.packageComponent.name,new F(!0,[]));v.set(Ir.deployComponent.name,new F(!0,[]));v.set(mT.getRegistrationInfo.name,new F(!1,[]));v.set(uu.userInfo.name,new F(!1,[]));v.set(cu.describeAll.name,new F(!1,[]));v.set(a6,new F(!1,[]));v.set(c6,new F(!0,[]));v.set(o6,new F(!0,[]));v.set(Fd.CSV_DATA_LOAD,new F(!1,[si,Gi]));v.set(Fd.CSV_URL_LOAD,new F(!1,[si,Gi]));v.set(Fd.CSV_FILE_LOAD,new F(!1,[si,Gi]));v.set(Fd.IMPORT_FROM_S3,new F(!1,[si,Gi]));v.set(YM.EXPORT_TO_S3,new F(!0,[]));v.set(YM.EXPORT_LOCAL,new F(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[VM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[mn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[si]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[Gi]));WM.exports={verifyPerms:_6,verifyPermsAst:l6,verifyBulkLoadAttributePerms:f6};function l6(e,t,r){if(hn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),or(new Error);if(hn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),or(new Error);if(hn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new xM,n=new s6(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw dt.info("No schemas defined in verifyPermsAst(), will not continue."),or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&$M[r])throw or(new Error,Ct.DROP_SYSTEM,ou.FORBIDDEN);if(c&&!u)return null;let _=vM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof i6.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=KM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=ST(t.role.permission,f,d[E]);pT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(l6,"verifyPermsAst");function _6(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),or(new Error,Ct.DEFAULT_INVALID_REQUEST,ou.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new xM;if(hn.isEmptyOrZeroLength(e.hdb_user.role)||hn.isEmptyOrZeroLength(e.hdb_user.role.permission))return dt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ct.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Wr.SYSTEM_SCHEMA_NAME)||n===Wr.SYSTEM_SCHEMA_NAME;if(l&&$M[r])throw or(new Error,Ct.DROP_SYSTEM,ou.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(u6.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=vM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===UM||r===MM){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===UM&&(!d[n]||!d[n][au]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===MM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][au]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=KM(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Wr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Wr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=p)}let E=d6(e),h=ST(e.hdb_user.role.permission,n,i);return pT(E,h,r,i,n,c,s),c.getPermsResponse()}a(_6,"verifyPerms");function KM(e,t,r,s,n){if(hn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),or(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw dt.info(`operation ${t} not found.`),or(new Error,Ct.OP_NOT_FOUND(t),ou.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return dt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][au]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[au]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!hn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(dt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw dt.error(E),dt.error(f),or(kM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(KM,"hasPermissions");function pT(e,t,r,s,n,i,o){if(!e||!t)throw dt.info("no attributes specified in checkAttributePerms."),or(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),or(new Error);if(hn.isEmptyOrZeroLength(t))return dt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[au]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Wr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==mn)throw or(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,ou.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(pT,"checkAttributePerms");function d6(e){let t=new Set;try{if(e.action)return t;if(e.operation===Wr.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){dt.info(r)}return t}a(d6,"getRecordAttributes");function ST(e,t,r){let s=new Map;if(hn.isEmpty(e))return dt.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{dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(ST,"getAttributePermissions");function f6(e,t,r,s,n,i,o){let c=new Set(i),u=ST(e,s,n);pT(c,u,t,n,s,o,r)}a(f6,"verifyBulkLoadAttributePerms")});var kd=T((ufe,XM)=>{"use strict";XM.exports={evaluateSQL:y6,processAST:jM,convertSQLToAST:JM,checkASTPermissions:zM};var E6=pr(),QM=require("util"),h6=QM.callbackify(E6.insert),m6=Fr().search,p6=Bw().update,S6=QM.callbackify(p6),T6=qw().convertDelete,ni=require("alasql"),R6=Gd(),xd=q(),g6=g_(),A6=V(),lu=N(),{hdb_errors:O6,handleHDBError:TT}=X(),{HTTP_STATUS_CODES:RT}=O6;g6(ni);var N6=403,b6="There was a problem performing this insert. Please check the logs and try again.",gT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function y6(e,t){let r=e.parsed_sql_object;if(!r){r=JM(e.sql);let s,n=r.ast.statements[0];if(n instanceof ni.yy.Insert?s=n.into.databaseid:n instanceof ni.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ni.yy.Update||n instanceof ni.yy.Delete?s=n.table.databaseid:xd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ni.yy.Select)&&A6.isEmptyOrZeroLength(s))return t("No schema specified",null)}jM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(y6,"evaluateSQL");function zM(e,t){let r;try{r=R6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(zM,"checkASTPermissions");function JM(e){let t=new gT;if(!e)throw TT(new Error,"The 'sql' parameter is missing from the request body",RT.BAD_REQUEST);try{let r=e.trim(),s=ni.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
15
|
-
`);throw s[1]?TT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,RT.BAD_REQUEST):TT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",RT.BAD_REQUEST)}return t}a(JM,"convertSQLToAST");function jM(e,t,r){try{let s=I6;if(!e.bypass_auth&&!t.permissions_checked){let i=zM(e,t);if(i&&i.length>0)return r(N6,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case lu.VALID_SQL_OPS_ENUM.SELECT:s=m6,n=t.ast.statements[0];break;case lu.VALID_SQL_OPS_ENUM.INSERT:s=w6;break;case lu.VALID_SQL_OPS_ENUM.UPDATE:s=S6;break;case lu.VALID_SQL_OPS_ENUM.DELETE:s=T6;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(jM,"processAST");function I6(e,t){xd.info(e),t("unknown sql statement")}a(I6,"nullFunction");function w6({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=C6(i,e.values)}catch(o){return r(o)}h6(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){xd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(w6,"convertInsert");function C6(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]]=ni.compile(`SELECT ${n.toString()} AS [${lu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw xd.error(r),new Error(b6)}}a(C6,"createDataObjects")});var AT=T((_fe,eP)=>{"use strict";var{S3:D6,GetObjectCommand:L6}=require("@aws-sdk/client-s3");eP.exports={getFileStreamFromS3:U6,getS3AuthObj:ZM};async function U6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ZM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new L6(r))).Body}a(U6,"getFileStreamFromS3");function ZM(e,t,r){return new D6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ZM,"getS3AuthObj")});var Vd=T((ffe,lP)=>{"use strict";var sP=Fr(),M6=kd(),P6=AT(),{AsyncParser:v6,Transform:B6}=require("json2csv"),du=require("stream"),wr=V(),OT=require("fs-extra"),H6=require("path"),zr=q(),{promisify:nP}=require("util"),_u=V(),{handleHDBError:ot,hdb_errors:q6}=X(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:at}=q6,{streamAsJSON:F6}=VE(),{Upload:G6}=require("@aws-sdk/lib-storage"),tP=["search_by_value","search_by_hash","sql"],rP=["json","csv"],iP="json",oP="csv",x6="Successfully exported JSON locally.",k6="Successfully exported CSV locally.",V6=1e3,$6=sP.searchByHash,Y6=sP.searchByValue,K6=nP(M6.evaluateSQL),W6=nP(du.finished);lP.exports={export_to_s3:j6,export_local:Q6,toCsvStream:aP};async function Q6(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=cP(e);if(!wr.isEmpty(t))throw zr.error(t),ot(new Error,t,at.BAD_REQUEST,void 0,void 0,!0);if(wr.isEmpty(e.path))throw zr.error(ar.MISSING_VALUE("path")),ot(new Error,ar.MISSING_VALUE("path"),at.BAD_REQUEST,void 0,void 0,!0);let r=(wr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(H6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=wr.buildFolderPath(e.path,r);await z6(e.path);let n=await uP(e);return await J6(s,e.format,n)}a(Q6,"export_local");async function z6(e){if(zr.trace("in confirmPath"),wr.isEmptyOrZeroLength(e))throw ot(new Error,`Invalid path: ${e}`,at.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await OT.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,zr.error(s),ot(new Error,s,at.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw zr.error(r),ot(new Error,r,at.BAD_REQUEST,void 0,void 0,!0)}return!0}a(z6,"confirmPath");async function J6(e,t,r){if(zr.trace("in saveToLocal"),_u.isEmptyOrZeroLength(e))throw ot(new Error,ar.INVALID_VALUE("file_path"),at.BAD_REQUEST,void 0,void 0,!0);if(_u.isEmptyOrZeroLength(t))throw ot(new Error,ar.INVALID_VALUE("Source format"),at.BAD_REQUEST,void 0,void 0,!0);if(_u.isEmpty(r))throw ot(new Error,ar.NOT_FOUND("Data"),at.BAD_REQUEST,void 0,void 0,!0);if(t===iP){let s=OT.createWriteStream(e);return F6(r).pipe(s),await W6(s),{message:x6,path:e}}else if(t===oP){let s=OT.createWriteStream(e),n=du.Readable.from(r),i={},o={objectMode:!0};return await new v6(i,o).fromInput(n).toOutput(s).promise(!1),{message:k6,path:e}}throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST)}a(J6,"saveToLocal");async function j6(e){if(!e.s3||Object.keys(e.s3).length===0)throw ot(new Error,ar.MISSING_VALUE("S3 object"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ot(new Error,ar.MISSING_VALUE("aws_access_key_id"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ot(new Error,ar.MISSING_VALUE("aws_secret_access_key"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.bucket))throw ot(new Error,ar.MISSING_VALUE("bucket"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.key))throw ot(new Error,ar.MISSING_VALUE("key"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.region))throw ot(new Error,ar.MISSING_VALUE("region"),at.BAD_REQUEST);let t=cP(e);if(!wr.isEmpty(t))throw ot(new Error,t,at.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await uP(e)}catch(u){throw zr.error(u),u}let s,n=await P6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new du.PassThrough;if(e.format===oP){i=e.s3.key+".csv";let u=aP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===iP){i=e.s3.key+".json";let u=new du.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%V6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST);return new G6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(j6,"export_to_s3");function aP(e){let t=du.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new B6(r,s);return t.pipe(n)}a(aP,"toCsvStream");function cP(e){if(zr.trace("in exportCoreValidation"),wr.isEmpty(e.format))return"format missing";if(rP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${rP.join(", ")}`;let t=e.search_operation.operation;if(wr.isEmpty(t))return"search_operation.operation missing";if(tP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${tP.join(", ")}`}a(cP,"exportCoreValidation");async function uP(e){zr.trace("in getRecords");let t,r;if(_u.isEmpty(e.search_operation)||_u.isEmptyOrZeroLength(e.search_operation.operation))throw ot(new Error,ar.INVALID_VALUE("Search operation"),at.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Y6;break;case"search_by_hash":t=$6;break;case"sql":t=K6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),ot(new Error,r,at.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(uP,"getRecords")});var SP={};Je(SP,{contentTypes:()=>bT,findBestSerializer:()=>Kd,getDeserializer:()=>ta,registerContentHandlers:()=>yT,serialize:()=>Wd,serializeMessage:()=>ri});function X6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function yT(e){e.register(e9,{serializers:[{regex:/^application\/json$/,serializer:$d.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new xi.EncoderStream(fu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yd.Readable.from((0,$s.encodeIter)(t,fu)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,NT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$s.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,xi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Kd(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Dt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Dt.keys()).join(", "))}};s=Dt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Wd(e,t,r){let s=dP&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Kd(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,pn.createBrotliCompress)({params:{[pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?pn.constants.BROTLI_MODE_TEXT:pn.constants.BROTLI_MODE_GENERIC,[pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>dP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function ri(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Kd(t);return r=t.serialize=s.serializer.serialize,r(e)}function t9(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function ta(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Dt.get(e)?.deserialize||fP(e,s);return o=>t9(o).then(i)}return e&&Dt.get(e)?.deserialize||fP(e,s)}function fP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function r9(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var $d,NT,$s,xi,pn,Yd,EP,hP,mP,fu,Dt,bT,_P,pP,Z6,e9,dP,Qo=Te(()=>{$d=L(VE()),NT=L(Vd()),$s=require("msgpackr"),xi=require("cbor-x"),pn=require("zlib"),Yd=require("stream");Br();EP=require("../index"),hP=L(j()),mP=L(N()),fu={useRecords:!1,useToJSON:!0},Dt=new Map,bT=Dt;lt.contentTypes=bT;(0,EP._assignPackageExport)("contentTypes",bT);Dt.set("application/json",{serializeStream:$d.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});_P=new xi.Encoder(fu);Dt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xi.EncoderStream(fu).end(e)},serialize:_P.encode,deserialize:_P.decode,q:1});Dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yd.Readable.from((0,$s.encodeIter)(e,fu)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});Dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,NT.toCsvStream)(e)},q:.1});Dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Dt.set("text/event-stream",{serializeStream:function(e){return Yd.Readable.from(r9(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
13
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=oM(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return jo.info(`finished installModules with response ${i}`),i}a(l8,"installModules");function oM(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
14
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(oM,"parseNPMStdErr");async function _8(e){jo.info(`starting auditModules for request: ${e}`);let t=cM(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r}=e;await Cd(),await aM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=wd.join(tT,o);s[o]={npm_output:null,npm_error:null};try{let u=await nu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=oM(u.stderr)}}return jo.info(`finished auditModules with response ${s}`),s}a(_8,"auditModules");async function Cd(){try{return await nu("npm -v"),!0}catch{throw zo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jo.BAD_REQUEST,void 0,void 0,!0)}}a(Cd,"checkNPMInstalled");async function aM(e){if(!Array.isArray(e)||e.length===0)throw zo(new Error,"projects argument must be an array with at least 1 element",Jo.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=wd.join(tT,i.toString());if(!await sM.pathExists(o)){t.push(i);continue}let u=wd.join(o,"package.json");await sM.pathExists(u)||r.push(i)}if(t.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jo.BAD_REQUEST,void 0,void 0,!0)}a(aM,"checkProjectPaths");function cM(e){let t=Id.object({projects:Id.array().min(1).items(Id.string()).required(),dry_run:Id.boolean().default(!1)});return i8.validateBySchema(e,t)}a(cM,"modulesValidator")});var sT=T((Kde,EM)=>{"use strict";var Xo=require("fs-extra"),rT=require("path"),Ld=q(),lM=V(),Ud=N(),fM=j(),d8=Rr();EM.exports=f8;async function f8(){let e=E8(),t=fM.get(Ud.CONFIG_PARAMS.ROOTPATH),r=rT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Ud.PACKAGE_ROOT}},n=rT.join(t,"node_modules");await Xo.ensureDir(n);let i,o=!0,c=!1;try{i=await Xo.readJson(r)}catch(u){if(lM.isEmptyOrZeroLength(e))return;if(u.code!==Ud.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!lM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await _M(_);s.dependencies[u]=l+_}if(!o){Ld.notify("Installing components"),await dM(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await _M(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Ld.notify("Removing component",u),c=!0);c&&(Ld.notify("Updating components."),await dM(r,s,i))}a(f8,"installComponents");function E8(){let e=d8.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(E8,"getComponentsConfig");async function _M(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":rT.extname(e)||await Xo.pathExists(e)?"file:":"github:"}a(_M,"getPkgPrefix");async function dM(e,t,r){Ld.trace("npm installing components package.json",t),await Xo.writeFile(e,JSON.stringify(t,null," "));try{await Dd().installAllRootModules(fM.get(Ud.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Xo.writeFile(e,JSON.stringify(r,null," ")):await Xo.unlink(e),s}}a(dM,"installPackages")});var oT=T((zde,SM)=>{"use strict";var Le=require("fs-extra"),nT=require("fast-glob"),le=require("path"),mM=require("tar-fs"),Qde=require("uuid").v4,iT=require("normalize-path"),Vs=rM(),St=q(),Pe=N(),it=j(),iu=Rr(),h8=V(),{PACKAGE_ROOT:m8}=N(),{handleHDBError:Tt,hdb_errors:p8}=X(),{basename:S8}=require("path"),T8=sT(),pM=j(),R8=N(),{Readable:g8}=require("stream"),{isMainThread:A8}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Rt}=p8,O8=le.join(m8,"application-template"),hM=le.join(it.get(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function N8(){St.trace("getting custom api status");let e={};try{e={port:it.get(Pe.CONFIG_PARAMS.HTTP_PORT),directory:it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,Fi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(N8,"customFunctionsStatus");function b8(){St.trace("getting custom api endpoints");let e={},t=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT);try{nT.sync(iT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:nT.sync(iT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:nT.sync(iT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Fi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(b8,"getCustomFunctions");function y8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("getting custom api endpoint file content");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Fi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(y8,"getCustomFunction");function I8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("setting custom function file content");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Fi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(I8,"setCustomFunction");function w8(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function file");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Fi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a(w8,"dropCustomFunction");function C8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("adding component");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(O8,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Fi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(C8,"addComponent");function D8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function project");let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=it.get(Pe.CONFIG_PARAMS.APPS);if(!h8.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return iu.updateConfigValue(Pe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Fi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(D8,"dropCustomFunctionProject");async function L8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;St.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Pe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(it.get(Pe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Pe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(hM);let i=le.join(hM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),mM.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(L8,"packageComponent");async function U8(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(St.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=g8.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(mM.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await iu.addConfig(s,{package:i}),!n){await T8();let f=pM.get(R8.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(A8)return;let c=new Map;c.isWorker=!0;let u=(Pd(),Z(Md)),_;u.setErrorReporter(f=>_=f);let l=S8(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return St.info("Installed component"),`Successfully deployed: ${s}`}a(U8,"deployComponent");async function M8(){let e=iu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),{name:it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(it.get(Pe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Pd(),Z(Md)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(M8,"getComponents");async function P8(e){let t=Vs.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=iu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(pM.get(Pe.CONFIG_PARAMS.ROOTPATH),"node_modules"):it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Pe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(P8,"getComponentFile");async function v8(e){let t=Vs.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(v8,"setComponentFile");async function B8(e){let t=Vs.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(it.get(Pe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),iu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(B8,"dropComponent");SM.exports={customFunctionsStatus:N8,getCustomFunctions:b8,getCustomFunction:y8,setCustomFunction:I8,dropCustomFunction:w8,addComponent:C8,dropCustomFunctionProject:D8,packageComponent:L8,deployComponent:U8,getComponents:M8,getComponentFile:P8,setComponentFile:v8,dropComponent:B8}});var aT=T((jde,RM)=>{"use strict";var $s=require("joi"),TM=He();RM.exports={readTransactionLogValidator:H8,deleteTransactionLogsBeforeValidator:q8};function H8(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),from:$s.date().timestamp(),to:$s.date().timestamp(),limit:$s.number().min(1)});return TM.validateBySchema(e,t)}a(H8,"readTransactionLogValidator");function q8(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return TM.validateBySchema(e,t)}a(q8,"deleteTransactionLogsBeforeValidator")});var Bd=T((Zde,bM)=>{"use strict";var cT=N(),vd=$e(),gM=V(),AM=j(),OM=sn(),{handleHDBError:Zo,hdb_errors:F8}=X(),{HTTP_STATUS_CODES:ea}=F8,{readTransactionLogValidator:G8,deleteTransactionLogsBeforeValidator:x8}=aT(),NM="This operation relies on clustering and cannot run with it disable.",k8="Logs successfully deleted from transaction log.",V8="All logs successfully deleted from transaction log.";bM.exports={readTransactionLog:$8,deleteTransactionLogsBefore:Y8};async function*$8(e){let t=G8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!AM.get(cT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,NM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=gM.checkSchemaTableExist(r,s);if(n)throw Zo(new Error,n,ea.NOT_FOUND,void 0,void 0,!0);let i=OM.createNatsTableStreamName(r,s),o=await vd.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===cT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a($8,"readTransactionLog");async function Y8(e){let t=x8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!AM.get(cT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,NM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=gM.checkSchemaTableExist(r,s);if(i)throw Zo(new Error,i,ea.NOT_FOUND,void 0,void 0,!0);let o=OM.createNatsTableStreamName(r,s),{jsm:c}=await vd.getNATSReferences(),u=await vd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=k8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=V8):d=(await vd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(Y8,"deleteTransactionLogsBefore")});var IM=T((tfe,yM)=>{"use strict";var uT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};yM.exports=uT});var CM=T((sfe,wM)=>{"use strict";var lT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};wM.exports=lT});var dT=T((ife,LM)=>{"use strict";var DM=IM(),K8=CM(),{HDB_ERROR_MSGS:W8}=dr(),_T=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=W8.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 DM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new K8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new DM(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}};LM.exports=_T});var Gd=T((afe,WM)=>{"use strict";var fT=pr(),Hd=Gr(),zr=Dc(),cu=vn(),ET=qn(),Q8=Ip(),z8=VC(),uu=xr(),qd=Bp(),ft=q(),J8=Fp(),j8=Z_(),X8=TS(),Z8=sd(),e6=RS(),t6=gS(),r6=NS(),s6=yS(),hT=CS(),hn=V(),n6=GL(),mT=PS(),PM=Rd(),Qr=N(),vM=GU(),i6=Go(),BM=Pc(),HM=(bd(),Z(eu)),qM=Rr(),wr=oT(),o6=require("alasql"),FM=Bd(),GM=Dd(),xM=dT(),{handleHDBError:or,hdb_errors:kM}=X(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:ou}=kM,v=new Map,VM="delete",si="insert",mn="read",Gi="update",au="describe",UM=cu.describeSchema.name,MM=cu.describeTable.name,$M={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},a6="catchup",c6="handleGetJob",u6="handleGetJobsByStartDate",Fd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},l6=[zr.createTable.name,zr.createAttribute.name,zr.dropTable.name,zr.dropAttribute.name],YM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(fT.insert.name,new F(!1,[si]));v.set(fT.update.name,new F(!1,[Gi]));v.set(fT.upsert.name,new F(!1,[si,Gi]));v.set(Hd.searchByConditions.name,new F(!1,[mn]));v.set(Hd.searchByHash.name,new F(!1,[mn]));v.set(Hd.searchByValue.name,new F(!1,[mn]));v.set(Hd.search.name,new F(!1,[mn]));v.set(zr.createSchema.name,new F(!0,[]));v.set(zr.createTable.name,new F(!0,[]));v.set(zr.createAttribute.name,new F(!1,[si]));v.set(zr.dropSchema.name,new F(!0,[]));v.set(zr.dropTable.name,new F(!0,[]));v.set(zr.dropAttribute.name,new F(!0,[]));v.set(cu.describeSchema.name,new F(!1,[mn]));v.set(cu.describeTable.name,new F(!1,[mn]));v.set(ET.deleteRecord.name,new F(!1,[VM]));v.set(uu.addUser.name,new F(!0,[]));v.set(uu.alterUser.name,new F(!0,[]));v.set(uu.dropUser.name,new F(!0,[]));v.set(uu.listUsersExternal.name,new F(!0,[]));v.set(qd.listRoles.name,new F(!0,[]));v.set(qd.addRole.name,new F(!0,[]));v.set(qd.alterRole.name,new F(!0,[]));v.set(qd.dropRole.name,new F(!0,[]));v.set(J8.name,new F(!0,[]));v.set(j8.name,new F(!0,[]));v.set(X8.name,new F(!0,[]));v.set(Z8.name,new F(!0,[]));v.set(e6.name,new F(!0,[]));v.set(t6.name,new F(!0,[]));v.set(hT.setRoutes.name,new F(!0,[]));v.set(hT.getRoutes.name,new F(!0,[]));v.set(hT.deleteRoutes.name,new F(!0,[]));v.set(qM.setConfiguration.name,new F(!0,[]));v.set(r6.clusterStatus.name,new F(!0,[]));v.set(s6.name,new F(!0,[]));v.set(mT.getFingerprint.name,new F(!0,[]));v.set(mT.setLicense.name,new F(!0,[]));v.set(ET.deleteFilesBefore.name,new F(!0,[]));v.set(ET.deleteAuditLogsBefore.name,new F(!0,[]));v.set(PM.restart.name,new F(!0,[]));v.set(PM.restartService.name,new F(!0,[]));v.set(Q8.name,new F(!0,[]));v.set(z8.name,new F(!0,[mn]));v.set(i6.systemInformation.name,new F(!0,[]));v.set(qM.getConfiguration.name,new F(!0,[]));v.set(FM.readTransactionLog.name,new F(!0,[]));v.set(FM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(GM.installModules.name,new F(!0,[]));v.set(GM.auditModules.name,new F(!0,[]));v.set(BM.createTokens.name,new F(!1,[]));v.set(BM.refreshOperationToken.name,new F(!1,[]));v.set(HM.login.name,new F(!1,[]));v.set(HM.logout.name,new F(!1,[]));v.set(wr.customFunctionsStatus.name,new F(!0,[]));v.set(wr.getCustomFunctions.name,new F(!0,[]));v.set(wr.getComponents.name,new F(!0,[]));v.set(wr.getComponentFile.name,new F(!0,[]));v.set(wr.setComponentFile.name,new F(!0,[]));v.set(wr.dropComponent.name,new F(!0,[]));v.set(wr.getCustomFunction.name,new F(!0,[]));v.set(wr.setCustomFunction.name,new F(!0,[]));v.set(wr.dropCustomFunction.name,new F(!0,[]));v.set(wr.addComponent.name,new F(!0,[]));v.set(wr.dropCustomFunctionProject.name,new F(!0,[]));v.set(wr.packageComponent.name,new F(!0,[]));v.set(wr.deployComponent.name,new F(!0,[]));v.set(mT.getRegistrationInfo.name,new F(!1,[]));v.set(uu.userInfo.name,new F(!1,[]));v.set(cu.describeAll.name,new F(!1,[]));v.set(c6,new F(!1,[]));v.set(u6,new F(!0,[]));v.set(a6,new F(!0,[]));v.set(Fd.CSV_DATA_LOAD,new F(!1,[si,Gi]));v.set(Fd.CSV_URL_LOAD,new F(!1,[si,Gi]));v.set(Fd.CSV_FILE_LOAD,new F(!1,[si,Gi]));v.set(Fd.IMPORT_FROM_S3,new F(!1,[si,Gi]));v.set(YM.EXPORT_TO_S3,new F(!0,[]));v.set(YM.EXPORT_LOCAL,new F(!0,[]));v.set(Qr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[VM]));v.set(Qr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[mn]));v.set(Qr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[si]));v.set(Qr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[Gi]));WM.exports={verifyPerms:d6,verifyPermsAst:_6,verifyBulkLoadAttributePerms:E6};function _6(e,t,r){if(hn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(hn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(hn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new xM,n=new n6(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ft.info("No schemas defined in verifyPermsAst(), will not continue."),or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&$M[r])throw or(new Error,Ct.DROP_SYSTEM,ou.FORBIDDEN);if(c&&!u)return null;let _=vM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof o6.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=KM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=ST(t.role.permission,f,d[E]);pT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(_6,"verifyPermsAst");function d6(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),or(new Error,Ct.DEFAULT_INVALID_REQUEST,ou.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new xM;if(hn.isEmptyOrZeroLength(e.hdb_user.role)||hn.isEmptyOrZeroLength(e.hdb_user.role.permission))return ft.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ct.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Qr.SYSTEM_SCHEMA_NAME)||n===Qr.SYSTEM_SCHEMA_NAME;if(l&&$M[r])throw or(new Error,Ct.DROP_SYSTEM,ou.FORBIDDEN);if(u&&!l||_===!0&&(r===zr.createSchema.name||r===zr.dropSchema.name))return null;if(l6.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=vM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===UM||r===MM){if(n===Qr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===UM&&(!d[n]||!d[n][au]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===MM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][au]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=KM(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Qr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Qr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Qr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=p)}let E=f6(e),h=ST(e.hdb_user.role.permission,n,i);return pT(E,h,r,i,n,c,s),c.getPermsResponse()}a(d6,"verifyPerms");function KM(e,t,r,s,n){if(hn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),or(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw ft.info(`operation ${t} not found.`),or(new Error,Ct.OP_NOT_FOUND(t),ou.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][au]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[au]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!hn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(ft.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),or(kM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(KM,"hasPermissions");function pT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),or(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),or(new Error);if(hn.isEmptyOrZeroLength(t))return ft.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[au]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Qr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==mn)throw or(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,ou.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(pT,"checkAttributePerms");function f6(e){let t=new Set;try{if(e.action)return t;if(e.operation===Qr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){ft.info(r)}return t}a(f6,"getRecordAttributes");function ST(e,t,r){let s=new Map;if(hn.isEmpty(e))return ft.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ft.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(ST,"getAttributePermissions");function E6(e,t,r,s,n,i,o){let c=new Set(i),u=ST(e,s,n);pT(c,u,t,n,s,o,r)}a(E6,"verifyBulkLoadAttributePerms")});var kd=T((ufe,XM)=>{"use strict";XM.exports={evaluateSQL:I6,processAST:jM,convertSQLToAST:JM,checkASTPermissions:zM};var h6=pr(),QM=require("util"),m6=QM.callbackify(h6.insert),p6=Gr().search,S6=Bw().update,T6=QM.callbackify(S6),R6=qw().convertDelete,ni=require("alasql"),g6=Gd(),xd=q(),A6=g_(),O6=V(),lu=N(),{hdb_errors:N6,handleHDBError:TT}=X(),{HTTP_STATUS_CODES:RT}=N6;A6(ni);var b6=403,y6="There was a problem performing this insert. Please check the logs and try again.",gT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function I6(e,t){let r=e.parsed_sql_object;if(!r){r=JM(e.sql);let s,n=r.ast.statements[0];if(n instanceof ni.yy.Insert?s=n.into.databaseid:n instanceof ni.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ni.yy.Update||n instanceof ni.yy.Delete?s=n.table.databaseid:xd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ni.yy.Select)&&O6.isEmptyOrZeroLength(s))return t("No schema specified",null)}jM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(I6,"evaluateSQL");function zM(e,t){let r;try{r=g6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(zM,"checkASTPermissions");function JM(e){let t=new gT;if(!e)throw TT(new Error,"The 'sql' parameter is missing from the request body",RT.BAD_REQUEST);try{let r=e.trim(),s=ni.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
15
|
+
`);throw s[1]?TT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,RT.BAD_REQUEST):TT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",RT.BAD_REQUEST)}return t}a(JM,"convertSQLToAST");function jM(e,t,r){try{let s=w6;if(!e.bypass_auth&&!t.permissions_checked){let i=zM(e,t);if(i&&i.length>0)return r(b6,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case lu.VALID_SQL_OPS_ENUM.SELECT:s=p6,n=t.ast.statements[0];break;case lu.VALID_SQL_OPS_ENUM.INSERT:s=C6;break;case lu.VALID_SQL_OPS_ENUM.UPDATE:s=T6;break;case lu.VALID_SQL_OPS_ENUM.DELETE:s=R6;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(jM,"processAST");function w6(e,t){xd.info(e),t("unknown sql statement")}a(w6,"nullFunction");function C6({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=D6(i,e.values)}catch(o){return r(o)}m6(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){xd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(C6,"convertInsert");function D6(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]]=ni.compile(`SELECT ${n.toString()} AS [${lu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw xd.error(r),new Error(y6)}}a(D6,"createDataObjects")});var AT=T((_fe,eP)=>{"use strict";var{S3:L6,GetObjectCommand:U6}=require("@aws-sdk/client-s3");eP.exports={getFileStreamFromS3:M6,getS3AuthObj:ZM};async function M6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ZM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new U6(r))).Body}a(M6,"getFileStreamFromS3");function ZM(e,t,r){return new L6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ZM,"getS3AuthObj")});var Vd=T((ffe,lP)=>{"use strict";var sP=Gr(),P6=kd(),v6=AT(),{AsyncParser:B6,Transform:H6}=require("json2csv"),du=require("stream"),Cr=V(),OT=require("fs-extra"),q6=require("path"),Jr=q(),{promisify:nP}=require("util"),_u=V(),{handleHDBError:ot,hdb_errors:F6}=X(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:at}=F6,{streamAsJSON:G6}=VE(),{Upload:x6}=require("@aws-sdk/lib-storage"),tP=["search_by_value","search_by_hash","sql"],rP=["json","csv"],iP="json",oP="csv",k6="Successfully exported JSON locally.",V6="Successfully exported CSV locally.",$6=1e3,Y6=sP.searchByHash,K6=sP.searchByValue,W6=nP(P6.evaluateSQL),Q6=nP(du.finished);lP.exports={export_to_s3:X6,export_local:z6,toCsvStream:aP};async function z6(e){Jr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=cP(e);if(!Cr.isEmpty(t))throw Jr.error(t),ot(new Error,t,at.BAD_REQUEST,void 0,void 0,!0);if(Cr.isEmpty(e.path))throw Jr.error(ar.MISSING_VALUE("path")),ot(new Error,ar.MISSING_VALUE("path"),at.BAD_REQUEST,void 0,void 0,!0);let r=(Cr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(q6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Cr.buildFolderPath(e.path,r);await J6(e.path);let n=await uP(e);return await j6(s,e.format,n)}a(z6,"export_local");async function J6(e){if(Jr.trace("in confirmPath"),Cr.isEmptyOrZeroLength(e))throw ot(new Error,`Invalid path: ${e}`,at.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await OT.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,Jr.error(s),ot(new Error,s,at.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Jr.error(r),ot(new Error,r,at.BAD_REQUEST,void 0,void 0,!0)}return!0}a(J6,"confirmPath");async function j6(e,t,r){if(Jr.trace("in saveToLocal"),_u.isEmptyOrZeroLength(e))throw ot(new Error,ar.INVALID_VALUE("file_path"),at.BAD_REQUEST,void 0,void 0,!0);if(_u.isEmptyOrZeroLength(t))throw ot(new Error,ar.INVALID_VALUE("Source format"),at.BAD_REQUEST,void 0,void 0,!0);if(_u.isEmpty(r))throw ot(new Error,ar.NOT_FOUND("Data"),at.BAD_REQUEST,void 0,void 0,!0);if(t===iP){let s=OT.createWriteStream(e);return G6(r).pipe(s),await Q6(s),{message:k6,path:e}}else if(t===oP){let s=OT.createWriteStream(e),n=du.Readable.from(r),i={},o={objectMode:!0};return await new B6(i,o).fromInput(n).toOutput(s).promise(!1),{message:V6,path:e}}throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST)}a(j6,"saveToLocal");async function X6(e){if(!e.s3||Object.keys(e.s3).length===0)throw ot(new Error,ar.MISSING_VALUE("S3 object"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ot(new Error,ar.MISSING_VALUE("aws_access_key_id"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ot(new Error,ar.MISSING_VALUE("aws_secret_access_key"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.bucket))throw ot(new Error,ar.MISSING_VALUE("bucket"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.key))throw ot(new Error,ar.MISSING_VALUE("key"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.region))throw ot(new Error,ar.MISSING_VALUE("region"),at.BAD_REQUEST);let t=cP(e);if(!Cr.isEmpty(t))throw ot(new Error,t,at.BAD_REQUEST);Jr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await uP(e)}catch(u){throw Jr.error(u),u}let s,n=await v6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new du.PassThrough;if(e.format===oP){i=e.s3.key+".csv";let u=aP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===iP){i=e.s3.key+".json";let u=new du.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%$6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST);return new x6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(X6,"export_to_s3");function aP(e){let t=du.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new H6(r,s);return t.pipe(n)}a(aP,"toCsvStream");function cP(e){if(Jr.trace("in exportCoreValidation"),Cr.isEmpty(e.format))return"format missing";if(rP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${rP.join(", ")}`;let t=e.search_operation.operation;if(Cr.isEmpty(t))return"search_operation.operation missing";if(tP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${tP.join(", ")}`}a(cP,"exportCoreValidation");async function uP(e){Jr.trace("in getRecords");let t,r;if(_u.isEmpty(e.search_operation)||_u.isEmptyOrZeroLength(e.search_operation.operation))throw ot(new Error,ar.INVALID_VALUE("Search operation"),at.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=K6;break;case"search_by_hash":t=Y6;break;case"sql":t=W6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Jr.error(r),ot(new Error,r,at.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(uP,"getRecords")});var SP={};Je(SP,{contentTypes:()=>bT,findBestSerializer:()=>Kd,getDeserializer:()=>ta,registerContentHandlers:()=>yT,serialize:()=>Wd,serializeMessage:()=>ri});function Z6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function yT(e){e.register(t9,{serializers:[{regex:/^application\/json$/,serializer:$d.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new xi.EncoderStream(fu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yd.Readable.from((0,Ys.encodeIter)(t,fu)):(0,Ys.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,NT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ys.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,xi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Kd(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Dt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Dt.keys()).join(", "))}};s=Dt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Wd(e,t,r){let s=dP&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Kd(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,pn.createBrotliCompress)({params:{[pn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?pn.constants.BROTLI_MODE_TEXT:pn.constants.BROTLI_MODE_GENERIC,[pn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>dP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,pn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function ri(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Kd(t);return r=t.serialize=s.serializer.serialize,r(e)}function r9(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function ta(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Dt.get(e)?.deserialize||fP(e,s);return o=>r9(o).then(i)}return e&&Dt.get(e)?.deserialize||fP(e,s)}function fP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function s9(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var $d,NT,Ys,xi,pn,Yd,EP,hP,mP,fu,Dt,bT,_P,pP,e9,t9,dP,Qo=Te(()=>{$d=L(VE()),NT=L(Vd()),Ys=require("msgpackr"),xi=require("cbor-x"),pn=require("zlib"),Yd=require("stream");Hr();EP=require("../index"),hP=L(j()),mP=L(N()),fu={useRecords:!1,useToJSON:!0},Dt=new Map,bT=Dt;lt.contentTypes=bT;(0,EP._assignPackageExport)("contentTypes",bT);Dt.set("application/json",{serializeStream:$d.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});_P=new xi.Encoder(fu);Dt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xi.EncoderStream(fu).end(e)},serialize:_P.encode,deserialize:_P.decode,q:1});Dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yd.Readable.from((0,Ys.encodeIter)(e,fu)):(0,Ys.pack)(e)},serialize:Ys.pack,deserialize:Ys.unpack,q:.9});Dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,NT.toCsvStream)(e)},q:.1});Dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Dt.set("text/event-stream",{serializeStream:function(e){return Yd.Readable.from(s9(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
16
16
|
`),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
|
|
17
17
|
`}return e.id&&(t+="id: "+e.id+`
|
|
18
18
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
`:`data: ${e}
|
|
23
23
|
|
|
24
|
-
`},q:.8});Dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});pP={type:"application/json",serializeStream:$d.streamAsJSON,serialize:JSON.stringify,deserialize:X6,q:.8};Dt.set("*/*",pP);Dt.set("",pP);a(X6,"tryJSONParse");a(yT,"registerContentHandlers");Z6=require("fastify-plugin"),e9=Z6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Kd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Kd,"findBestSerializer");dP=hP.default.get(mP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Wd,"serialize");a(ri,"serializeMessage");a(t9,"streamToBuffer");a(ta,"getDeserializer");a(fP,"deserializerUnknownType");a(r9,"transformIterable")});var Qd={};Je(Qd,{start:()=>i9});async function n9(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&fl(e);let n=new Hi;try{e.responseHeaders=n;let i=e.url.slice(1),o=wT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await ke(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ta(r["content-type"],!0)(e.body)}catch(p){throw new hu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new hu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new hu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,IT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){s9[0]=f;let p=String.fromCharCode(34,(Lt[0]&63)+62,(Lt[0]>>6)+(Lt[1]<<2&63)+62,(Lt[1]>>4)+(Lt[2]<<4&63)+62,(Lt[2]>>2)+62,(Lt[3]&63)+62,(Lt[3]>>6)+(Lt[4]<<2&63)+62,(Lt[4]>>4)+(Lt[5]<<4&63)+62,(Lt[5]>>2)+62,(Lt[6]&63)+62,(Lt[6]>>6)+(Lt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),IT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Wd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ki.warn(i):ki.info(i):ki.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Wd(i.contentType?i:i.toString(),e,o),o}}function i9(e){IT=e,!TP&&(TP=!0,wT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return n9(t,r)}),e.server.ws(async(t,r,s)=>{Eu++;let n=new rs;RP||(RP=!0,Oc(l=>{Eu>0&&l.push({metric:"ws-connections",connections:Eu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ki.warn(l)});let o;t.on("message",a(function(d){o||(o=ta(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Eu--,xr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=wT.getMatch(u);if(xr(!!_,"connection","ws","connect"),!_)t.send(ri(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(h=>({count:h.count,total:Eu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await ke(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ri(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ki,hu,Lt,s9,IT,TP,wT,RP,Eu,gP=Te(()=>{Qo();$n();ki=L(q()),hu=L(X());El();va();fi();eT();Lt=new Uint8Array(8),s9=new Float64Array(Lt.buffer,0,1),IT={};a(n9,"http");Eu=0;a(i9,"start")});var CT=T((Nfe,AP)=>{var{recordAction:zd,recordActionBinary:o9}=($n(),Z(I_)),a9=require("fastify-plugin"),c9=200;AP.exports=a9(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),zd(o,"duration",_,d,l),o9(n.raw.statusCode<400,"success",_,d,l);let f=c9;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{zd(performance.now()-c,"transfer",_,d,l),zd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,zd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var MT=T((bfe,IP)=>{var ef=require("clone"),tf=He(),u9=V(),Xd=N(),l9=q(),Jd=require("fs"),DT=require("joi"),{string:Zd}=DT.types(),{hdb_errors:_9,handleHDBError:mu}=X(),{HDB_ERROR_MSGS:d9,HTTP_STATUS_CODES:jd}=_9,{common_validators:ra}=Ds(),OP=1e9,NP=" is required",f9=["insert","update","upsert"],LT={database:{presence:!1,format:ra.schema_format,length:ra.schema_length},schema:{presence:!1,format:ra.schema_format,length:ra.schema_length},table:{presence:!0,format:ra.schema_format,length:ra.schema_length},action:{inclusion:{within:f9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},E9={schema:Zd.required(),table:Zd.required(),action:Zd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:h9,AWS_SECRET:m9,AWS_BUCKET:p9,AWS_FILE_KEY:S9,REGION:T9}=Xd.S3_BUCKET_AUTH_KEYS,R9={s3:{presence:!0},[`s3.${h9}`]:{presence:!0,type:"String"},[`s3.${m9}`]:{presence:!0,type:"String"},[`s3.${p9}`]:{presence:!0,type:"String"},[`s3.${S9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${T9}`]:{presence:!0,type:"String"}},bP=ef(LT);bP.data.presence={message:NP};var yP=ef(LT);yP.file_path.presence={message:NP};var g9=Object.assign(ef(LT),R9),UT=ef(E9);UT.csv_url=Zd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();UT.passthrough_headers=DT.object();function A9(e){let t=tf.validateObject(e,bP);return rf(e,t)}a(A9,"dataObject");function O9(e){let t=tf.validateBySchema(e,DT.object(UT));return rf(e,t)}a(O9,"urlObject");function N9(e){let t=tf.validateObject(e,yP);return rf(e,t)}a(N9,"fileObject");function b9(e){let t=tf.validateObject(e,g9);return rf(e,t)}a(b9,"s3FileObject");function rf(e,t){if(!t){let r=u9.checkGlobalSchemaTable(e.schema,e.table);if(r)return mu(new Error,r,jd.BAD_REQUEST);if(e.operation===Xd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Jd.accessSync(e.file_path,Jd.constants.R_OK|Jd.constants.F_OK)}catch(s){return s.code===Xd.NODE_ERROR_CODES.ENOENT?mu(s,`No such file or directory ${s.path}`,jd.BAD_REQUEST):s.code===Xd.NODE_ERROR_CODES.EACCES?mu(s,`Permission denied ${s.path}`,jd.BAD_REQUEST):mu(s)}try{let s=Jd.statSync(e.file_path).size;if(s>OP)return mu(new Error,d9.MAX_FILE_SIZE_ERR(s,OP),jd.BAD_REQUEST)}catch(s){l9.error(s),console.error(s)}}}return t}a(rf,"postValidateChecks");IP.exports={dataObject:A9,urlObject:O9,fileObject:N9,s3FileObject:b9}});var PT=T((Ife,wP)=>{"use strict";var pu=q(),sf=N();async function y9(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===sf.OPERATIONS_ENUM.INSERT||t.operation===sf.OPERATIONS_ENUM.UPDATE||t.operation===sf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===sf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(pu.info(i.message),i):i.http_resp_msg?(pu.error(`Error calling operation: ${e.name}`),pu.error(i.http_resp_msg),i):(pu.error(`Error calling operation: ${e.name}`),pu.error(i),i)}}a(y9,"callOperationFunctionAsAwait");wP.exports={callOperationFunctionAsAwait:y9}});var DP=T((Cfe,CP)=>{"use strict";var vT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},BT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};CP.exports={BulkLoadFileObject:vT,BulkLoadDataObject:BT}});var UP=T((Lfe,LP)=>{"use strict";var HT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};LP.exports=HT});var VT=T((Hfe,zP)=>{"use strict";var nf=pr(),af=MT(),I9=require("needle"),Ts=N(),Mfe=De(),sa=V(),{handleHDBError:Ke,hdb_errors:xP}=X(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:$i}=xP,na=q(),qT=require("papaparse");sa.promisifyPapaParse();var Rs=require("fs-extra"),w9=require("path"),{chain:MP}=require("stream-chain"),PP=require("stream-json/streamers/StreamArray"),vP=require("stream-json/utils/Batch"),BP=require("stream-chain/utils/comp"),{finished:HP}=require("stream"),C9=j(),kP=PT(),D9=AT(),{BulkLoadFileObject:GT,BulkLoadDataObject:L9}=DP(),xT=dT(),{verifyBulkLoadAttributePerms:VP}=Gd(),Pfe=UP(),vfe=$e(),Bfe=rn(),{databases:U9}=(fe(),Z(Ce)),{coerceType:M9}=(cf(),Z($T)),qP="No records parsed from csv file.",Vi=`${C9.get("HDB_ROOT")}/tmp`,{schema_regex:P9}=Ds(),FP=1024*1024*2,GP=5e3,v9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};zP.exports={csvDataLoad:B9,csvURLLoad:H9,csvFileLoad:q9,importFromS3:F9};async function B9(e,t){let r=af.dataObject(e);if(r)throw Ke(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=KP(e.schema,e.table),i=qT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:FT.bind(null,n),dynamicTyping:!1}),o=new xT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&VP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Ke(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new L9(e.action,e.schema,e.table,i.data);return s=await kP.callOperationFunctionAsAwait(WP,u,null),s.message===qP?qP:QP(s.records,s.number_written)}catch(n){throw Yi(n)}}a(B9,"csvDataLoad");async function H9(e){let t=af.urlObject(e);if(t)throw Ke(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Vi}/${r}`;try{await G9(e,r)}catch(n){throw na.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),Ke(n,$i(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new GT(this.job_operation_function.name,e.action,e.schema,e.table,s,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await kT(n);return await of(s),i}catch(n){throw await of(s),Yi(n)}}a(H9,"csvURLLoad");async function q9(e){let t=af.fileObject(e);if(t)throw Ke(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new GT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await kT(r)}catch(s){throw Yi(s)}}a(q9,"csvFileLoad");async function F9(e){let t=af.s3FileObject(e);if(t)throw Ke(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=w9.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Vi}/${n}`;let i=new GT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await x9(n,e);let o=await kT(i);return await of(r),o}catch(s){throw await of(r),Yi(s)}}a(F9,"importFromS3");async function G9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await I9("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ke(s,n,s.statusCode,Ts.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}V9(r,e.csv_url),await k9(t,r.raw)}a(G9,"downloadCSVFile");async function x9(e,t){try{let r=`${Vi}/${e}`;await Rs.mkdirp(Vi),await Rs.writeFile(`${Vi}/${e}`,"",{flag:"a+"});let s=await Rs.createWriteStream(r),n=await D9.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(){na.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw na.error(ft.S3_DOWNLOAD_ERR+" - "+r),Ke(r,$i(ft.S3_DOWNLOAD_ERR))}}a(x9,"downloadFileFromS3");async function k9(e,t){try{await Rs.mkdirp(Vi),await Rs.writeFile(`${Vi}/${e}`,t)}catch(r){throw na.error(ft.WRITE_TEMP_FILE_ERR),Ke(r,$i(ft.DEFAULT_BULK_LOAD_ERR))}}a(k9,"writeFileToTempFolder");async function of(e){if(e)try{await Rs.access(e),await Rs.unlink(e)}catch{na.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(of,"deleteTempFile");function V9(e,t){if(e.statusCode!==xP.HTTP_STATUS_CODES.OK)throw Ke(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!v9[e.headers["content-type"]])throw Ke(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw Ke(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(V9,"validateURLResponse");async function kT(e){try{let t;switch(e.file_type){case Ts.VALID_S3_FILE_TYPES.CSV:t=await $9(e);break;case Ts.VALID_S3_FILE_TYPES.JSON:t=await Y9(e);break;default:throw Ke(new Error,ft.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ft.INVALID_FILE_EXT_ERR(e))}return QP(t.records,t.number_written)}catch(t){throw Yi(t)}}a(kT,"fileLoad");async function $P(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 nf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&VP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ke(c);r(u)}}a($P,"validateChunk");async function YP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!sa.isEmpty(c)&&!sa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await kP.callOperationFunctionAsAwait(WP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ke(c,$i(ft.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(YP,"insertChunk");async function $9(e){let t={records:0,number_written:0},r=KP(e.schema,e.table);try{let s=new xT,n=Rs.createReadStream(e.file_path,{highWaterMark:FP});n.setEncoding("utf8"),await qT.parsePromise(n,$P.bind(null,e,s),FT.bind(null,r));let i=s.getPermsResponse();if(i)throw Ke(new Error,i,Ut.BAD_REQUEST);return n=Rs.createReadStream(e.file_path,{highWaterMark:FP}),n.setEncoding("utf8"),await qT.parsePromise(n,YP.bind(null,e,t),FT.bind(null,r)),n.destroy(),t}catch(s){throw Ke(s,$i(ft.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a($9,"callPapaParse");function KP(e,t){let r=U9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>M9(i,n));return s}a(KP,"createTransformMap");function FT(e,t,r){let s=e.get(r);return s?s(t):sa.autoCast(t)}a(FT,"typeFunction");async function Y9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new xT,n=MP([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),PP.withParser(),c=>c.value,new vP({batchSize:GP}),BP(async c=>{await $P(e,s,r,c)})]);await new Promise((c,u)=>{HP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ke(new Error,i,Ut.BAD_REQUEST);let o=MP([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),PP.withParser(),c=>c.value,new vP({batchSize:GP}),BP(async c=>{await YP(e,t,r,c)})]);return await new Promise((c,u)=>{HP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ke(s,$i(ft.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(Y9,"insertJson");async function WP(e){let t={};try{e.data&&e.data.length>0&&K9(e.data[0])?t=await W9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",na.info(t.message))}catch(r){throw Yi(r)}return t}a(WP,"callBulkFileLoad");function K9(e){let t=Object.keys(e);for(let r of t)if(!P9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(K9,"validateColumnNames");async function W9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=nf.insert;break;case"update":i=nf.update;break;case"upsert":i=nf.upsert;break;default:throw Ke(new Error,ft.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ft.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Yi(o)}}a(W9,"bulkFileLoad");function QP(e,t){return`successfully loaded ${t} of ${e} records`}a(QP,"buildResponseMsg");function Yi(e){return Ke(e,$i(ft.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Yi,"buildTopLevelErrMsg")});var jP=T((Ffe,JP)=>{"use strict";var YT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};JP.exports=YT});var ev=T((xfe,ZP)=>{"use strict";var Q9=N(),XP=require("moment"),z9=require("uuid").v4,KT=class{static{a(this,"JobObject")}constructor(){this.id=z9(),this.type=void 0,this.start_datetime=XP().valueOf(),this.created_datetime=XP().valueOf(),this.end_datetime=void 0,this.status=Q9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};ZP.exports=KT});var WT=T((Vfe,ov)=>{"use strict";var J9=require("uuid").v4,sv=pr(),nv=Fr(),j9=vs(),X9=bo(),Z9=jP(),We=N(),e7=ev(),t7=k_(),Jr=q(),r7=Ja(),ia=V(),{promisify:s7}=require("util"),Ki=require("moment"),n7=kd(),uf=MT(),tv=xh(),{deleteTransactionLogsBeforeValidator:i7}=aT(),{handleHDBError:o7,hdb_errors:a7}=X(),{HTTP_STATUS_CODES:c7}=a7,rv=nv.searchByValue,u7=nv.searchByHash,l7=sv.insert,_7=s7(n7.evaluateSQL),d7=sv.update;ov.exports={addJob:h7,updateJob:p7,handleGetJob:f7,handleGetJobsByStartDate:E7,getJobById:iv};async function f7(e){try{let t=await iv(e.id);return ia.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Jr.error("There was an error getting job",t),new Error(r)}}a(f7,"handleGetJob");async function E7(e){try{let t=await m7(e);if(Jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ki(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ki(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Jr.error(r),new Error(r)}}a(E7,"handleGetJobsByStartDate");async function h7(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ia.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Jr.info(l),t.error=l,t}if(!We.JOB_TYPE_ENUM[e.operation])return Jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case We.OPERATIONS_ENUM.CSV_FILE_LOAD:s=uf.fileObject(e);break;case We.OPERATIONS_ENUM.CSV_URL_LOAD:s=uf.urlObject(e);break;case We.OPERATIONS_ENUM.CSV_DATA_LOAD:s=uf.dataObject(e);break;case We.OPERATIONS_ENUM.IMPORT_FROM_S3:s=uf.s3FileObject(e);break;case We.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case We.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=tv(e,"date");break;case We.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=tv(e,"timestamp");break;case We.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=i7(e);break;default:break}if(s)throw o7(s,s.message,c7.BAD_REQUEST,void 0,void 0,!0);let n=new e7;n.type=e.operation===We.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?We.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new j9(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await rv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=J9();try{o=await rv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new r7(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await l7(u)}catch(l){return Jr.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Jr.trace(l)}return t}a(h7,"addJob");async function m7(e){let t=Ki(e.from_date,Ki.ISO_8601),r=Ki(e.to_date,Ki.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 Z9(s,e.hdb_user);try{return await _7(n)}catch(i){throw Jr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(m7,"getJobsInDateRange");async function iv(e){if(ia.isEmptyOrZeroLength(e))return ia.errorizeMessage("Invalid job ID specified.");let t=new X9(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await u7(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),ia.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(iv,"getJobById");async function p7(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ia.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===We.JOB_STATUS_ENUM.COMPLETE||e.status===We.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ki().valueOf());let t=new t7(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await d7(t),r}a(p7,"updateJob")});var dv=T((Yfe,_v)=>{"use strict";var av=V(),cr=N(),S7=require("moment"),lf=VT(),_f=q(),cv=WT(),uv=Vd(),lv=qn(),T7=Ge(),R7=Bd(),QT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function g7(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(av.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(av.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case cr.JOB_TYPE_ENUM.csv_file_load:await Sn(e,lf.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await Sn(e,lf.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await Sn(e,lf.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await Sn(e,lf.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await Sn(e,uv.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Sn(e,uv.export_to_s3);break;case cr.JOB_TYPE_ENUM.delete_files_before:case cr.JOB_TYPE_ENUM.delete_records_before:await Sn(e,lv.deleteFilesBefore);break;case cr.JOB_TYPE_ENUM.delete_audit_logs_before:await Sn(e,lv.deleteAuditLogsBefore);break;case cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Sn(e,R7.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(g7,"parseMessage");async function Sn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=S7().valueOf(),await cv.updateJob(e.job),await A7(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):_f.error(`There was an error running ${t.name} job with id ${e.job.id}`),_f.error(s),e.job.message=s,e.job.status=cr.JOB_STATUS_ENUM.ERROR;try{await cv.updateJob(e.job)}catch(n){throw _f.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Sn,"runJob");async function A7(e){_f.trace("launching job thread:",e),T7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(A7,"launchJobThread");_v.exports={parseMessage:g7,RunnerMessage:QT}});var Ev=T((Wfe,fv)=>{"use strict";var zT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};fv.exports=zT});var Dv=T((zfe,tR)=>{"use strict";var hf=Fr(),XT=kd(),df=VT(),Tn=Dc(),ff=vn(),Tu=qn(),O7=Ip(),Su=Gr(),Ef=Bp(),Mt=oT(),Et=q(),N7=Fp(),b7=Z_(),y7=TS(),I7=sd(),w7=RS(),C7=gS(),D7=NS(),L7=yS(),JT=CS(),hv=Vd(),U7=Gd(),ZT=WT(),P=N(),{hdb_errors:gu,handleHDBError:Ru}=X(),{HTTP_STATUS_CODES:mv}=gu,jT=PS(),pv=Rd(),yv=require("util"),oa=pr(),M7=sn(),P7=Go(),Sv=dv(),Tv=Pc(),Rv=(bd(),Z(eu)),gv=Tr(),Av=Bd(),Ov=Dd(),{setServerUtilities:v7}=(cf(),Z($T)),{CONTEXT:B7}=(ns(),Z(PE)),{_assignPackageExport:H7}=require("../index"),{transformReq:q7}=V(),{server:F7}=(Br(),Z(ro)),G7=PT(),Nv=hf.searchByHash,x7=hf.searchByValue,k7=yv.promisify(hf.search),V7=yv.promisify(XT.evaluateSQL),$7={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=Ev();async function Iv(e,t){try{if(e.body.operation!=="read_log"&&(Et.log_level===P.LOG_LEVELS.INFO||Et.log_level===P.LOG_LEVELS.DEBUG||Et.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Et.info(o)}}catch(s){Et.error(s)}let r=await G7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return $7[e.body.operation]&&M7.setSchemaDataToGlobal(s=>{s&&Et.error(s)}),r}a(Iv,"processLocalTransaction");var bv=K7();tR.exports={chooseOperation:wv,getOperationFunction:Cv,operation:eR,processLocalTransaction:Iv};v7(tR.exports);F7.operation=eR;function wv(e){let t;try{t=Cv(e)}catch(n){throw Et.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=XT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=XT.checkASTPermissions(e,i);if(o)throw Et.error(`${mv.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Ru(new Error,o,gu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=U7.verifyPerms(i,n);if(o)throw Et.error(`${mv.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Ru(new Error,o,gu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Ru(n,"There was an error when trying to choose an operation path")}return r}a(wv,"chooseOperation");function Cv(e){if(Et.trace(`getOperationFunction with operation: ${e.operation}`),bv.has(e.operation))return bv.get(e.operation);throw Ru(new Error,gu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),gu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Cv,"getOperationFunction");H7("operation",eR);function eR(e,t){e.hdb_user=this[B7]?.user,e.bypass_auth=!t;let r=wv(e);return Iv({body:e},r)}a(eR,"operation");async function Y7(e){Et.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await oa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await oa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await oa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Tu.deleteRecord(i);break;default:Et.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Et.info("Invalid operation in transaction"),Et.error(o)}}a(Y7,"catchup");async function Ys(e){q7(e);let t,r;try{r=await ZT.addJob(e),t=r.createdJob,Et.info("addJob result",r);let s=new Sv.RunnerMessage(t,e);return await Sv.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Et.error(n),Ru(s,n)}}a(Ys,"executeJob");function K7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(oa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(oa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(oa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(hf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(Nv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(Nv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(x7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(k7)),e.set(P.OPERATIONS_ENUM.SQL,new H(V7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ys,df.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ys,df.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ys,df.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ys,df.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(Tn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(Tn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(Tn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(Tn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(Tn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(Tn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(Tn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(Tn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(ff.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(ff.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(ff.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(ff.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Tu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Su.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Su.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Su.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Su.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Ef.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Ef.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Ef.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Ef.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Su.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(N7)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(b7)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(y7)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(I7)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(w7)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(C7)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(gv.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(D7.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(L7)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(JT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(JT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(JT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ys,hv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ys,Tu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ys,Tu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ys,hv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(ZT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(ZT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(jT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(jT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(jT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(pv.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(pv.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(Y7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(P7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ys,Tu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(O7)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(Tv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(Tv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(Rv.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(Rv.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(gv.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(Av.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ys,Av.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(Ov.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(Ov.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(Tn.getBackup)),e}a(K7,"initializeOperationFunctionMap")});var pf=T((jfe,Mv)=>{"use strict";var rR=N(),W7=V(),Au=q(),{handleHDBError:sR,hdb_errors:mf}=X(),{isMainThread:Q7}=require("worker_threads"),{Readable:z7}=require("stream"),Lv=require("os"),J7=require("util"),j7=zp(),X7=J7.promisify(j7.authorize),Uv=Dv(),{createGzip:Z7,constants:eee}=require("zlib");function tee(e){let t=`Found an uncaught exception with message: ${e.message}. ${Lv.EOL}Stack: ${e.stack} ${Lv.EOL}Terminating ${Q7?"HDB":"thread"}.`;console.error(t),Au.fatal(t),process.exit(1)}a(tee,"handleServerUncaughtException");function ree(e,t,r){if(Au[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:mf.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(ree,"serverErrorHandler");function see(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=sR(new Error,"Invalid JSON.",mf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(W7.isEmpty(e.body.operation)){let s=sR(new Error,"Request body must include an 'operation' property.",mf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(see,"reqBodyValidationHandler");function nee(e,t,r){let s;e.body.operation!==rR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==rR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==rR.OPERATIONS_ENUM.LOGOUT?X7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Au.warn(n),Au.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(sR(n,i,mf.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(nee,"authHandler");async function iee(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Uv.chooseOperation(e.body);let n=await Uv.processLocalTransaction(e,s);if(n instanceof z7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(Z7({level:eee.Z_BEST_SPEED})))}return n}catch(n){throw Au.error(n),n}}a(iee,"handlePostRequest");Mv.exports={authHandler:nee,handlePostRequest:iee,handleServerUncaughtException:tee,serverErrorHandler:ree,reqBodyValidationHandler:see}});var Hv=T((Zfe,Bv)=>{"use strict";var oee=require("fastify-plugin"),{handlePostRequest:Pv,authHandler:aee,reqBodyValidationHandler:cee}=pf();async function uee(e){e.decorate("hdbCore",{preValidation:[cee,aee],request:t=>vv(Pv(t,response)),requestWithoutAuthentication:(t,r)=>vv(Pv(t,r,!0))})}a(uee,"hdbCore");async function vv(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(vv,"convertAsyncIterators");Bv.exports=oee(uee)});var Fv=T((tEe,qv)=>{"use strict";var nR=require("fs"),aa=j();aa.initSync();var{CONFIG_PARAMS:Ou}=N(),lee=1024*1024*1024;function _ee(e){let t=aa.get(Ou.HTTP_TIMEOUT),r=aa.get(Ou.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:lee,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=aa.get(Ou.TLS_PRIVATEKEY),i=aa.get(Ou.TLS_CERTIFICATE),o=aa.get(Ou.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:nR.readFileSync(`${n}`),cert:nR.readFileSync(i)+(o?`
|
|
24
|
+
`},q:.8});Dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});pP={type:"application/json",serializeStream:$d.streamAsJSON,serialize:JSON.stringify,deserialize:Z6,q:.8};Dt.set("*/*",pP);Dt.set("",pP);a(Z6,"tryJSONParse");a(yT,"registerContentHandlers");e9=require("fastify-plugin"),t9=e9(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Kd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Kd,"findBestSerializer");dP=hP.default.get(mP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Wd,"serialize");a(ri,"serializeMessage");a(r9,"streamToBuffer");a(ta,"getDeserializer");a(fP,"deserializerUnknownType");a(s9,"transformIterable")});var Qd={};Je(Qd,{start:()=>o9});async function i9(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&fl(e);let n=new Hi;try{e.responseHeaders=n;let i=e.url.slice(1),o=wT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await ke(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ta(r["content-type"],!0)(e.body)}catch(p){throw new hu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new hu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new hu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,IT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){n9[0]=f;let p=String.fromCharCode(34,(Lt[0]&63)+62,(Lt[0]>>6)+(Lt[1]<<2&63)+62,(Lt[1]>>4)+(Lt[2]<<4&63)+62,(Lt[2]>>2)+62,(Lt[3]&63)+62,(Lt[3]>>6)+(Lt[4]<<2&63)+62,(Lt[4]>>4)+(Lt[5]<<4&63)+62,(Lt[5]>>2)+62,(Lt[6]&63)+62,(Lt[6]>>6)+(Lt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),IT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Wd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ki.warn(i):ki.info(i):ki.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Wd(i.contentType?i:i.toString(),e,o),o}}function o9(e){IT=e,!TP&&(TP=!0,wT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return i9(t,r)}),e.server.ws(async(t,r,s)=>{Eu++;let n=new ss;RP||(RP=!0,Oc(l=>{Eu>0&&l.push({metric:"ws-connections",connections:Eu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ki.warn(l)});let o;t.on("message",a(function(d){o||(o=ta(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Eu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=wT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(ri(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,br(h=>({count:h.count,total:Eu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await ke(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=ri(E.value,r);t.send(h),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ki,hu,Lt,n9,IT,TP,wT,RP,Eu,gP=Te(()=>{Qo();$n();ki=L(q()),hu=L(X());El();va();fi();eT();Lt=new Uint8Array(8),n9=new Float64Array(Lt.buffer,0,1),IT={};a(i9,"http");Eu=0;a(o9,"start")});var CT=T((Nfe,AP)=>{var{recordAction:zd,recordActionBinary:a9}=($n(),Z(I_)),c9=require("fastify-plugin"),u9=200;AP.exports=c9(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),zd(o,"duration",_,d,l),a9(n.raw.statusCode<400,"success",_,d,l);let f=u9;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{zd(performance.now()-c,"transfer",_,d,l),zd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,zd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var MT=T((bfe,IP)=>{var ef=require("clone"),tf=He(),l9=V(),Xd=N(),_9=q(),Jd=require("fs"),DT=require("joi"),{string:Zd}=DT.types(),{hdb_errors:d9,handleHDBError:mu}=X(),{HDB_ERROR_MSGS:f9,HTTP_STATUS_CODES:jd}=d9,{common_validators:ra}=Ls(),OP=1e9,NP=" is required",E9=["insert","update","upsert"],LT={database:{presence:!1,format:ra.schema_format,length:ra.schema_length},schema:{presence:!1,format:ra.schema_format,length:ra.schema_length},table:{presence:!0,format:ra.schema_format,length:ra.schema_length},action:{inclusion:{within:E9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},h9={schema:Zd.required(),table:Zd.required(),action:Zd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:m9,AWS_SECRET:p9,AWS_BUCKET:S9,AWS_FILE_KEY:T9,REGION:R9}=Xd.S3_BUCKET_AUTH_KEYS,g9={s3:{presence:!0},[`s3.${m9}`]:{presence:!0,type:"String"},[`s3.${p9}`]:{presence:!0,type:"String"},[`s3.${S9}`]:{presence:!0,type:"String"},[`s3.${T9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${R9}`]:{presence:!0,type:"String"}},bP=ef(LT);bP.data.presence={message:NP};var yP=ef(LT);yP.file_path.presence={message:NP};var A9=Object.assign(ef(LT),g9),UT=ef(h9);UT.csv_url=Zd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();UT.passthrough_headers=DT.object();function O9(e){let t=tf.validateObject(e,bP);return rf(e,t)}a(O9,"dataObject");function N9(e){let t=tf.validateBySchema(e,DT.object(UT));return rf(e,t)}a(N9,"urlObject");function b9(e){let t=tf.validateObject(e,yP);return rf(e,t)}a(b9,"fileObject");function y9(e){let t=tf.validateObject(e,A9);return rf(e,t)}a(y9,"s3FileObject");function rf(e,t){if(!t){let r=l9.checkGlobalSchemaTable(e.schema,e.table);if(r)return mu(new Error,r,jd.BAD_REQUEST);if(e.operation===Xd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Jd.accessSync(e.file_path,Jd.constants.R_OK|Jd.constants.F_OK)}catch(s){return s.code===Xd.NODE_ERROR_CODES.ENOENT?mu(s,`No such file or directory ${s.path}`,jd.BAD_REQUEST):s.code===Xd.NODE_ERROR_CODES.EACCES?mu(s,`Permission denied ${s.path}`,jd.BAD_REQUEST):mu(s)}try{let s=Jd.statSync(e.file_path).size;if(s>OP)return mu(new Error,f9.MAX_FILE_SIZE_ERR(s,OP),jd.BAD_REQUEST)}catch(s){_9.error(s),console.error(s)}}}return t}a(rf,"postValidateChecks");IP.exports={dataObject:O9,urlObject:N9,fileObject:b9,s3FileObject:y9}});var PT=T((Ife,wP)=>{"use strict";var pu=q(),sf=N();async function I9(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===sf.OPERATIONS_ENUM.INSERT||t.operation===sf.OPERATIONS_ENUM.UPDATE||t.operation===sf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===sf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(pu.info(i.message),i):i.http_resp_msg?(pu.error(`Error calling operation: ${e.name}`),pu.error(i.http_resp_msg),i):(pu.error(`Error calling operation: ${e.name}`),pu.error(i),i)}}a(I9,"callOperationFunctionAsAwait");wP.exports={callOperationFunctionAsAwait:I9}});var DP=T((Cfe,CP)=>{"use strict";var vT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},BT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};CP.exports={BulkLoadFileObject:vT,BulkLoadDataObject:BT}});var UP=T((Lfe,LP)=>{"use strict";var HT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};LP.exports=HT});var VT=T((Hfe,zP)=>{"use strict";var nf=pr(),af=MT(),w9=require("needle"),Rs=N(),Mfe=De(),sa=V(),{handleHDBError:Ke,hdb_errors:xP}=X(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:$i}=xP,na=q(),qT=require("papaparse");sa.promisifyPapaParse();var gs=require("fs-extra"),C9=require("path"),{chain:MP}=require("stream-chain"),PP=require("stream-json/streamers/StreamArray"),vP=require("stream-json/utils/Batch"),BP=require("stream-chain/utils/comp"),{finished:HP}=require("stream"),D9=j(),kP=PT(),L9=AT(),{BulkLoadFileObject:GT,BulkLoadDataObject:U9}=DP(),xT=dT(),{verifyBulkLoadAttributePerms:VP}=Gd(),Pfe=UP(),vfe=$e(),Bfe=sn(),{databases:M9}=(fe(),Z(Ce)),{coerceType:P9}=(cf(),Z($T)),qP="No records parsed from csv file.",Vi=`${D9.get("HDB_ROOT")}/tmp`,{schema_regex:v9}=Ls(),FP=1024*1024*2,GP=5e3,B9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};zP.exports={csvDataLoad:H9,csvURLLoad:q9,csvFileLoad:F9,importFromS3:G9};async function H9(e,t){let r=af.dataObject(e);if(r)throw Ke(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=KP(e.schema,e.table),i=qT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:FT.bind(null,n),dynamicTyping:!1}),o=new xT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&VP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Ke(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new U9(e.action,e.schema,e.table,i.data);return s=await kP.callOperationFunctionAsAwait(WP,u,null),s.message===qP?qP:QP(s.records,s.number_written)}catch(n){throw Yi(n)}}a(H9,"csvDataLoad");async function q9(e){let t=af.urlObject(e);if(t)throw Ke(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Vi}/${r}`;try{await x9(e,r)}catch(n){throw na.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),Ke(n,$i(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new GT(this.job_operation_function.name,e.action,e.schema,e.table,s,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await kT(n);return await of(s),i}catch(n){throw await of(s),Yi(n)}}a(q9,"csvURLLoad");async function F9(e){let t=af.fileObject(e);if(t)throw Ke(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new GT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await kT(r)}catch(s){throw Yi(s)}}a(F9,"csvFileLoad");async function G9(e){let t=af.s3FileObject(e);if(t)throw Ke(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=C9.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Vi}/${n}`;let i=new GT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await k9(n,e);let o=await kT(i);return await of(r),o}catch(s){throw await of(r),Yi(s)}}a(G9,"importFromS3");async function x9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await w9("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ke(s,n,s.statusCode,Rs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}$9(r,e.csv_url),await V9(t,r.raw)}a(x9,"downloadCSVFile");async function k9(e,t){try{let r=`${Vi}/${e}`;await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await L9.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(){na.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw na.error(Et.S3_DOWNLOAD_ERR+" - "+r),Ke(r,$i(Et.S3_DOWNLOAD_ERR))}}a(k9,"downloadFileFromS3");async function V9(e,t){try{await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,t)}catch(r){throw na.error(Et.WRITE_TEMP_FILE_ERR),Ke(r,$i(Et.DEFAULT_BULK_LOAD_ERR))}}a(V9,"writeFileToTempFolder");async function of(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{na.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(of,"deleteTempFile");function $9(e,t){if(e.statusCode!==xP.HTTP_STATUS_CODES.OK)throw Ke(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!B9[e.headers["content-type"]])throw Ke(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw Ke(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a($9,"validateURLResponse");async function kT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await Y9(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await K9(e);break;default:throw Ke(new Error,Et.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return QP(t.records,t.number_written)}catch(t){throw Yi(t)}}a(kT,"fileLoad");async function $P(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 nf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&VP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ke(c);r(u)}}a($P,"validateChunk");async function YP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!sa.isEmpty(c)&&!sa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await kP.callOperationFunctionAsAwait(WP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ke(c,$i(Et.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(YP,"insertChunk");async function Y9(e){let t={records:0,number_written:0},r=KP(e.schema,e.table);try{let s=new xT,n=gs.createReadStream(e.file_path,{highWaterMark:FP});n.setEncoding("utf8"),await qT.parsePromise(n,$P.bind(null,e,s),FT.bind(null,r));let i=s.getPermsResponse();if(i)throw Ke(new Error,i,Ut.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:FP}),n.setEncoding("utf8"),await qT.parsePromise(n,YP.bind(null,e,t),FT.bind(null,r)),n.destroy(),t}catch(s){throw Ke(s,$i(Et.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(Y9,"callPapaParse");function KP(e,t){let r=M9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>P9(i,n));return s}a(KP,"createTransformMap");function FT(e,t,r){let s=e.get(r);return s?s(t):sa.autoCast(t)}a(FT,"typeFunction");async function K9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new xT,n=MP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),PP.withParser(),c=>c.value,new vP({batchSize:GP}),BP(async c=>{await $P(e,s,r,c)})]);await new Promise((c,u)=>{HP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ke(new Error,i,Ut.BAD_REQUEST);let o=MP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),PP.withParser(),c=>c.value,new vP({batchSize:GP}),BP(async c=>{await YP(e,t,r,c)})]);return await new Promise((c,u)=>{HP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ke(s,$i(Et.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(K9,"insertJson");async function WP(e){let t={};try{e.data&&e.data.length>0&&W9(e.data[0])?t=await Q9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",na.info(t.message))}catch(r){throw Yi(r)}return t}a(WP,"callBulkFileLoad");function W9(e){let t=Object.keys(e);for(let r of t)if(!v9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(W9,"validateColumnNames");async function Q9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=nf.insert;break;case"update":i=nf.update;break;case"upsert":i=nf.upsert;break;default:throw Ke(new Error,Et.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,Et.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Yi(o)}}a(Q9,"bulkFileLoad");function QP(e,t){return`successfully loaded ${t} of ${e} records`}a(QP,"buildResponseMsg");function Yi(e){return Ke(e,$i(Et.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Yi,"buildTopLevelErrMsg")});var jP=T((Ffe,JP)=>{"use strict";var YT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};JP.exports=YT});var ev=T((xfe,ZP)=>{"use strict";var z9=N(),XP=require("moment"),J9=require("uuid").v4,KT=class{static{a(this,"JobObject")}constructor(){this.id=J9(),this.type=void 0,this.start_datetime=XP().valueOf(),this.created_datetime=XP().valueOf(),this.end_datetime=void 0,this.status=z9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};ZP.exports=KT});var WT=T((Vfe,ov)=>{"use strict";var j9=require("uuid").v4,sv=pr(),nv=Gr(),X9=Bs(),Z9=bo(),e7=jP(),We=N(),t7=ev(),r7=k_(),jr=q(),s7=Ja(),ia=V(),{promisify:n7}=require("util"),Ki=require("moment"),i7=kd(),uf=MT(),tv=xh(),{deleteTransactionLogsBeforeValidator:o7}=aT(),{handleHDBError:a7,hdb_errors:c7}=X(),{HTTP_STATUS_CODES:u7}=c7,rv=nv.searchByValue,l7=nv.searchByHash,_7=sv.insert,d7=n7(i7.evaluateSQL),f7=sv.update;ov.exports={addJob:m7,updateJob:S7,handleGetJob:E7,handleGetJobsByStartDate:h7,getJobById:iv};async function E7(e){try{let t=await iv(e.id);return ia.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw jr.error("There was an error getting job",t),new Error(r)}}a(E7,"handleGetJob");async function h7(e){try{let t=await p7(e);if(jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ki(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ki(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw jr.error(r),new Error(r)}}a(h7,"handleGetJobsByStartDate");async function m7(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ia.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return jr.info(l),t.error=l,t}if(!We.JOB_TYPE_ENUM[e.operation])return jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case We.OPERATIONS_ENUM.CSV_FILE_LOAD:s=uf.fileObject(e);break;case We.OPERATIONS_ENUM.CSV_URL_LOAD:s=uf.urlObject(e);break;case We.OPERATIONS_ENUM.CSV_DATA_LOAD:s=uf.dataObject(e);break;case We.OPERATIONS_ENUM.IMPORT_FROM_S3:s=uf.s3FileObject(e);break;case We.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case We.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=tv(e,"date");break;case We.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=tv(e,"timestamp");break;case We.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=o7(e);break;default:break}if(s)throw a7(s,s.message,u7.BAD_REQUEST,void 0,void 0,!0);let n=new t7;n.type=e.operation===We.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?We.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new X9(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await rv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=j9();try{o=await rv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new s7(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await _7(u)}catch(l){return jr.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,jr.trace(l)}return t}a(m7,"addJob");async function p7(e){let t=Ki(e.from_date,Ki.ISO_8601),r=Ki(e.to_date,Ki.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 e7(s,e.hdb_user);try{return await d7(n)}catch(i){throw jr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(p7,"getJobsInDateRange");async function iv(e){if(ia.isEmptyOrZeroLength(e))return ia.errorizeMessage("Invalid job ID specified.");let t=new Z9(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await l7(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return jr.error(s),ia.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(iv,"getJobById");async function S7(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ia.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===We.JOB_STATUS_ENUM.COMPLETE||e.status===We.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ki().valueOf());let t=new r7(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await f7(t),r}a(S7,"updateJob")});var dv=T((Yfe,_v)=>{"use strict";var av=V(),cr=N(),T7=require("moment"),lf=VT(),_f=q(),cv=WT(),uv=Vd(),lv=qn(),R7=Ge(),g7=Bd(),QT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function A7(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(av.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(av.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case cr.JOB_TYPE_ENUM.csv_file_load:await Sn(e,lf.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await Sn(e,lf.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await Sn(e,lf.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await Sn(e,lf.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await Sn(e,uv.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Sn(e,uv.export_to_s3);break;case cr.JOB_TYPE_ENUM.delete_files_before:case cr.JOB_TYPE_ENUM.delete_records_before:await Sn(e,lv.deleteFilesBefore);break;case cr.JOB_TYPE_ENUM.delete_audit_logs_before:await Sn(e,lv.deleteAuditLogsBefore);break;case cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Sn(e,g7.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(A7,"parseMessage");async function Sn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=T7().valueOf(),await cv.updateJob(e.job),await O7(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):_f.error(`There was an error running ${t.name} job with id ${e.job.id}`),_f.error(s),e.job.message=s,e.job.status=cr.JOB_STATUS_ENUM.ERROR;try{await cv.updateJob(e.job)}catch(n){throw _f.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Sn,"runJob");async function O7(e){_f.trace("launching job thread:",e),R7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(O7,"launchJobThread");_v.exports={parseMessage:A7,RunnerMessage:QT}});var Ev=T((Wfe,fv)=>{"use strict";var zT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};fv.exports=zT});var Dv=T((zfe,tR)=>{"use strict";var hf=Gr(),XT=kd(),df=VT(),Tn=Dc(),ff=vn(),Tu=qn(),N7=Ip(),Su=xr(),Ef=Bp(),Mt=oT(),ht=q(),b7=Fp(),y7=Z_(),I7=TS(),w7=sd(),C7=RS(),D7=gS(),L7=NS(),U7=yS(),JT=CS(),hv=Vd(),M7=Gd(),ZT=WT(),P=N(),{hdb_errors:gu,handleHDBError:Ru}=X(),{HTTP_STATUS_CODES:mv}=gu,jT=PS(),pv=Rd(),yv=require("util"),oa=pr(),P7=nn(),v7=Go(),Sv=dv(),Tv=Pc(),Rv=(bd(),Z(eu)),gv=Rr(),Av=Bd(),Ov=Dd(),{setServerUtilities:B7}=(cf(),Z($T)),{CONTEXT:H7}=(is(),Z(PE)),{_assignPackageExport:q7}=require("../index"),{transformReq:F7}=V(),{server:G7}=(Hr(),Z(ro)),x7=PT(),Nv=hf.searchByHash,k7=hf.searchByValue,V7=yv.promisify(hf.search),$7=yv.promisify(XT.evaluateSQL),Y7={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=Ev();async function Iv(e,t){try{if(e.body.operation!=="read_log"&&(ht.log_level===P.LOG_LEVELS.INFO||ht.log_level===P.LOG_LEVELS.DEBUG||ht.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ht.info(o)}}catch(s){ht.error(s)}let r=await x7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Y7[e.body.operation]&&P7.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(Iv,"processLocalTransaction");var bv=W7();tR.exports={chooseOperation:wv,getOperationFunction:Cv,operation:eR,processLocalTransaction:Iv};B7(tR.exports);G7.operation=eR;function wv(e){let t;try{t=Cv(e)}catch(n){throw ht.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=XT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=XT.checkASTPermissions(e,i);if(o)throw ht.error(`${mv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Ru(new Error,o,gu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=M7.verifyPerms(i,n);if(o)throw ht.error(`${mv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Ru(new Error,o,gu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Ru(n,"There was an error when trying to choose an operation path")}return r}a(wv,"chooseOperation");function Cv(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),bv.has(e.operation))return bv.get(e.operation);throw Ru(new Error,gu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),gu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Cv,"getOperationFunction");q7("operation",eR);function eR(e,t){e.hdb_user=this[H7]?.user,e.bypass_auth=!t;let r=wv(e);return Iv({body:e},r)}a(eR,"operation");async function K7(e){ht.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await oa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await oa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await oa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Tu.deleteRecord(i);break;default:ht.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ht.info("Invalid operation in transaction"),ht.error(o)}}a(K7,"catchup");async function Ks(e){F7(e);let t,r;try{r=await ZT.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new Sv.RunnerMessage(t,e);return await Sv.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ht.error(n),Ru(s,n)}}a(Ks,"executeJob");function W7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(oa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(oa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(oa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(hf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(Nv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(Nv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(k7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(V7)),e.set(P.OPERATIONS_ENUM.SQL,new H($7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ks,df.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ks,df.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ks,df.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ks,df.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(Tn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(Tn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(Tn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(Tn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(Tn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(Tn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(Tn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(Tn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(ff.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(ff.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(ff.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(ff.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Tu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Su.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Su.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Su.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Su.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(Ef.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(Ef.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(Ef.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(Ef.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Su.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(b7)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(y7)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(I7)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(w7)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(C7)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(D7)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(gv.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(L7.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(U7)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(JT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(JT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(JT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ks,hv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ks,Tu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ks,Tu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ks,hv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(ZT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(ZT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(jT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(jT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(jT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(pv.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(pv.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(K7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(v7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ks,Tu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(N7)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(Tv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(Tv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(Rv.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(Rv.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(gv.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(Av.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ks,Av.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(Ov.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(Ov.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(Tn.getBackup)),e}a(W7,"initializeOperationFunctionMap")});var pf=T((jfe,Mv)=>{"use strict";var rR=N(),Q7=V(),Au=q(),{handleHDBError:sR,hdb_errors:mf}=X(),{isMainThread:z7}=require("worker_threads"),{Readable:J7}=require("stream"),Lv=require("os"),j7=require("util"),X7=zp(),Z7=j7.promisify(X7.authorize),Uv=Dv(),{createGzip:eee,constants:tee}=require("zlib");function ree(e){let t=`Found an uncaught exception with message: ${e.message}. ${Lv.EOL}Stack: ${e.stack} ${Lv.EOL}Terminating ${z7?"HDB":"thread"}.`;console.error(t),Au.fatal(t),process.exit(1)}a(ree,"handleServerUncaughtException");function see(e,t,r){if(Au[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:mf.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(see,"serverErrorHandler");function nee(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=sR(new Error,"Invalid JSON.",mf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Q7.isEmpty(e.body.operation)){let s=sR(new Error,"Request body must include an 'operation' property.",mf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(nee,"reqBodyValidationHandler");function iee(e,t,r){let s;e.body.operation!==rR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==rR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==rR.OPERATIONS_ENUM.LOGOUT?Z7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Au.warn(n),Au.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(sR(n,i,mf.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(iee,"authHandler");async function oee(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Uv.chooseOperation(e.body);let n=await Uv.processLocalTransaction(e,s);if(n instanceof J7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(eee({level:tee.Z_BEST_SPEED})))}return n}catch(n){throw Au.error(n),n}}a(oee,"handlePostRequest");Mv.exports={authHandler:iee,handlePostRequest:oee,handleServerUncaughtException:ree,serverErrorHandler:see,reqBodyValidationHandler:nee}});var Hv=T((Zfe,Bv)=>{"use strict";var aee=require("fastify-plugin"),{handlePostRequest:Pv,authHandler:cee,reqBodyValidationHandler:uee}=pf();async function lee(e){e.decorate("hdbCore",{preValidation:[uee,cee],request:t=>vv(Pv(t,response)),requestWithoutAuthentication:(t,r)=>vv(Pv(t,r,!0))})}a(lee,"hdbCore");async function vv(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(vv,"convertAsyncIterators");Bv.exports=aee(lee)});var Fv=T((tEe,qv)=>{"use strict";var nR=require("fs"),aa=j();aa.initSync();var{CONFIG_PARAMS:Ou}=N(),_ee=1024*1024*1024;function dee(e){let t=aa.get(Ou.HTTP_TIMEOUT),r=aa.get(Ou.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:_ee,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=aa.get(Ou.TLS_PRIVATEKEY),i=aa.get(Ou.TLS_CERTIFICATE),o=aa.get(Ou.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:nR.readFileSync(`${n}`),cert:nR.readFileSync(i)+(o?`
|
|
25
25
|
|
|
26
|
-
`+nR.readFileSync(o):"")},s.http2=!0}return s}a(_ee,"getServerOptions");qv.exports=_ee});var kv=T((sEe,xv)=>{"use strict";var iR=j();iR.initSync();var{CONFIG_PARAMS:Gv}=N();function dee(){let e=iR.get(Gv.HTTP_CORSACCESSLIST),t=iR.get(Gv.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(dee,"getCORSOptions");xv.exports=dee});var Yv=T((iEe,$v)=>{"use strict";var Vv=j();Vv.initSync();var fee=N();function Eee(){return Vv.get(fee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Eee,"getHeaderTimeoutConfig");$v.exports=Eee});var cR={};Je(cR,{customFunctionsServer:()=>pee,handleFile:()=>mee,ready:()=>Ree});async function mee(e,t,r,s){if(!Rn){let c=oR.get(aR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Rn=n0(c),lt.http((await Rn).server)}let n=await Rn,i=(0,Wv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Kv.has(i)){Kv.add(i);try{n.register(Tee(i,o))}catch(c){if(c.message==="Root plugin has already booted")Ue.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function pee(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await See();let e=oR.get(aR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Rn=await n0(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function See(){try{Ue.info("Custom Functions starting configuration."),await Zv.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function Tee(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,Qv.existsSync)(e)&&r.register(Xv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function n0(e){Ue.info("Custom Functions starting buildServer.");let t=(0,e0.default)(e),r=(0,zv.default)(t);r.server.headersTimeout=(0,r0.default)(),r.setErrorHandler(s0.serverErrorHandler);let s=(0,t0.default)();return s&&r.register(Jv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(jv.default),await r.register(hee),await r.after(),yT(r),Ue.info("Custom Functions completed buildServer."),r}function Ree(){if(Rn)return Rn.then?Rn.then(e=>e.ready()):Rn.ready()}var Wv,Qv,zv,Jv,jv,Xv,oR,aR,Ue,hee,Zv,e0,t0,r0,s0,Rn,Kv,i0=Te(()=>{Wv=require("path"),Qv=require("fs"),zv=L(require("fastify")),Jv=L(require("@fastify/cors")),jv=L(CT()),Xv=L(require("@fastify/autoload")),oR=L(j()),aR=L(N()),Ue=L(q()),hee=L(Hv()),Zv=L(Gr()),e0=L(Fv()),t0=L(kv()),r0=L(Yv()),s0=L(pf());Qo();Br();Kv=new Set;a(mee,"handleFile");a(pee,"customFunctionsServer");a(See,"setUp");a(Tee,"buildRouteFolder");a(n0,"buildServer");a(Ree,"ready")});var uR={};Je(uR,{start:()=>gee});function gee(e){return{handleFile(t,r,s){a0||(a0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=o0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,c0.default)(n,(0,u0.realpathSync)(o))}}return i(n)},{runFirst:!0})),o0.set(r,s)}}}var c0,u0,o0,a0,l0=Te(()=>{c0=L(require("send")),u0=require("fs"),o0=new Map;a(gee,"start")});function Nee(e,t=1,r){if(lR++,(0,Wi.startWorker)("server/threads/threadServer.js",{name:Rf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Rf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});Oee.push(n),await n,ca.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Tf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ca.indexOf(s);o>-1&&ca.splice(o,1)}if(a(i,"removeWorker"),ua){let o=ua;ua=[];for(let c of o)E0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{_R?_R=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Wi.shutdownWorkers)(),lR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function h0(e=0,t){if(typeof e=="string")try{(0,gf.existsSync)(e)&&(0,gf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=bee:r=yee(t):r=dR;let s=(0,la.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=E0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),_R=!0,r(o,(c,u)=>{if(!c){if(_0){let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});_0.deliverSocket(l,e,u),l.resume()}else lR>0?(ua.length===0&&setTimeout(()=>{ua.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ua.push(o)):(console.log("start up a dynamic thread to handle request"),Nee(0));Nr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});Dee(l,c,e)}Nr(!0,"socket-routed")})};let n=Rc();f0.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function dR(e,t){let r,s=0;for(let n of ca){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Sf)return Sf=i,t(r);s=i}Sf=0,t(r)}function bee(e,t){let r={};e.getpeername(r);let s=r.address,n=_a.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);dR(e,o=>{_a.set(s,{worker:o,lastUsed:i}),t(o)})}function yee(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new la.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=_a.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);dR(s,d=>{_a.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function wee(){Sf=0;for(let e of ca)e.expectedIdle=e.recentELU.idle+Iee,e.requests=1;ca.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Dee(e,t,r){let s=Cee++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),Tf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),Tf.delete(s)),n.event=="destroy"&&(e.destroy(),Tf.delete(s))})}var Wi,la,Rf,f0,gf,Aee,ca,ua,E0,_0,lR,Oee,_R,Sf,d0,_a,Iee,Tf,Cee,m0=Te(()=>{Wi=L(Ge()),la=require("net"),Rf=L(N()),f0=L(q()),gf=require("fs");$n();({isMainThread:Aee}=require("worker_threads")),ca=[],ua=[],E0=[],lR=0,Oee=[];Aee&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Nee,"startHTTPWorker");a(h0,"startSocketServer");Sf=0;a(dR,"findMostIdleWorker");d0=36e5,_a=new Map;a(bee,"findByRemoteAddressAffinity");a(yee,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of _a)r.lastUsed+d0<e&&_a.delete(t)},d0).unref();Iee=1e3;a(wee,"updateWorkerIdleness");(0,Wi.setMonitorListener)(wee);Tf=new Map,Cee=1;a(Dee,"proxySocket")});var R0=T((pEe,T0)=>{"use strict";var Lee=require("cluster"),gs=j();gs.initSync();var S0=N(),EEe=require("util"),gn=q(),fR=require("fs"),Uee=require("fastify"),hEe=Rc(),Mee=require("@fastify/cors"),Pee=require("@fastify/compress"),vee=require("@fastify/static"),Bee=CT(),Hee=require("path"),{PACKAGE_ROOT:qee}=N(),Fee=sn(),Gee=V(),xee=Gr(),kee=sc(),{server:Vee}=(Br(),Z(ro)),{authHandler:$ee,handlePostRequest:Yee,serverErrorHandler:Kee,reqBodyValidationHandler:Wee}=pf(),mEe=require("net"),{registerContentHandlers:Qee}=(Qo(),Z(SP)),zee=6e4,Jee=1024*1024*1024,jee="TRUE",{CONFIG_PARAMS:An}=S0,Qi;T0.exports={hdbServer:p0,start:p0};async function p0(e){try{gn.info("In Fastify server"+process.cwd()),gn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Lee.isMaster,await Xee();let t=gs.get(An.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Qi=Zee(t),await Qi.ready(),e||(e={}),e.isOperationsServer=!0,Qi.server.cantCleanupProperly=!0;try{Vee.http(Qi.server,e),Qi.server.closeIdleConnections||await Qi.listen({port:0,host:"::"})}catch(r){throw Qi.close(),gn.error(r),gn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),gn.fatal(t),process.exit(1)}}a(p0,"operationsServer");async function Xee(){gn.trace("Configuring HarperDB process."),Fee.setSchemaDataToGlobal(),await xee.setUsersToGlobal(),await kee.getLicense()}a(Xee,"setUp");function Zee(e){gn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ete(e),r=Uee(t);r.server.headersTimeout=rte(),r.setErrorHandler(Kee);let s=tte();s&&r.register(Mee,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Bee),r.register(Pee),r.register(vee,{root:Hee.join(qee,"studio")}),Qee(r);let n=gs.get(S0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Gee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Wee,$ee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Yee(i,o)}),r.get("/health",()=>"HarperDB is running."),gn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Zee,"buildServer");function ete(e){let t=gs.get(An.OPERATIONSAPI_NETWORK_TIMEOUT),r=gs.get(An.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Jee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=gs.get(An.OPERATIONSAPI_TLS_PRIVATEKEY),i=gs.get(An.OPERATIONSAPI_TLS_CERTIFICATE),o=gs.get(An.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:fR.readFileSync(n),cert:fR.readFileSync(i)+(o?`
|
|
26
|
+
`+nR.readFileSync(o):"")},s.http2=!0}return s}a(dee,"getServerOptions");qv.exports=dee});var kv=T((sEe,xv)=>{"use strict";var iR=j();iR.initSync();var{CONFIG_PARAMS:Gv}=N();function fee(){let e=iR.get(Gv.HTTP_CORSACCESSLIST),t=iR.get(Gv.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(fee,"getCORSOptions");xv.exports=fee});var Yv=T((iEe,$v)=>{"use strict";var Vv=j();Vv.initSync();var Eee=N();function hee(){return Vv.get(Eee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(hee,"getHeaderTimeoutConfig");$v.exports=hee});var cR={};Je(cR,{customFunctionsServer:()=>See,handleFile:()=>pee,ready:()=>gee});async function pee(e,t,r,s){if(!Rn){let c=oR.get(aR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Rn=n0(c),lt.http((await Rn).server)}let n=await Rn,i=(0,Wv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Kv.has(i)){Kv.add(i);try{n.register(Ree(i,o))}catch(c){if(c.message==="Root plugin has already booted")Ue.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function See(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await Tee();let e=oR.get(aR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Rn=await n0(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function Tee(){try{Ue.info("Custom Functions starting configuration."),await Zv.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function Ree(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,Qv.existsSync)(e)&&r.register(Xv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function n0(e){Ue.info("Custom Functions starting buildServer.");let t=(0,e0.default)(e),r=(0,zv.default)(t);r.server.headersTimeout=(0,r0.default)(),r.setErrorHandler(s0.serverErrorHandler);let s=(0,t0.default)();return s&&r.register(Jv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(jv.default),await r.register(mee),await r.after(),yT(r),Ue.info("Custom Functions completed buildServer."),r}function gee(){if(Rn)return Rn.then?Rn.then(e=>e.ready()):Rn.ready()}var Wv,Qv,zv,Jv,jv,Xv,oR,aR,Ue,mee,Zv,e0,t0,r0,s0,Rn,Kv,i0=Te(()=>{Wv=require("path"),Qv=require("fs"),zv=L(require("fastify")),Jv=L(require("@fastify/cors")),jv=L(CT()),Xv=L(require("@fastify/autoload")),oR=L(j()),aR=L(N()),Ue=L(q()),mee=L(Hv()),Zv=L(xr()),e0=L(Fv()),t0=L(kv()),r0=L(Yv()),s0=L(pf());Qo();Hr();Kv=new Set;a(pee,"handleFile");a(See,"customFunctionsServer");a(Tee,"setUp");a(Ree,"buildRouteFolder");a(n0,"buildServer");a(gee,"ready")});var uR={};Je(uR,{start:()=>Aee});function Aee(e){return{handleFile(t,r,s){a0||(a0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=o0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,c0.default)(n,(0,u0.realpathSync)(o))}}return i(n)},{runFirst:!0})),o0.set(r,s)}}}var c0,u0,o0,a0,l0=Te(()=>{c0=L(require("send")),u0=require("fs"),o0=new Map;a(Aee,"start")});function bee(e,t=1,r){if(lR++,(0,Wi.startWorker)("server/threads/threadServer.js",{name:Rf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Rf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});Nee.push(n),await n,ca.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Tf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ca.indexOf(s);o>-1&&ca.splice(o,1)}if(a(i,"removeWorker"),ua){let o=ua;ua=[];for(let c of o)E0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{_R?_R=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Wi.shutdownWorkers)(),lR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function h0(e=0,t){if(typeof e=="string")try{(0,gf.existsSync)(e)&&(0,gf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=yee:r=Iee(t):r=dR;let s=(0,la.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=E0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),_R=!0,r(o,(c,u)=>{if(!c){if(_0){let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});_0.deliverSocket(l,e,u),l.resume()}else lR>0?(ua.length===0&&setTimeout(()=>{ua.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ua.push(o)):(console.log("start up a dynamic thread to handle request"),bee(0));br(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});Lee(l,c,e)}br(!0,"socket-routed")})};let n=Rc();f0.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function dR(e,t){let r,s=0;for(let n of ca){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Sf)return Sf=i,t(r);s=i}Sf=0,t(r)}function yee(e,t){let r={};e.getpeername(r);let s=r.address,n=_a.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);dR(e,o=>{_a.set(s,{worker:o,lastUsed:i}),t(o)})}function Iee(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new la.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=_a.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);dR(s,d=>{_a.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function Cee(){Sf=0;for(let e of ca)e.expectedIdle=e.recentELU.idle+wee,e.requests=1;ca.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Lee(e,t,r){let s=Dee++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),Tf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),Tf.delete(s)),n.event=="destroy"&&(e.destroy(),Tf.delete(s))})}var Wi,la,Rf,f0,gf,Oee,ca,ua,E0,_0,lR,Nee,_R,Sf,d0,_a,wee,Tf,Dee,m0=Te(()=>{Wi=L(Ge()),la=require("net"),Rf=L(N()),f0=L(q()),gf=require("fs");$n();({isMainThread:Oee}=require("worker_threads")),ca=[],ua=[],E0=[],lR=0,Nee=[];Oee&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(bee,"startHTTPWorker");a(h0,"startSocketServer");Sf=0;a(dR,"findMostIdleWorker");d0=36e5,_a=new Map;a(yee,"findByRemoteAddressAffinity");a(Iee,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of _a)r.lastUsed+d0<e&&_a.delete(t)},d0).unref();wee=1e3;a(Cee,"updateWorkerIdleness");(0,Wi.setMonitorListener)(Cee);Tf=new Map,Dee=1;a(Lee,"proxySocket")});var R0=T((pEe,T0)=>{"use strict";var Uee=require("cluster"),As=j();As.initSync();var S0=N(),EEe=require("util"),gn=q(),fR=require("fs"),Mee=require("fastify"),hEe=Rc(),Pee=require("@fastify/cors"),vee=require("@fastify/compress"),Bee=require("@fastify/static"),Hee=CT(),qee=require("path"),{PACKAGE_ROOT:Fee}=N(),Gee=nn(),xee=V(),kee=xr(),Vee=sc(),{server:$ee}=(Hr(),Z(ro)),{authHandler:Yee,handlePostRequest:Kee,serverErrorHandler:Wee,reqBodyValidationHandler:Qee}=pf(),mEe=require("net"),{registerContentHandlers:zee}=(Qo(),Z(SP)),Jee=6e4,jee=1024*1024*1024,Xee="TRUE",{CONFIG_PARAMS:An}=S0,Qi;T0.exports={hdbServer:p0,start:p0};async function p0(e){try{gn.info("In Fastify server"+process.cwd()),gn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Uee.isMaster,await Zee();let t=As.get(An.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Qi=ete(t),await Qi.ready(),e||(e={}),e.isOperationsServer=!0,Qi.server.cantCleanupProperly=!0;try{$ee.http(Qi.server,e),Qi.server.closeIdleConnections||await Qi.listen({port:0,host:"::"})}catch(r){throw Qi.close(),gn.error(r),gn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),gn.fatal(t),process.exit(1)}}a(p0,"operationsServer");async function Zee(){gn.trace("Configuring HarperDB process."),Gee.setSchemaDataToGlobal(),await kee.setUsersToGlobal(),await Vee.getLicense()}a(Zee,"setUp");function ete(e){gn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=tte(e),r=Mee(t);r.server.headersTimeout=ste(),r.setErrorHandler(Wee);let s=rte();s&&r.register(Pee,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Hee),r.register(vee),r.register(Bee,{root:qee.join(Fee,"studio")}),zee(r);let n=As.get(S0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!xee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Qee,Yee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Kee(i,o)}),r.get("/health",()=>"HarperDB is running."),gn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ete,"buildServer");function tte(e){let t=As.get(An.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(An.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:jee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(An.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(An.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(An.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:fR.readFileSync(n),cert:fR.readFileSync(i)+(o?`
|
|
27
27
|
|
|
28
|
-
`+fR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(ete,"getServerOptions");function tte(){let e=gs.get(An.OPERATIONSAPI_NETWORK_CORS),t=gs.get(An.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===jee)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(tte,"getCORSOpts");function rte(){return gs.get(An.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??zee}a(rte,"getHeaderTimeoutConfig")});var U0=T((AEe,L0)=>{"use strict";var{decode:ste}=require("msgpackr"),{isMainThread:TEe,parentPort:nte,threadId:REe}=require("worker_threads"),O0=$e(),On=De(),ite=N(),Nu=q(),g0=j(),N0=N();Ge();var ote=rn(),{recordAction:ate,recordActionBinary:cte}=($n(),Z(I_)),{publishToStream:ute}=O0,gEe={durable:On.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:On.WORK_QUEUE_CONSUMER_NAMES.deliver_group},lte,_te,dte,b0,y0;L0.exports={initialize:I0,workQueueListener:D0,setSubscription:fte,setIgnoreOrigin:hte,getDatabaseSubscriptions:Ete};async function I0(){y0=!0,Nu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await O0.getNATSReferences();lte=e,_te=e.info.server_name,dte=t,b0=r}a(I0,"initialize");var Of=new Map;function fte(e,t,r){let s=Of.get(e);s||Of.set(e,s=new Map),s.set(t,r),y0||I0().then(D0)}a(fte,"setSubscription");function Ete(){return Of}a(Ete,"getDatabaseSubscriptions");var w0;function hte(e){w0=e}a(hte,"setIgnoreOrigin");var C0=100,A0=new Array(C0),Af=0;async function D0(){let t=await(await b0.consumers.get(On.WORK_QUEUE_CONSUMER_NAMES.stream_name,On.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();nte?.on("message",async r=>{let{type:s}=r;s===N0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await A0[Af],A0[Af]=mte(r).catch(s=>{Nu.error(s)}),++Af>=C0&&(Af=0)}a(D0,"workQueueListener");async function mte(e){let t=ste(e.data);ate(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=g0.get(ite.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(On.MSG_HEADERS.TRANSACTED_NODES)&&r.values(On.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(On.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!w0),cte(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(On.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Nu.trace("processing message:",o,c,_,(l?"records: "+l.map(b=>b?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Nu.trace(`messageProcessor nats msg id: ${e.headers.get(On.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:g}=f||{},I=Of.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:ER(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:g});else{let b=l.map((Y,Q)=>({type:ER(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)b.push({type:ER(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:b,table:_,timestamp:p,onCommit:h,user:S,nodeName:g})}g0.get(N0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ute(e.subject.split(".").slice(0,-1).join("."),ote.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Nu.error(o)}e.ack()}a(mte,"messageProcessor");function ER(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ER,"convertOperation")});var RR={};Je(RR,{disableNATS:()=>Ste,publishToStream:()=>wf,setNATSReplicator:()=>hR,setPublishToStream:()=>Tte,setSubscription:()=>TR,start:()=>pte});function pte(){bf.default.get(yf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&>e()}function Ste(e=!0){H0=e}function Tte(e,t){wf=e,TR=t}function gte(){if(H0||process.env._DISABLE_NATS)return;let e=Es(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];hR(n,r,i)}}gR((r,s)=>{hR(r.tableName,r.databaseName,r),s&&F0(r)}),!M0&&(M0=!0)}function hR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends At{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){F0(i)}static subscribe(){let i=new rs;return TR(t,e,i),i}static subscribeOnThisThread(i){return i<Rte}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Nf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=q0;return i}a(s,"getNATSTransaction")}function F0(e){let t=bf.default.get(yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);wf(`${pR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,SR.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var P0,pR,SR,v0,B0,bf,yf,If,H0,wf,TR,Rte,q0,M0,Nf,mR,G0=Te(()=>{fe();ns();P0=L($e()),pR=L(De()),SR=L(rn());va();v0=L(U0()),B0=L(fr()),bf=L(j()),yf=L(N()),If=L(q());a(pte,"start");a(Ste,"disableNATS");wf=P0.publishToStream,TR=v0.setSubscription;a(Tte,"setPublishToStream");Rte=2;a(gte,"assignReplicationSource");a(hR,"setNATSReplicator");a(F0,"publishSchema");Nf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=bf.default.get(yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(If.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(wf(`${pR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,SR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw If.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},mR=class extends Nf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,B0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};q0=new mR});async function k0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await AR.getResource(e,{});n=new NR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await AR.get(e);i&&i.delete()}n=new Df(e,t)}return n}function OR(){return Cf++,Cf>65500&&(Cf=1),Cf}var x0,da,AR,Cf,Df,NR,V0=Te(()=>{fe();Zc();x0=L(fr()),da=L(q());fi();AR=tt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(k0,"getSession");Cf=1;a(OR,"getNextMessageId");Df=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,da.trace)("Resuming subscription from",n,"from",o);let h=ti.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,g=await ke(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of I)try{let Y;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"||s&&!s(b))continue;r?(b.topic=n,Y=this.needsAcknowledge(b)):(b.acknowledge?.(),Y=OR());let Q=b.id;Array.isArray(Q)&&(Q=Wo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,b.value,Y,t)}catch(Y){(0,da.warn)(Y)}})(),I});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=OR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=ti.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return ke(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},NR=class extends Df{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=OR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,da.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,x0.getNextMonotonicTime)()),(0,da.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),AR.put(this.sessionRecord)),t.qos}}});var yR={};Je(yR,{start:()=>Ote});async function Ote({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=K0(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,jr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Ate&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,W0.getSuperUser)());let{onMessage:u,onClose:_}=K0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,jr.info)("Socket error",l)})},{port:t,securePort:s})}function K0(e,t,r,s,n){Y0||(Y0=!0,Oc(d=>{Lf>0&&d.push({metric:"mqtt-connections",connections:Lf,byThread:!0})}));let i;Lf++;let o,c={protocolVersion:4},u=(0,Uf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Lf--,i||(i=!0,o?.disconnect(),xr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await lt.getUser(d.username,d.password.toString()),(0,bR.get)(Nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$0.notify({username:s.username,status:Nn.AUTH_AUDIT_STATUS.SUCCESS,type:Nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,bR.get)(Nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$0.error({username:s.username,status:Nn.AUTH_AUDIT_STATUS.FAILURE,type:Nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return xr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=k0({user:s,...d}),o=await o}catch(b){return(0,jr.error)(b),xr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:b.code||5,returnCode:b.code||128})}xr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((b,Y,Q,G)=>{try{let w=b.indexOf("/",1),K=w>0?b.slice(0,w):b;f({cmd:"publish",topic:b,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:G.qos},K)}catch(w){(0,jr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let b of d.subscriptions){let Y;try{Y=(await o.addSubscription(b,b.qos>=1)).qos||0}catch(Q){(0,jr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let b of d.unsubscriptions)o.removeSubscription(b);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ta(r?.headers.get?.("content-type"))),g=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,g)}catch(b){(0,jr.warn)(b),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),xr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,jr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Uf.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ri(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Uf,W0,bR,Nn,jr,$0,Ate,Y0,Lf,Q0=Te(()=>{Uf=require("mqtt-packet");V0();W0=L(Gr());Qo();$n();Br();bR=L(j()),Nn=L(N()),jr=L(q()),$0=(0,jr.loggerWithTag)("auth-event"),Ate=!0;a(Ote,"start");Lf=0;a(K0,"onSocket")});var J0,z0,IR,j0=Te(()=>{J0=require("os"),z0=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,J0.platform)()!="win32"&&(IR=require("node-unix-socket").createReuseportFd)});var Md={};Je(Md,{component_errors:()=>fa,loadComponent:()=>Mf,loadComponentDirectories:()=>oB,setErrorReporter:()=>Ite});function oB(e,t){t&&(CR=t),e&&(DR=e);let r=[];if((0,As.existsSync)(wR)){let n=(0,As.readdirSync)(wR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(wR,o);r.push(Mf(c,CR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Mf(s,CR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{iB=!0})}function Ite(e){Iu=e}async function Mf(e,t,r,s,n,i){if(!Z0.has(e)){Z0.set(e,!0),n&&(DR=n);try{let o;s&&(fa=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(c)?o=s?(0,nB.getConfigObj)():(0,eB.parseDocument)((0,As.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=LR;let u=[],_=s;for(let l in o){let d=o[l];if(fa.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,b;for(;!(0,As.existsSync)(b=(0,Rt.join)(I,"node_modules",l));)if(I=(0,Rt.dirname)(I),I.length<(0,sB.getHdbBasePath)().length){b=null;break}if(b)f=await Mf(b,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=yte[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,tt(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,g=!p?.https&&p?.port;if(bu.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:g,securePort:S,resources:t,...d})||f,s&&p))for(let I of[g,S])try{if(+I&&!X0.includes(I)){let b=UR.get(MR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);b&&yu.default.warn("Session affinity is not recommended and may cause memory leaks"),(b||!IR)&&(X0.push(I),h0(I,b))}}catch(b){console.error("Error listening on socket",I,b,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:g,securePort:S,resources:t,...d})||f),DR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,rB.handleHDBError)("Can not reference parent directories");let I=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),b=I.indexOf("/*");if(b>-1&&d.files!==LR[l]?.files&&!(0,As.existsSync)(I.slice(0,b)))throw new Error(`The path '${I.slice(0,b)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,tB.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:G}=Y;_=!0;let w=(0,Rt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Rt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(G.isFile()){let x=await bte(Q);bu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else bu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${G.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Iu?.(x),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(x),t.set(d.path||"/",new wu(x)),fa.set(s?l:(0,Rt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.basename)(e)}' due to: ${h.message}`,Iu?.(h),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(h),t.set(d.path||"/",new wu(h),null,!0),fa.set(s?l:(0,Rt.basename)(e),h.message)}}if(bu.isMainThread&&!iB&&i&&(0,Ea.watchDir)(e,async()=>oB()),o.extensionModule)return await pl((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Iu?.(new Error(l)),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(l),fa.set((0,Rt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Iu?.(o),t.set("",new wu(o))}}}var As,Rt,bu,eB,UR,MR,tB,Ea,yu,rB,sB,Nte,nB,bte,wR,DR,iB,CR,fa,yte,LR,X0,Z0,Iu,wu,Pd=Te(()=>{As=require("fs"),Rt=require("path"),bu=require("worker_threads"),eB=require("yaml"),UR=L(j()),MR=L(N());BA();GA();xA();gP();i0();l0();tB=L(require("fast-glob")),Ea=L(Ge()),yu=L(q());HE();Br();rB=L(X());ns();fe();m0();sB=L(j()),Nte=L(R0());bd();G0();Q0();nB=L(Tr());j0();({readFile:bte}=As.promises),wR=UR.get(MR.CONFIG_PARAMS.COMPONENTSROOT),DR=new Map,fa=new Map;a(oB,"loadComponentDirectories");yte={REST:Qd,rest:Qd,graphqlSchema:BE,jsResource:FE,fastifyRoutes:cR,login:xE,static:uR,operationsApi:Nte,customFunctions:{},http:{},clustering:RR,authentication:eu,mqtt:yR},LR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(LR,"static",{value:{files:"web/**"}});X0=[],Z0=new Map;a(Ite,"setErrorReporter");a(Mf,"loadComponent");wu=class extends At{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var uB=T((ZEe,cB)=>{var{isMainThread:aB}=require("worker_threads"),{getTables:wte}=(fe(),Z(Ce)),{loadComponentDirectories:Cte,loadComponent:Dte}=(Pd(),Z(Md)),{resetResources:Lte}=(Zc(),Z(xU)),Ute=sT(),Mte=Tr(),{dirname:Pte}=require("path"),{getConnection:vte}=$e(),Bte=j(),Hte=N(),PR=new Map;async function qte(e=!1){!aB&&Bte.get(Hte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&vte();try{aB&&await Ute()}catch(s){console.error(s)}let t=Lte();wte(),t.isWorker=e,await Dte(Pte(Mte.getConfigFilePath()),t,"hdb",!0,PR),await Cte(PR,t);let r=[];for(let[s]of PR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(qte,"loadRootComponents");cB.exports.loadRootComponents=qte});var Ge=T((the,oi)=>{"use strict";var{Worker:Fte,MessageChannel:Gte,parentPort:Ks,isMainThread:FR,threadId:xte,workerData:bn}=require("worker_threads"),{PACKAGE_ROOT:kte}=N(),{join:dB,isAbsolute:Vte,extname:$te}=require("path"),{server:fB}=(Br(),Z(ro)),{watch:Yte,readdir:Kte}=require("fs/promises"),{totalmem:lB}=require("os"),Bf=N(),Wte=j(),yn=q(),{randomBytes:Qte}=require("crypto"),{_assignPackageExport:zte}=require("../index"),Jte=N(),jte=1024*1024,ii=[],Xr=[],Xte=50,GR=1e4,Zte="restart",EB="request_thread_info",hB="resource_report",mB="thread_info",pB="added-port",ere="ack",vR;zte("threads",Xr);oi.exports={startWorker:BR,restartWorkers:kR,shutdownWorkers:ire,workers:ii,setMonitorListener:fre,onMessageFromWorkers:ore,onMessageByType:OB,broadcast:cre,broadcastWithAcknowledgement:lre,setChildListenerByType:nre,getWorkerIndex:SB,getWorkerCount:TB,getTicketKeys:RB,setMainIsWorker:rre,setTerminateTimeout:tre,restartNumber:bn?.restartNumber||1};Xr.onMessageByType=OB;Xr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Xr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var xR;function tre(e){GR=e}a(tre,"setTerminateTimeout");function SB(){return bn?bn.workerIndex:xR?0:void 0}a(SB,"getWorkerIndex");function TB(){return bn?bn.workerCount:xR?1:void 0}a(TB,"getWorkerCount");function rre(e){xR=e}a(rre,"setMainIsWorker");var Pf;function RB(){return Pf||(Pf=FR?Qte(48):bn.ticketKeys,Pf)}a(RB,"getTicketKeys");Object.defineProperty(fB,"workerIndex",{get(){return SB()}});Object.defineProperty(fB,"workerCount",{get(){return TB()}});var gB={[EB](e,t){_re(t)},[hB](e,t){dre(t,e)}};function BR(e,t={}){let r=process.constrainedMemory?.()||lB();r=Math.min(r,lB());let s=Math.max(Math.floor(r/jte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Xr){let _=new Gte;_.existingPort=u,i.push(_),o.push(_.port2)}$te(e)||(e+=".js");let c=new Fte(Vte(e)?e:dB(kte,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:oi.exports.restartNumber,ticketKeys:RB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:pB,port:u,threadId:c.threadId},[u]);return Hf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>BR(e,t),c.on("error",u=>{console.error("Worker error:",u),yn.error("Worker error:",u)}),c.on("exit",u=>{ii.splice(ii.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Xte?(t.unexpectedRestarts=c.unexpectedRestarts+1,BR(e,t)):yn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{gB[u.type]?.(u,c)}),ii.push(c),hre(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(BR,"startWorker");var sre=[Bf.THREAD_TYPES.HTTP];async function kR(e=null,t=2,r=!0){if(FR){if(r){let{loadRootComponents:o}=uB();await o()}oi.exports.restartNumber++,t<1&&(t=t*ii.length);let s=[],n=[];for(let o of ii.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;yn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:oi.exports.restartNumber,type:Bf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=sre.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),GR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Jte.ITC_EVENT_TYPES.CHILD_STARTED&&(yn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");yn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Rd();r&&(e==="http"||!e)&&Wte.get(Bf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ks.postMessage({type:Zte,workerType:e})}a(kR,"restartWorkers");function nre(e,t){gB[e]=t}a(nre,"setChildListenerByType");function ire(e){return kR(e,1/0,!1)}a(ire,"shutdownWorkers");var AB=[];function ore(e){AB.push(e)}a(ore,"onMessageFromWorkers");var HR=new Map;function OB(e,t){let r=HR.get(e);r||HR.set(e,r=[]),r.push(t)}a(OB,"onMessageByType");var are=10;async function cre(e){let t=0;for(let r of Xr)try{r.postMessage(e),t++>are&&(t=0,await new Promise(setImmediate))}catch(s){yn.error("Unable to send message to worker",s)}}a(cre,"broadcast");var vf=new Map,ure=1;function lre(e){return new Promise(t=>{let r=0;for(let s of Xr)try{let n=ure++,i=a(()=>{vf.delete(n),--r===0&&t(),s!==Ks&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,vf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of vf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yn.error("Unable to send message to worker",n)}r===0&&t()})}a(lre,"broadcastWithAcknowledgement");function _re(e){e.postMessage({type:mB,workers:NB()})}a(_re,"sendThreadInfo");function NB(){let e=Date.now();return ii.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(NB,"getChildWorkerInfo");function dre(e,t){e.resources=t,e.resources.updated=Date.now()}a(dre,"recordResourceReport");var qR;function fre(e){qR=e}a(fre,"setMonitorListener");var Ere=1e3,_B=!1;function hre(){_B||(_B=!0,setInterval(()=>{for(let e of ii){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}qR&&qR()},Ere).unref())}a(hre,"startMonitoring");var mre=1e3;if(Ks){Hf(Ks);for(let e=0,t=bn.addPorts.length;e<t;e++){let r=bn.addPorts[e];r.threadId=bn.addThreadIds[e],Hf(r)}setInterval(()=>{let e=process.memoryUsage();Ks.postMessage({type:hB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},mre).unref(),vR=a(()=>new Promise((e,t)=>{Ks.on("message",r),Ks.postMessage({type:EB});function r(s){s.type===mB&&(Ks.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else vR=NB;oi.exports.getThreadInfo=vR;function Hf(e,t){Xr.push(e),e.on("message",r=>{if(r.type===pB)r.port.threadId=r.threadId,Hf(r.port);else if(r.type===ere){let s=vf.get(r.id);s&&s()}else{for(let n of AB)n(r,e);let s=HR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yn.error(i)}}}).on("close",()=>{Xr.splice(Xr.indexOf(e),1)}).on("exit",()=>{Xr.splice(Xr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Hf,"addPort");if(FR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Kte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(dB(s,i.name));try{for await(let{filename:i}of Yte(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await kR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");oi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ks.on("message",async e=>{let{type:t}=e;t===Bf.ITC_EVENT_TYPES.SHUTDOWN&&(oi.exports.restartNumber=e.restartNumber,Ks.unref(),setTimeout(()=>{yn.warn("Thread did not voluntarily terminate",xte),process.exit(0)},GR).unref())})});function yB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ha||((0,Du.onMessageByType)(bB,d=>{IB(d.path)}),(0,Du.onMessageByType)(pre,d=>{(0,Cu.trace)("confirming to proceed with txn",d.txnId)}),ha=Object.create(null));let c=ha[i]||(ha[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Wo(t);let _=new $R(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function IB(e,t){if(!ha)return;let r=ha[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:VR,exclusiveStart:!0})){VR=n;let o=hr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Wo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Cu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Cu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},VR,!0)}function wB(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Du.broadcast)({type:bB,path:n}),IB(n,!0)})}}var Cu,Du,bB,pre,ha,ahe,$R,VR,CB=Te(()=>{Cu=L(q()),Du=L(Ge());va();Zc();io();bB="transaction",pre="transaction-await",ahe=Buffer.alloc(4096);a(yB,"addSubscription");$R=class extends rs{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},VR=Date.now();a(IB,"notifyFromTransactionData");a(wB,"listenToCommits")});var $T={};Je($T,{coerceType:()=>kf,makeTable:()=>Yf,setServerUtilities:()=>yre,updateResource:()=>Pu});function Yf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),wB(i,u);let S=uh(i,s,u),g=0,I,b,Y,Q={},G=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Pt=2,ve={},gt={},es=864e5,dg,Yu,LH=10,UH=6;E&&hg();class ct extends At{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return($,z,oe)=>{if($?.source!==M)return M[y](z,oe,$)}}else return(M,$,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y]($,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],D=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,$)=>{if(!U?.source)return R[y](M,$,U)}},"getApplyToCanonicalSource");return ve={put:D("put"),delete:D("delete"),publish:D("publish")},gt={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,$)=>{let z=M.value,oe=M.table?Ve[c][M.table]:ct;if(c===Os.SYSTEM_SCHEMA_NAME&&(M.table===Os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,$,Lu);switch(M.type){case"put":return k._writeUpdate(z,Lu);case"delete":return k._writeDelete(Lu);case"publish":return k._writePublish(z,Lu);case"invalidate":return k.invalidate(Lu);default:Qe.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let $=m.subscribeOnThisThread?m.subscribeOnThisThread((0,zi.getWorkerIndex)()):(0,zi.getWorkerIndex)()===0,z=M&&$&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Qe.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=ke(k,()=>{if(k.type==="transaction"){let ne=[];for(let vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(ui=>ui.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(tt({table:n,database:c,attributes:ne,origin:"cluster"}),Bu.signalSchemaChange(new Hu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});y&&(await Ne,Bu.signalUserChange(new Hu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Qe.error("error in subscription handler",Ee)}}}catch(M){Qe.error(M)}})(),this}static getResource(m,A,C){let R=super.getResource(m,A,C);if(m!=null){Ra(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let D=!C?.async||i.cache?.get(m),y=Cn(A),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return fg(m,A,{transaction:U},D,M=>{if(M?Pu(R,M):R[Re]=null,A.onlyIfCached&&A.noCacheStore){if(!R.doesExist())throw new Qs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let $=cE(m,M,A,R);if($)return y?.disregardReadTxn(),R[KR]=!0,QR($,z=>(Pu(R,z),R))}return R})}catch(D){throw D.message.includes("Unable to serialize object")&&(D.message+=": "+JSON.stringify(m)),D}}return R}ensureLoaded(){let m=cE(this[Ie],this[Ws],this[me]);if(m)return this[KR]=!0,QR(m,A=>{this[Ws]=A,this[Re]=A.value,this[xf]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,es=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");es=es||(d+f)/4,uE()}static enableAuditing(m=!0){E=m,m&&hg(),ct.audit=m}static coerceId(m){return m===""?null:kf(m,Q)}static async dropTable(){if(delete Ve[c][n],c===o){for(let m of p)l.remove(ct.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ct.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Bu.signalSchemaChange(new Hu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[is])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=Wu(m);if(C?.read){let R=C.attribute_permissions;if(R){A||(A={});let D=A.select;if(D){let y=WR(R,"read");A.select=D.filter(U=>y[U])}else A.select=R.filter(y=>y.read).map(y=>y.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=Wu(m);if(C?.update){let R=C.attribute_permissions;if(R){let D=WR(R,"update");for(let y in A)if(!D[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[is]){let C=Wu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let D=WR(R,"insert");for(let y in A)if(!D[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Wu(m)?.delete}update(m,A){if(!Cn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let D in this[Re])m[D]===void 0&&(m[D]=void 0);this[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Ra(C),Cn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ws],nodeName:this[me]?.nodeName,before:ve.invalidate?.bind(this,A,C),beforeIntermediate:gt.invalidate?.bind(this,A,C),commit:(D,y)=>{if(y?.version>D)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Ws],D,qf,E,this[me],0,"invalidate")}})}static evict(m,A,C){let R=this.Source,D;if(!((b||E)&&(!A||(D=i.getEntry(m),!D||!A)||D.version!==C))){if(b){if(i.hasLock(m,D.version))return;let y;for(let U in r)y||(y={}),y[U]=A[U];if(y){S(m,y,D,C,Ff,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Ku(m,A,null)}),E)S(m,null,D,C,Ff,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,BB.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],R=Cn(C),D=this[Ie];Ra(D);let y=this[Ws];this[YR]=!0;let U={key:D,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[LB]||al(m)){if(this.validate(m),C?.source?m=Ba(m):(t&&m[t]!==D&&(m[t]=D),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Ba(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:ve.put&&(()=>ve.put(C,D,m)),beforeIntermediate:gt.put&&(()=>gt.put(C,D,m)),commit:(M,$,z)=>{z&&(C&&$?.version>(C.lastModified||0)&&(C.lastModified=$.version),Pu(this,$));let oe=$?.value;this[YR]=!1,Qe.trace("Checking timestamp for put",D,$?.version>M,$?.version,M),!($?.version>M)&&(Ku(D,oe,m),S(D,m,$,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[is]){for await(let A of this.search(m))(await ct.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let A=Cn(this[me]),C=this[Ie];Ra(C);let R=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:ve.delete?.bind(this,R,C),beforeIntermediate:gt.delete?.bind(this,R,C),commit:(D,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),Pu(this,y)),!(y?.version>D)&&(Ku(this[Ie],M),Qe.trace("Write delete entry",C,D),E||h?(S(C,null,this[Ws],D,0,E,this[me],0,"delete"),E||uE()):i.remove(this[Ie]))}}),!0}search(m){let A=Cn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(R=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=D(k.value,Ne):k[1]=D(k[1],Ne));else if(Ee!=null)throw(0,Qs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function D(k,Ee){return Array.isArray(k)?k.map(Ne=>kf(Ne,Ee)):kf(k,Ee)}a(D,"coerceTypedValues"),R.length>1&&(R=(0,vB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Mu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Mu.SEARCH_TYPES.CONTAINS||Ee===Mu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Mu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=Rre:k.estimated_count=Tre}return k.estimated_count}));let y=A.getReadTxn();y.use();let U=m.select,M=R[0],$;if(!M)$=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Gf.SKIP);else{let k=DE(M,y,C,ct,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(LE);$=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=DE(ne,y,C,ct,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),$=oe(k)}}(m.offset||m.limit!==void 0)&&($=$.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),$.onDone=()=>{$.onDone=null,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ui,Fe){if(vt&&Fe!==void 0){let lr=!z.onlyIfCached&&cE(Fe,ui,z,this);if(lr)return lr.then(vH=>Vt(vH))}let bs=ui?.value;if(!bs)return Gf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return Gf.SKIP;return bs}return a(Vt,"processEntry"),k.map(ui=>fg(ui,z,ne,!1,Vt))}return a(oe,"idsToRecords"),$}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=yB(ct,this[Ie]??null,function(y,U,M,$){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:$})}catch(z){Qe.error(z)}},m.startTime,this[is]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],R=m.previousCount;R>1e3&&(R=1e3);let D=m.startTime;if(this[is]){if(D){if(R)throw new Qs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let M=hr(U,i);if(M.tableId!==s)continue;let $=M.recordId;(C==null||PB(C,$))&&A.send({id:$,timestamp:y,...M}),A.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let $=hr(M);if($.tableId!==s)continue;let z=$.recordId;if(C==null||PB(C,z)){let oe=$.getValue(i);if(y.push({id:z,timestamp:U,value:oe,version:$.version,type:$.type}),--R<=0)break}}catch($){Qe.error("Error getting history entry",U,$)}for(let U=y.length;U>0;)A.send(y[--U]);y[0]&&(A.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:$}of i.getRange({start:C??!1,end:C==null?void 0:[C,Vf.MAXIMUM_KEY],versions:!0}))U&&A.send({id:y,version:M,timestamp:$,value:U})}else{R&&!D&&(D=0);let y=this[Ws]?.localTime;if(Qe.trace("Subscription from",D,"from",C),D<y){let U=[],M=y;do{let $=u.get(M);if($){m.omitCurrent=!0;let z=hr($),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>D&&R!==0);for(let $=U.length;$>0;)A.send(U[--$]);A.startTime=y}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[xf],timestamp:this[Ws]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[Re]||this[YR])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Cn(this[me]),R=this[Ie]||null;Ra(R);let D=this[me];C.addWrite({key:R,store:i,entry:this[Ws],nodeName:D?.nodeName,validate:()=>{this.validate(m)},before:ve.publish?.bind(this,D,R,m),beforeIntermediate:gt.publish?.bind(this,D,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&uE(),S(R,U?.value??null,U,U?.version||y,0,!0,D,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((R,D,y)=>{if(D.type&&R!=null)if(D.properties){typeof R!="object"&&(A||(A=[])).push(`Property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let M=0,$=U.length;M<$;M++){let z=U[M],oe=C(R[z.name],z,y+"."+z.name);oe&&(R[z.name]=oe)}}else switch(D.type){case"Int":(typeof R!="number"||R>>0!==R)&&(A||(A=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(A||(A=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(A||(A=[])).push(`Property ${y} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(A||(A=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof R!="boolean"&&(A||(A=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(A||(A=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(A||(A=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(D.elements)for(let U=0,M=R.length;U<M;U++){let $=R[U],z=C($,D.elements,y+"[*]");z&&(R[U]=z)}}else(A||(A=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&R==null&&(A||(A=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let R=0,D=p.length;R<D;R++){let y=p[R],U=C(m[y.name],y,y.name);U&&(m[y.name]=U)}if(A)throw new Qs.ClientError(A.join(". "))}getUpdatedTime(){return this[xf]}wasLoadedFromSource(){return b?!!this[KR]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new Qs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Qs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return tt({table:n,database:c,schemaDefined:_,attributes:A}),ct.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return tt({table:n,database:c,schemaDefined:_,attributes:A}),ct.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,R=1e3,D;A>C&&!m?.exactCount&&(D=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:D}))U!=null&&y++;if(D){let U=y;y=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:D}))vt!=null&&y++;let M=D*2,$=(y+U)/M,z=Math.pow((y-U+1)/D/2,2)+$*(1-$)/M,oe=Math.max(Math.sqrt(z)*A,1),k=Math.round($*A),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,A),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){ul(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Uu(),hr(R).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:A})){await Uu();let D=hr(R);D.tableId===s&&(yield{id:D.recordId,localTime:C,version:D.version,type:D.type,value:D.getValue(i),user:D.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let R=C.localTime,D=0;do{await Uu();let y=u.get(R);if(y){let U=hr(y);A.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(D<1e3&&R);return A.reverse()}static cleanup(){x?.remove()}}ct.updatedAttributes();let MH=ct.prototype;return MH[LB]=!0,d&&ct.setTTLExpiration(d/1e3),B&&PH(),ct;function Ku(W,m,A){let C;for(let R in r){let D=r[R],y=D.isIndexing,U=A?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let $=(0,vu.getIndexedValues)(M);if($){DB&&D.prefetch($.map(z=>({key:z,value:W})),MB);for(let z=0,oe=$.length;z<oe;z++)D.remove($[z],W)}if($=(0,vu.getIndexedValues)(U),$){DB&&D.prefetch($.map(z=>({key:z,value:W})),MB);for(let z=0,oe=$.length;z<oe;z++)D.put($[z],W)}}return C}a(Ku,"updateIndices");function Ra(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>UB)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Vf.writeKey)(W,Nre,0)>UB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ra,"checkValidId");function fg(W,m,A,C,R){let D=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return R(null,W);let y=i.getEntry(W,A);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?D():se>0?(se--,D()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),$()})):(te.push(W),be.push($),te.length>UH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<LH&&Pt++}a(M,"prefetch");function $(){try{y(D())}catch(z){U(z)}}a($,"load")})}a(fg,"loadLocalRecord");function Wu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return bre;let A=m[c],C,R=A?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(Wu,"getTablePermissions");function cE(W,m,A,C){if(b){let R;if(A.noCache?R=!0:(m?(!m.value||m.metadataFlags&(qf|Ff)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,xr(!R,"cache-hit",n)),R){let D=Eg(W,m,A).then(y=>(y?.value?.[Re]&&Qe.error("Can not assign a record with a record property"),A&&(y?.version>(A.lastModified||0)&&(A.lastModified=y.version),A.lastRefreshed=Date.now()),y));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(D.catch(y=>Qe.warn(y)),A?.onlyIfCached&&!C.doesExist())throw new Qs.ServerError("Entry is not cached",504);return}else return D}}}a(cE,"ensureLoadedFromSource");function Cn(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new di,m.lmdbDb=i,m;m=A}while(!0)}else return new dl}a(Cn,"txnForContext");async function Eg(W,m,A){let C=m?.metadataFlags,R=m?.version,D,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(qf|Ff)?D(Eg(W,i.getEntry(W),A)):D(z)}))return new Promise(z=>{D=z,y=setTimeout(()=>{i.unlock(W,R)},Ore)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:R,source:null,resourceCache:A?.resourceCache},$=A?.responseHeaders;return new Promise((z,oe)=>{let k;QR(ke(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of ct.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;Vt=C&qf;let Fe=M.lastModified||Vt&&R;vt=Vt||Fe>R||!U,Fe||(Fe=(0,vu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(Nr(bs,"cache-resolution",n),$&&$.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=Fe,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:Fe,value:ne})}catch(Fe){Fe.message+=` while resolving record ${W} for ${n}`,U&&((Fe.code==="ECONNRESET"||Fe.code==="ECONNREFUSED"||Fe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(Fe.statusCode===500||Fe.statusCode===502||Fe.statusCode===503||Fe.statusCode===504))?(z({version:R,value:U}),Qe.trace(Fe.message,"(returned stale record)")):oe(Fe),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Cn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(Fe,bs)=>{if(bs?.version!==R)return;let lr=Ku(W,U,ne);ne?(gt.put?.(M,W,ne),S(W,ne,bs,Fe,0,E&&vt||null,M,M.expiresAt,"put",!!Vt)):(gt.delete?.(M,W),E||h?S(W,null,bs,Fe,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Qe.error("Error committing cache update",Ee)})})}a(Eg,"getFromSource");function uE(){if(es!==dg&&(dg=es,(0,zi.getWorkerIndex)()===(0,zi.getWorkerCount)()-1)){if(Yu&&clearTimeout(Yu),!es)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/es)*es+W.getTime(),A=a(C=>{Qe.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Yu=setTimeout(()=>G=G.then(async()=>{if(A(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(Yu);return}Qe.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:D,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+Are<Date.now()?i.remove(D,U):M&&M+f<Date.now()&&(ct.evict(D,y,U),R++),await Uu();Qe.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Qe.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(uE,"scheduleCleanup");function hg(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(hg,"addDeleteRemoval");function PH(){(0,zi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&ct.evict(A,C.value,C.version),await Uu()}}catch(W){Qe.error("Error in evicting old records",W)}},gre).unref()}a(PH,"runRecordExpirationEviction")}function WR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function MB(){}function yre(e){BB=e}function kf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Ire.test(e)&&(e+="Z"),new Date(e)):r?e:(0,$f.autoCast)(e)}function PB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function QR(e,t,r){return e?.then?e.then(t,r):t(e)}function Pu(e,t){e[Ws]=t,e[Re]=t?.value??null,e[xf]=t?.version}var Os,Gf,vu,vB,Mu,qu,Qs,Bu,Hu,Qe,Vf,zi,$f,Sre,BB,Tre,Rre,gre,Are,DB,Ore,xf,LB,Ws,YR,KR,Lu,qf,Ff,Nre,UB,bre,Nhe,Ire,Uu,cf=Te(()=>{Os=L(N()),Gf=require("lmdb"),vu=L(fr()),vB=require("lodash");ns();wE();Mu=L(je()),qu=L(j());CB();Qs=L(X()),Bu=L(an()),Hu=L(_s());fe();El();Qe=L(q());_l();fi();Vf=require("ordered-binary"),zi=L(Ge());io();$f=L(V());xa();$n();Sre=new Uint8Array(9);Sre[8]=192;Tre=1e8,Rre=1e7,gre=6e4,Are=864e5;qu.initSync();DB=qu.get(Os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ore=1e4,xf=Symbol.for("version"),LB=Symbol.for("incremental-update"),Ws=Symbol("entry"),YR=Symbol("is-saving"),KR=Symbol("loaded-from-source"),Lu={isNotification:!0,ensureLoaded:!1},qf=1,Ff=8,Nre=Buffer.allocUnsafeSlow(8192),UB=1978,bre={read:!0,insert:!0,update:!0,delete:!0},Nhe=(0,$f.convertToMS)(qu.get(Os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Yf,"makeTable");a(WR,"attributesAsObject");a(MB,"noop");a(yre,"setServerUtilities");Ire=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(kf,"coerceType");a(PB,"isDescendantId");Uu=a(()=>new Promise(setImmediate),"rest");a(QR,"when");a(Pu,"updateResource")});var Ce={};Je(Ce,{database:()=>mc,databases:()=>Ve,dropDatabase:()=>sp,dropTableMeta:()=>Mre,getDatabases:()=>Es,getTables:()=>wre,onUpdatedTable:()=>gR,readMetaDb:()=>Fu,resetDatabases:()=>Cre,table:()=>tt,tables:()=>Er});function wre(){return Jf||Es(),Er||{}}function Es(){if(Jf)return Ve;Jf=!0,Sa=new Map;let e=(0,kt.getHdbBasePath)()&&(0,xe.join)((0,kt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),t=(0,kt.get)(Dr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(Dr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Cr.existsSync)(e)?e:(0,xe.join)((0,kt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Cr.existsSync)(e))for(let r of(0,Cr.readdirSync)(e,{withFileTypes:!0})){let s=(0,xe.basename)(r.name,".mdb");r.isFile()&&(0,xe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Fu((0,xe.join)(e,r.name),null,s)}if((0,Cr.existsSync)((0,pa.getBaseSchemaPath)())){for(let r of(0,Cr.readdirSync)((0,pa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,xe.join)((0,pa.getBaseSchemaPath)(),r.name),n=(0,xe.join)((0,pa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Cr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,xe.join)(n,i.name);Fu((0,xe.join)(s,i.name),(0,xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Cr.existsSync)(n))for(let o of(0,Cr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,xe.extname)(o.name).toLowerCase()===".mdb"&&Fu((0,xe.join)(n,o.name),(0,xe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,xe.join)(c.path,(0,xe.basename)(o+".mdb"));(0,Cr.existsSync)(u)&&Fu(u,o,r,null,!0)}}for(let r in Ve){let s=Sa.get(r);if(s){let n=Ve[r];r.includes("delete")&&Zr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Zr.trace(`delete table class ${i}`),delete n[i])}else if(delete Ve[r],r==="data"){for(let n in Er)delete Er[n];delete Er[jf]}}return Sa=null,Ve}}function Cre(){Jf=!1;for(let[,e]of ai)e.needsDeletion=!0;Es();for(let[e,t]of ai)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ai.delete(e));return Ve}function Fu(e,t,r=jR,s,n){let i=new zR.default(e,!1);try{let o=ai.get(e);o?o.needsDeletion=!1:(o=(0,Wf.open)(i),ai.set(e,o));let c=new Ji.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Kf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Cr.existsSync)(s)&&(i.path=s,_=(0,Wf.open)(i),_.isLegacy=!0):_=Rl(o));let l=GB(r),d=l[jf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let g=f.get(p);g||f.set(p,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){Zr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let g=l[E],I={},b=[],Y,Q,G=typeof S.audit=="boolean"?S.audit:(0,kt.get)(Dr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(g)I=g.indices,b=g.attributes,g.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ma)||0)&&u.putSync(ma,Y+1):(S.tableId=Y=u.get(ma),Y||(Y=1),u.putSync(ma,Y+1),u.putSync(S.key,S));let x=new Ji.default(!S.is_hash_attribute,S.is_hash_attribute);Q=bl(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new Ji.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=b.find(be=>be.name===x.name);te?b.splice(b.indexOf(te),1,x):b.push(x)}}catch(te){Zr.error("Error trying to update attribute",x,b,I,te)}}if(!g){g=xB(l,E,Yf({primaryStore:Q,auditStore:_,audit:G,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let x of XR)x(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function GB(e){let t=Ve[e];if(t||(e==="data"?t=Ve[e]=Er:e==="system"?Object.defineProperty(Ve,"system",{value:t=Object.create(null),configurable:!0}):t=Ve[e]=Object.create(null)),Sa&&!Sa.has(e)){let r=new Set;t[jf]=r,Sa.set(e,r)}return t}function xB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=jR),Es();let r=GB(e),s=(0,xe.join)((0,kt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),n=(0,kt.get)(Dr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,kt.get)(Dr.CONFIG_PARAMS.STORAGE_PATH)||((0,Cr.existsSync)(s)?s:(0,xe.join)((0,kt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME));let o=(0,xe.join)(s,(i?t:e)+".mdb"),c=ai.get(o);if(!c){let u=new zR.default(o,!1);c=(0,Wf.open)(u),ai.set(o,c)}return c}async function sp(e){if(!Ve[e])throw new Error("Schema does not exist");let t=Ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;ai.delete(n.path),n.status==="open"&&(await n.close(),await HB.remove(n.path))}if(e==="data"){for(let r in Er)delete Er[r];delete Er[jf]}delete Ve[e]}function tt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=jR);let l=mc({database:t,table:e}),d=Ve[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let g=new Ji.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let I,b;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=Rl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,kt.get)(Dr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new Ji.default(!1,!0),B=e+"/",x=bl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Kf.INTERNAL_DBIS_NAME,g),x.tableId=S.get(ma),x.tableId||(x.tableId=1),S.putSync(ma,x.tableId+1),h.tableId=x.tableId,f=xB(d,e,Yf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,G(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Kf.INTERNAL_DBIS_NAME,g)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){G(),I=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),I=!0,G(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Ji.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gu.workerData?.restartNumber)&&(I=!0,G(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gu.workerData?.restartNumber)&&(I=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(I=!0,G(),S.put(K,w))}}finally{b&&b()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Zr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Ure(f,Q,Y):I&&Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of XR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function G(){b||l.transactionSync(()=>({then(w){b=w}}))}a(G,"startTxn")}async function Ure(e,t,r){try{let s=e.schemaVersion;await Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,qB.getIndexedValues)(l[h]);if(p)for(let S=0,g=p.length;S<g;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Zr.error(f)}),Gu.workerData&&Gu.workerData.restartNumber!==FB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Dre?await n:u>Lre&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function Mre({table:e,database:t}){let r=mc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function gR(e){XR.push(e)}var kt,Kf,Wf,xe,Cr,pa,Ji,zR,Dr,HB,JR,qB,Qf,zf,Gu,Zr,FB,jR,jf,Er,Ve,ma,XR,Jf,ai,Sa,Dre,Lre,fe=Te(()=>{kt=L(j()),Kf=L(je()),Wf=require("lmdb"),xe=require("path"),Cr=require("fs"),pa=L(Be());cf();Ji=L(yl()),zR=L(wl()),Dr=L(N()),HB=L(require("fs-extra")),JR=require("../index"),qB=L(fr()),Qf=L(an()),zf=L(_s()),Gu=require("worker_threads"),Zr=L(q()),FB=L(Ge());io();xa();jR="data",jf=Symbol("defined-tables");(0,kt.initSync)();Er=Object.create(null),Ve=Object.create(null);(0,JR._assignPackageExport)("databases",Ve);(0,JR._assignPackageExport)("tables",Er);ma=Symbol.for("next-table-id"),XR=[],ai=new Map;a(wre,"getTables");a(Es,"getDatabases");a(Cre,"resetDatabases");a(Fu,"readMetaDb");a(GB,"ensureDB");a(xB,"setTable");a(mc,"database");a(sp,"dropDatabase");a(tt,"table");Dre=1e3,Lre=10;a(Ure,"runIndexing");a(Mre,"dropTableMeta");a(gR,"onUpdatedTable")});var V=T((Mhe,tH)=>{"use strict";var ci=require("path"),KB=require("fs-extra"),ur=q(),kB=require("fs-extra"),Xf=require("os"),Pre=require("net"),vre=require("recursive-iterator"),ze=N(),Bre=Qg(),VB=require("papaparse"),Zf=require("moment"),{inspect:Hre}=require("util"),$B=require("is-number"),Uhe=require("lodash"),qre=require("minimist"),Fre=require("https"),Gre=require("http"),{hdb_errors:eE}=X(),xre=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,WB=require("util").promisify(setTimeout),kre=100,Vre=5,$re="",Yre=4,YB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};tH.exports={isEmpty:Lr,isEmptyOrZeroLength:zs,arrayHasEmptyValues:Qre,arrayHasEmptyOrZeroLengthValues:zre,buildFolderPath:Jre,isBoolean:QB,errorizeMessage:Kre,stripFileExtension:Xre,autoCast:Zre,autoCastJSON:zB,autoCastJSONDeep:eg,removeDir:ese,compareVersions:tse,isCompatibleDataVersion:rse,escapeRawValue:sse,unescapeValue:nse,stringifyProps:ise,timeoutPromise:ase,isClusterOperation:use,getClusterUser:_se,checkGlobalSchemaTable:lse,getHomeDir:jB,getPropsFilePath:ose,promisifyPapaParse:dse,removeBOM:XB,createEventPromise:fse,checkProcessRunning:Ese,checkSchemaTableExist:hse,checkSchemaExists:ZB,checkTableExists:eH,getStartOfTomorrowInSeconds:mse,getLimitKey:pse,isObject:jre,isNotEmptyAndHasValue:Wre,autoCasterIsNumberCheck:JB,backtickASTSchemaItems:Sse,isPortTaken:cse,createForkArgs:Tse,autoCastBoolean:Rse,async_set_timeout:WB,getTableHashAttribute:gse,doesSchemaExist:Ase,doesTableExist:Ose,stringifyObj:Nse,ms_to_time:bse,changeExtension:yse,getEnvCliRootPath:tg,noBootFile:Ise,httpRequest:wse,transformReq:Cse,convertToMS:Dse,PACKAGE_ROOT:ze.PACKAGE_ROOT};function Kre(e){return e instanceof Error?e:new Error(e)}a(Kre,"errorizeMessage");function Lr(e){return e==null}a(Lr,"isEmpty");function Wre(e){return!Lr(e)&&(e||e===0||e===""||QB(e))}a(Wre,"isNotEmptyAndHasValue");function zs(e){return Lr(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function Qre(e){if(Lr(e))return!0;for(let t=0;t<e.length;t++)if(Lr(e[t]))return!0;return!1}a(Qre,"arrayHasEmptyValues");function zre(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(zre,"arrayHasEmptyOrZeroLengthValues");function Jre(...e){try{return e.join(ci.sep)}catch{console.error(e)}}a(Jre,"buildFolderPath");function QB(e){return Lr(e)?!1:e===!0||e===!1}a(QB,"isBoolean");function jre(e){return Lr(e)?!1:typeof e=="object"}a(jre,"isObject");function Xre(e){return zs(e)?$re:e.slice(0,-Yre)}a(Xre,"stripFileExtension");function Zre(e){return Lr(e)||e===""||typeof e!="string"?e:YB[e]!==void 0?YB[e]:JB(e)===!0?Number(e):xre.test(e)?new Date(e):e}a(Zre,"autoCast");function zB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(zB,"autoCastJSON");function eg(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=eg(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=eg(r);s!==r&&(e[t]=s)}return e}else return zB(e)}a(eg,"autoCastJSONDeep");function JB(e){if(e.startsWith("0.")&&$B(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&$B(e))}a(JB,"autoCasterIsNumberCheck");async function ese(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await kB.emptyDir(e),await kB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(ese,"removeDir");function tse(e,t){if(zs(e)){ur.info("Invalid current version sent as parameter.");return}if(zs(t)){ur.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(tse,"compareVersions");function rse(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(rse,"isCompatibleDataVersion");function sse(e){if(Lr(e))return e;let t=String(e);return t==="."?ze.UNICODE_PERIOD:t===".."?ze.UNICODE_PERIOD+ze.UNICODE_PERIOD:t.replace(ze.FORWARD_SLASH_REGEX,ze.UNICODE_FORWARD_SLASH)}a(sse,"escapeRawValue");function nse(e){if(Lr(e))return e;let t=String(e);return t===ze.UNICODE_PERIOD?".":t===ze.UNICODE_PERIOD+ze.UNICODE_PERIOD?"..":String(e).replace(ze.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(nse,"unescapeValue");function ise(e,t){if(Lr(e))return ur.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+Xf.EOL}!zs(s)&&s[0]===";"?r+=" "+s+n+Xf.EOL:zs(s)||(r+=s+"="+n+Xf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(ise,"stringifyProps");function jB(){let e;try{e=Xf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(jB,"getHomeDir");function ose(){let e=ci.join(jB(),ze.HDB_HOME_DIR_NAME,ze.BOOT_PROPS_FILE_NAME);return KB.existsSync(e)||(e=ci.join(__dirname,"../","hdb_boot_properties.file")),e}a(ose,"getPropsFilePath");function ase(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ase,"timeoutPromise");async function cse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Pre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(cse,"isPortTaken");function use(e){try{return ze.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(use,"isClusterOperation");function lse(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(lse,"checkGlobalSchemaTable");function _se(e,t){if(Lr(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Lr(e)||zs(e)){ur.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){ur.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ur.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(_se,"getClusterUser");function dse(){VB.parsePromise=function(e,t,r){return new Promise(function(s,n){VB.parse(e,{header:!0,transformHeader:XB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(dse,"promisifyPapaParse");function XB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(XB,"removeBOM");function fse(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${Hre(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(fse,"createEventPromise");async function Ese(e){let t=!0,r=0;do await WB(kre*r++),(await Bre.findPs(e)).length>0&&(t=!1);while(t&&r<Vre);if(t)throw new Error(`process ${e} was not started`)}a(Ese,"checkProcessRunning");function hse(e,t){let r=ZB(e);if(r)return r;let s=eH(e,t);if(s)return s}a(hse,"checkSchemaTableExist");function ZB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ZB,"checkSchemaExists");function eH(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eH,"checkTableExists");function mse(){let e=Zf().utc().add(1,ze.MOMENT_DAYS_TAG).startOf(ze.MOMENT_DAYS_TAG).unix(),t=Zf().utc().unix();return e-t}a(mse,"getStartOfTomorrowInSeconds");function pse(){return Zf().utc().format("DD-MM-YYYY")}a(pse,"getLimitKey");function Sse(e){try{let t=new vre(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){ur.error("Got an error back ticking items."),ur.error(t)}}a(Sse,"backtickASTSchemaItems");function Tse(e){return[e]}a(Tse,"createForkArgs");function Rse(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Rse,"autoCastBoolean");function gse(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(gse,"getTableHashAttribute");function Ase(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Ase,"doesSchemaExist");function Ose(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Ose,"doesTableExist");function Nse(e){try{return JSON.stringify(e)}catch{return e}}a(Nse,"stringifyObj");function bse(e){let t=Zf.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(bse,"ms_to_time");function yse(e,t){let r=ci.basename(e,ci.extname(e));return ci.join(ci.dirname(e),r+t)}a(yse,"changeExtension");function tg(){if(process.env[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=qre(process.argv);if(e[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(tg,"getEnvCliRootPath");var ZR;function Ise(){if(ZR)return ZR;let e=tg();tg()&&KB.pathExistsSync(ci.join(e,ze.HDB_CONFIG_FILE))&&(ZR=!0)}a(Ise,"noBootFile");function wse(e,t){let r;return e.protocol==="http:"?r=Gre:r=Fre,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(wse,"httpRequest");function Cse(e){if(!e.schema&&!e.database){e.schema=ze.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Cse,"transformReq");function Dse(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Dse,"convertToMS")});var j=T((vhe,nH)=>{"use strict";var rg=require("fs-extra"),Ns=require("path"),rH=require("os"),Lse=require("properties-reader"),xu=q(),ji=V(),ee=N(),tE=Tr(),Use="Error initializing environment manager",rE="BOOT_PROPS_FILE_PATH",sH=!1,Mse={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},In={};nH.exports={BOOT_PROPS_FILE_PATH:rE,getHdbBasePath:Pse,setHdbBasePath:vse,get:Bse,initSync:qse,setProperty:he,initTestEnvironment:Fse};function Pse(){return In[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Pse,"getHdbBasePath");function vse(e){In[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(vse,"setHdbBasePath");function Bse(e){let t=tE.getConfigValue(e);return t===void 0?In[e]:t}a(Bse,"get");function he(e,t){Mse[e]&&(In[e]=t),tE.updateConfigObject(e,t)}a(he,"setProperty");function Hse(){let e;try{e=ji.getPropsFilePath(),rg.accessSync(e,rg.constants.F_OK|rg.constants.R_OK),sH=!0;let t=Lse(e);return In[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),In[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),In[rE]=e,!0}catch{return xu.trace(`Environment manager found no properties file at ${e}`),!1}}a(Hse,"doesPropFileExist");function qse(e=!1){try{(sH||Hse()||ji.noBootFile())&&(tE.initConfig(e),In[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tE.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){xu.error(Use),xu.error(t),console.error(t),process.exit(1)}}a(qse,"initSync");function Fse(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Ns.join(__dirname,"../../","unitTests");In[rE]=Ns.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ns.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,rH.userInfo()?rH.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,Ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,Ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ns.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ns.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,Ns.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,ji.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ji.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ji.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,ji.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ji.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rE}. Please check your boot props and settings files`;xu.fatal(r),xu.error(t)}}a(Fse,"initTestEnvironment")});var uH=T((Hhe,cH)=>{"use strict";var aH=require("joi"),{string:ku,boolean:iH,array:Gse}=aH.types(),oH=N(),xse=He();cH.exports=kse;function kse(e){let t=aH.object({operation:ku.valid(oH.OPERATIONS_ENUM.ADD_NODE,oH.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:ku.required(),subscriptions:Gse.items({schema:ku.required(),table:ku.optional(),hash_attribute:ku.optional(),subscribe:iH.required(),publish:iH.required()}).min(1).required()});return xse.validateBySchema(e,t)}a(kse,"updateRemoteSourceValidator")});var Vu=T((Fhe,lH)=>{"use strict";var sg=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};lH.exports=sg});var hH=T((xhe,EH)=>{"use strict";var Vse=uH(),wn=q(),ng=De(),_H=N(),ig=$r(),og=$e(),dH=Dc(),$se=m_(),{Node:Yse,NodeSubscription:fH}=Jn(),ag=Vu(),cg=V(),Kse=j(),{cloneDeep:Wse}=require("lodash"),{broadcast:Qse}=Ge();EH.exports=zse;async function zse(e){try{let t=Vse(e);if(t)return wn.error(`Validation error in updateRemoteSource: ${t.message}`),new ag(ng.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=Wse(await ig.getNodeRecord(s)),c=!cg.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&wn.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!cg.doesSchemaExist(f)){wn.trace(`updateRemoteSource creating schema: ${f}`);try{await dH.createSchema({operation:"create_schema",schema:f})}catch(h){wn.error(h)}}if(E&&!cg.doesTableExist(f,E)){let h=new $se(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),wn.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await dH.createTable(h)}catch(p){wn.error(p)}wn.trace(`Creating local stream for ${f}.${E}`),await og.createLocalTableStream(f,E)}if(f===_H.SYSTEM_SCHEMA_NAME&&await og.createLocalTableStream(f,E),await og.updateWorkStream(d,s),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let g=o.subscriptions[p];if(g.schema===f&&g.table===E){g.publish=d.publish,g.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new fH(f,E,d.publish,d.subscribe))}else i.push(new fH(f,E,d.publish,d.subscribe))}c||(o=new Yse(s,i,void 0),wn.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await ig.upsertNodeRecord(u),Qse({type:"nats_update"}),new ag(ng.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Kse.get(_H.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await ig.getSystemInfo())}catch(t){wn.error(t);let r=t.message?t.message:t;return new ag(ng.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(zse,"updateRemoteSource")});var TH=T((Vhe,SH)=>{"use strict";var pH=require("joi"),{string:mH}=pH.types(),Jse=N(),jse=He();SH.exports=Xse;function Xse(e){let t=pH.object({operation:mH.valid(Jse.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:mH.required()});return jse.validateBySchema(e,t)}a(Xse,"removeRemoteSourceValidator")});var gH=T((Yhe,RH)=>{"use strict";var Zse=TH(),sE=q(),nE=De(),ug=N(),ene=$r(),tne=V(),rne=$e(),sne=j(),iE=Vu(),{NodeSubscription:nne}=Jn(),ine=yo(),one=qn(),{broadcast:ane}=Ge(),cne=sne.get(ug.CONFIG_PARAMS.CLUSTERING_NODENAME);RH.exports=une;async function une(e){try{let t=Zse(e);if(t)return sE.error(`Validation error in removeRemoteSource: ${t.message}`),new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await ene.getNodeRecord(r);if(tne.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return sE.error(i),new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];sE.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new nne(c.schema,c.table,!1,!1);await rne.updateWorkStream(u,r)}let n=new ine(ug.SYSTEM_SCHEMA_NAME,ug.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await one.deleteRecord(n),ane({type:"nats_update"}),new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${cne} successfully removed node '${r}'.`)}catch(t){sE.error(t);let r=t.message?t.message:t;return new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(une,"removeRemoteSource")});var yH=T((Whe,bH)=>{"use strict";var oE=q(),aE=N(),AH=De(),OH=j(),lne=V(),NH=Vu(),_ne=$r(),dne=k_(),fne=pr();bH.exports=Ene;async function Ene(e){try{oE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=lne.ms_to_time(t),s=new hne(OH.get(aE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),OH.get(aE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await _ne.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new dne(aE.SYSTEM_SCHEMA_NAME,aE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await fne.update(i)}catch(n){oE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return oE.trace("getRemoteSourceConfig response:",s),new NH(AH.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){oE.error(t);let r=t.message?t.message:t;return new NH(AH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Ene,"getRemoteSourceConfig");function hne(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(hne,"ConfigResponseObject")});var DH=T((zhe,CH)=>{"use strict";var IH=j();IH.initSync();var wH=$e(),$u=q(),Ta=N(),lg=De(),mne=hH(),pne=gH(),Sne=yH(),Tne=Vu(),{encode:Rne,decode:gne}=require("msgpackr"),Ane=sn(),One=vn(),Nne=require("util"),bne=N(),{isMainThread:yne,parentPort:Ine}=require("worker_threads");Ge();var wne=Nne.promisify(Ane.setSchemaDataToGlobal),_g=IH.get(Ta.CONFIG_PARAMS.CLUSTERING_NODENAME);CH.exports=Cne;async function Cne(){try{$u.notify("Starting reply service."),await wne();let e=await wH.getConnection(),t=`${_g}.__request__`,r=e.subscribe(t,{queue:_g});await Dne(r)}catch(e){$u.error(e)}}a(Cne,"initialize");async function Dne(e){for await(let t of e){let r=gne(t.data),s;switch(r.operation){case Ta.OPERATIONS_ENUM.ADD_NODE:case Ta.OPERATIONS_ENUM.UPDATE_NODE:s=await mne(r);break;case Ta.OPERATIONS_ENUM.REMOVE_NODE:s=await pne(r);break;case Ta.OPERATIONS_ENUM.CLUSTER_STATUS:s=await Sne(r);break;case Ta.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Lne();break;default:let n=`node '${_g}' reply service received unrecognized request operation`;$u.error(n),s=new Tne(lg.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}$u.trace(s),t.respond(Rne(s))}}a(Dne,"handleRequest");async function Lne(){try{return{status:lg.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await One.describeAll()}}catch(e){return $u.error(e),{status:lg.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Lne,"getRemoteDescribeAll");yne||Ine.on("message",async e=>{let{type:t}=e;t===bne.ITC_EVENT_TYPES.SHUTDOWN&&wH.closeConnection()})});var Une=DH();(async()=>{try{await Une()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|
|
28
|
+
`+fR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(tte,"getServerOptions");function rte(){let e=As.get(An.OPERATIONSAPI_NETWORK_CORS),t=As.get(An.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Xee)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(rte,"getCORSOpts");function ste(){return As.get(An.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Jee}a(ste,"getHeaderTimeoutConfig")});var U0=T((AEe,L0)=>{"use strict";var{decode:nte}=require("msgpackr"),{isMainThread:TEe,parentPort:ite,threadId:REe}=require("worker_threads"),O0=$e(),On=De(),ote=N(),Nu=q(),g0=j(),N0=N();Ge();var ate=sn(),{recordAction:cte,recordActionBinary:ute}=($n(),Z(I_)),{publishToStream:lte}=O0,gEe={durable:On.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:On.WORK_QUEUE_CONSUMER_NAMES.deliver_group},_te,dte,fte,b0,y0;L0.exports={initialize:I0,workQueueListener:D0,setSubscription:Ete,setIgnoreOrigin:mte,getDatabaseSubscriptions:hte};async function I0(){y0=!0,Nu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await O0.getNATSReferences();_te=e,dte=e.info.server_name,fte=t,b0=r}a(I0,"initialize");var Of=new Map;function Ete(e,t,r){let s=Of.get(e);s||Of.set(e,s=new Map),s.set(t,r),y0||I0().then(D0)}a(Ete,"setSubscription");function hte(){return Of}a(hte,"getDatabaseSubscriptions");var w0;function mte(e){w0=e}a(mte,"setIgnoreOrigin");var C0=100,A0=new Array(C0),Af=0;async function D0(){let t=await(await b0.consumers.get(On.WORK_QUEUE_CONSUMER_NAMES.stream_name,On.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();ite?.on("message",async r=>{let{type:s}=r;s===N0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await A0[Af],A0[Af]=pte(r).catch(s=>{Nu.error(s)}),++Af>=C0&&(Af=0)}a(D0,"workQueueListener");async function pte(e){let t=nte(e.data);cte(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=g0.get(ote.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(On.MSG_HEADERS.TRANSACTED_NODES)&&r.values(On.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(On.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!w0),ute(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(On.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Nu.trace("processing message:",o,c,_,(l?"records: "+l.map(b=>b?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Nu.trace(`messageProcessor nats msg id: ${e.headers.get(On.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:g}=f||{},I=Of.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:ER(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:g});else{let b=l.map((Y,Q)=>({type:ER(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)b.push({type:ER(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:b,table:_,timestamp:p,onCommit:h,user:S,nodeName:g})}g0.get(N0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&<e(e.subject.split(".").slice(0,-1).join("."),ate.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Nu.error(o)}e.ack()}a(pte,"messageProcessor");function ER(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ER,"convertOperation")});var RR={};Je(RR,{disableNATS:()=>Tte,publishToStream:()=>wf,setNATSReplicator:()=>hR,setPublishToStream:()=>Rte,setSubscription:()=>TR,start:()=>Ste});function Ste(){bf.default.get(yf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ate()}function Tte(e=!0){H0=e}function Rte(e,t){wf=e,TR=t}function Ate(){if(H0||process.env._DISABLE_NATS)return;let e=hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];hR(n,r,i)}}gR((r,s)=>{hR(r.tableName,r.databaseName,r),s&&F0(r)}),!M0&&(M0=!0)}function hR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Ot{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ie],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ie]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ie],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ie]})}static defineSchema(i){F0(i)}static subscribe(){let i=new ss;return TR(t,e,i),i}static subscribeOnThisThread(i){return i<gte}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Nf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=q0;return i}a(s,"getNATSTransaction")}function F0(e){let t=bf.default.get(yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);wf(`${pR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,SR.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var P0,pR,SR,v0,B0,bf,yf,If,H0,wf,TR,gte,q0,M0,Nf,mR,G0=Te(()=>{fe();is();P0=L($e()),pR=L(De()),SR=L(sn());va();v0=L(U0()),B0=L(fr()),bf=L(j()),yf=L(N()),If=L(q());a(Ste,"start");a(Tte,"disableNATS");wf=P0.publishToStream,TR=v0.setSubscription;a(Rte,"setPublishToStream");gte=2;a(Ate,"assignReplicationSource");a(hR,"setNATSReplicator");a(F0,"publishSchema");Nf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=bf.default.get(yf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(If.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(wf(`${pR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,SR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw If.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},mR=class extends Nf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,B0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};q0=new mR});async function k0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await AR.getResource(e,{});n=new NR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await AR.get(e);i&&i.delete()}n=new Df(e,t)}return n}function OR(){return Cf++,Cf>65500&&(Cf=1),Cf}var x0,da,AR,Cf,Df,NR,V0=Te(()=>{fe();Zc();x0=L(fr()),da=L(q());fi();AR=tt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(k0,"getSession");Cf=1;a(OR,"getNextMessageId");Df=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,da.trace)("Resuming subscription from",n,"from",o);let h=ti.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,g=await ke(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of I)try{let Y;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"||s&&!s(b))continue;r?(b.topic=n,Y=this.needsAcknowledge(b)):(b.acknowledge?.(),Y=OR());let Q=b.id;Array.isArray(Q)&&(Q=Wo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,b.value,Y,t)}catch(Y){(0,da.warn)(Y)}})(),I});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=OR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=ti.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return ke(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},NR=class extends Df{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=OR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,da.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,x0.getNextMonotonicTime)()),(0,da.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),AR.put(this.sessionRecord)),t.qos}}});var yR={};Je(yR,{start:()=>Nte});async function Nte({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=K0(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Xr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Ote&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,W0.getSuperUser)());let{onMessage:u,onClose:_}=K0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Xr.info)("Socket error",l)})},{port:t,securePort:s})}function K0(e,t,r,s,n){Y0||(Y0=!0,Oc(d=>{Lf>0&&d.push({metric:"mqtt-connections",connections:Lf,byThread:!0})}));let i;Lf++;let o,c={protocolVersion:4},u=(0,Uf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Lf--,i||(i=!0,o?.disconnect(),kr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await lt.getUser(d.username,d.password.toString()),(0,bR.get)(Nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$0.notify({username:s.username,status:Nn.AUTH_AUDIT_STATUS.SUCCESS,type:Nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,bR.get)(Nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$0.error({username:s.username,status:Nn.AUTH_AUDIT_STATUS.FAILURE,type:Nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=k0({user:s,...d}),o=await o}catch(b){return(0,Xr.error)(b),kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:b.code||5,returnCode:b.code||128})}kr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((b,Y,Q,G)=>{try{let w=b.indexOf("/",1),K=w>0?b.slice(0,w):b;f({cmd:"publish",topic:b,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:G.qos},K)}catch(w){(0,Xr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let b of d.subscriptions){let Y;try{Y=(await o.addSubscription(b,b.qos>=1)).qos||0}catch(Q){(0,Xr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let b of d.unsubscriptions)o.removeSubscription(b);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ta(r?.headers.get?.("content-type"))),g=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,g)}catch(b){(0,Xr.warn)(b),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),kr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Xr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Uf.generate)(h,c);t(S),br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ri(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Uf,W0,bR,Nn,Xr,$0,Ote,Y0,Lf,Q0=Te(()=>{Uf=require("mqtt-packet");V0();W0=L(xr());Qo();$n();Hr();bR=L(j()),Nn=L(N()),Xr=L(q()),$0=(0,Xr.loggerWithTag)("auth-event"),Ote=!0;a(Nte,"start");Lf=0;a(K0,"onSocket")});var J0,z0,IR,j0=Te(()=>{J0=require("os"),z0=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,J0.platform)()!="win32"&&(IR=require("node-unix-socket").createReuseportFd)});var Md={};Je(Md,{component_errors:()=>fa,loadComponent:()=>Mf,loadComponentDirectories:()=>oB,setErrorReporter:()=>wte});function oB(e,t){t&&(CR=t),e&&(DR=e);let r=[];if((0,Os.existsSync)(wR)){let n=(0,Os.readdirSync)(wR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(wR,o);r.push(Mf(c,CR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Mf(s,CR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{iB=!0})}function wte(e){Iu=e}async function Mf(e,t,r,s,n,i){if(!Z0.has(e)){Z0.set(e,!0),n&&(DR=n);try{let o;s&&(fa=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,nB.getConfigObj)():(0,eB.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=LR;let u=[],_=s;for(let l in o){let d=o[l];if(fa.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,b;for(;!(0,Os.existsSync)(b=(0,gt.join)(I,"node_modules",l));)if(I=(0,gt.dirname)(I),I.length<(0,sB.getHdbBasePath)().length){b=null;break}if(b)f=await Mf(b,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Ite[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,tt(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,g=!p?.https&&p?.port;if(bu.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:g,securePort:S,resources:t,...d})||f,s&&p))for(let I of[g,S])try{if(+I&&!X0.includes(I)){let b=UR.get(MR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);b&&yu.default.warn("Session affinity is not recommended and may cause memory leaks"),(b||!IR)&&(X0.push(I),h0(I,b))}}catch(b){console.error("Error listening on socket",I,b,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:g,securePort:S,resources:t,...d})||f),DR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,rB.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),b=I.indexOf("/*");if(b>-1&&d.files!==LR[l]?.files&&!(0,Os.existsSync)(I.slice(0,b)))throw new Error(`The path '${I.slice(0,b)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,tB.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:G}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(G.isFile()){let x=await yte(Q);bu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else bu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${G.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Iu?.(x),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(x),t.set(d.path||"/",new wu(x)),fa.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Iu?.(h),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(h),t.set(d.path||"/",new wu(h),null,!0),fa.set(s?l:(0,gt.basename)(e),h.message)}}if(bu.isMainThread&&!iB&&i&&(0,Ea.watchDir)(e,async()=>oB()),o.extensionModule)return await pl((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Iu?.(new Error(l)),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(l),fa.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Iu?.(o),t.set("",new wu(o))}}}var Os,gt,bu,eB,UR,MR,tB,Ea,yu,rB,sB,bte,nB,yte,wR,DR,iB,CR,fa,Ite,LR,X0,Z0,Iu,wu,Pd=Te(()=>{Os=require("fs"),gt=require("path"),bu=require("worker_threads"),eB=require("yaml"),UR=L(j()),MR=L(N());BA();GA();xA();gP();i0();l0();tB=L(require("fast-glob")),Ea=L(Ge()),yu=L(q());HE();Hr();rB=L(X());is();fe();m0();sB=L(j()),bte=L(R0());bd();G0();Q0();nB=L(Rr());j0();({readFile:yte}=Os.promises),wR=UR.get(MR.CONFIG_PARAMS.COMPONENTSROOT),DR=new Map,fa=new Map;a(oB,"loadComponentDirectories");Ite={REST:Qd,rest:Qd,graphqlSchema:BE,jsResource:FE,fastifyRoutes:cR,login:xE,static:uR,operationsApi:bte,customFunctions:{},http:{},clustering:RR,authentication:eu,mqtt:yR},LR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(LR,"static",{value:{files:"web/**"}});X0=[],Z0=new Map;a(wte,"setErrorReporter");a(Mf,"loadComponent");wu=class extends Ot{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var uB=T((ZEe,cB)=>{var{isMainThread:aB}=require("worker_threads"),{getTables:Cte}=(fe(),Z(Ce)),{loadComponentDirectories:Dte,loadComponent:Lte}=(Pd(),Z(Md)),{resetResources:Ute}=(Zc(),Z(xU)),Mte=sT(),Pte=Rr(),{dirname:vte}=require("path"),{getConnection:Bte}=$e(),Hte=j(),qte=N(),PR=new Map;async function Fte(e=!1){!aB&&Hte.get(qte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Bte();try{aB&&await Mte()}catch(s){console.error(s)}let t=Ute();Cte(),t.isWorker=e,await Lte(vte(Pte.getConfigFilePath()),t,"hdb",!0,PR),await Dte(PR,t);let r=[];for(let[s]of PR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Fte,"loadRootComponents");cB.exports.loadRootComponents=Fte});var Ge=T((the,oi)=>{"use strict";var{Worker:Gte,MessageChannel:xte,parentPort:Ws,isMainThread:FR,threadId:kte,workerData:bn}=require("worker_threads"),{PACKAGE_ROOT:Vte}=N(),{join:fB,isAbsolute:$te,extname:Yte}=require("path"),{server:EB}=(Hr(),Z(ro)),{watch:Kte,readdir:Wte}=require("fs/promises"),{totalmem:lB}=require("os"),Bf=N(),Qte=j(),yn=q(),{randomBytes:zte}=require("crypto"),{_assignPackageExport:Jte}=require("../index"),jte=N(),_B=1024*1024,ii=[],Zr=[],Xte=50,GR=1e4,Zte="restart",hB="request_thread_info",mB="resource_report",pB="thread_info",SB="added-port",ere="ack",vR;Jte("threads",Zr);oi.exports={startWorker:BR,restartWorkers:kR,shutdownWorkers:ire,workers:ii,setMonitorListener:fre,onMessageFromWorkers:ore,onMessageByType:NB,broadcast:cre,broadcastWithAcknowledgement:lre,setChildListenerByType:nre,getWorkerIndex:TB,getWorkerCount:RB,getTicketKeys:gB,setMainIsWorker:rre,setTerminateTimeout:tre,restartNumber:bn?.restartNumber||1};Zr.onMessageByType=NB;Zr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Zr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var xR;function tre(e){GR=e}a(tre,"setTerminateTimeout");function TB(){return bn?bn.workerIndex:xR?0:void 0}a(TB,"getWorkerIndex");function RB(){return bn?bn.workerCount:xR?1:void 0}a(RB,"getWorkerCount");function rre(e){xR=e}a(rre,"setMainIsWorker");var Pf;function gB(){return Pf||(Pf=FR?zte(48):bn.ticketKeys,Pf)}a(gB,"getTicketKeys");Object.defineProperty(EB,"workerIndex",{get(){return TB()}});Object.defineProperty(EB,"workerCount",{get(){return RB()}});var AB={[hB](e,t){_re(t)},[mB](e,t){dre(t,e)}};function BR(e,t={}){let r=process.constrainedMemory?.()||lB();r=Math.min(r,lB(),2e4*_B);let s=Math.max(Math.floor(r/_B/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Zr){let _=new xte;_.existingPort=u,i.push(_),o.push(_.port2)}Yte(e)||(e+=".js");let c=new Gte($te(e)?e:fB(Vte,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:oi.exports.restartNumber,ticketKeys:gB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:SB,port:u,threadId:c.threadId},[u]);return Hf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>BR(e,t),c.on("error",u=>{console.error("Worker error:",u),yn.error("Worker error:",u)}),c.on("exit",u=>{ii.splice(ii.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Xte?(t.unexpectedRestarts=c.unexpectedRestarts+1,BR(e,t)):yn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{AB[u.type]?.(u,c)}),ii.push(c),hre(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(BR,"startWorker");var sre=[Bf.THREAD_TYPES.HTTP];async function kR(e=null,t=2,r=!0){if(FR){if(r){let{loadRootComponents:o}=uB();await o()}oi.exports.restartNumber++,t<1&&(t=t*ii.length);let s=[],n=[];for(let o of ii.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;yn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:oi.exports.restartNumber,type:Bf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=sre.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),GR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===jte.ITC_EVENT_TYPES.CHILD_STARTED&&(yn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");yn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Rd();r&&(e==="http"||!e)&&Qte.get(Bf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ws.postMessage({type:Zte,workerType:e})}a(kR,"restartWorkers");function nre(e,t){AB[e]=t}a(nre,"setChildListenerByType");function ire(e){return kR(e,1/0,!1)}a(ire,"shutdownWorkers");var OB=[];function ore(e){OB.push(e)}a(ore,"onMessageFromWorkers");var HR=new Map;function NB(e,t){let r=HR.get(e);r||HR.set(e,r=[]),r.push(t)}a(NB,"onMessageByType");var are=10;async function cre(e){let t=0;for(let r of Zr)try{r.postMessage(e),t++>are&&(t=0,await new Promise(setImmediate))}catch(s){yn.error("Unable to send message to worker",s)}}a(cre,"broadcast");var vf=new Map,ure=1;function lre(e){return new Promise(t=>{let r=0;for(let s of Zr)try{let n=ure++,i=a(()=>{vf.delete(n),--r===0&&t(),s!==Ws&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,vf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of vf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yn.error("Unable to send message to worker",n)}r===0&&t()})}a(lre,"broadcastWithAcknowledgement");function _re(e){e.postMessage({type:pB,workers:bB()})}a(_re,"sendThreadInfo");function bB(){let e=Date.now();return ii.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(bB,"getChildWorkerInfo");function dre(e,t){e.resources=t,e.resources.updated=Date.now()}a(dre,"recordResourceReport");var qR;function fre(e){qR=e}a(fre,"setMonitorListener");var Ere=1e3,dB=!1;function hre(){dB||(dB=!0,setInterval(()=>{for(let e of ii){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}qR&&qR()},Ere).unref())}a(hre,"startMonitoring");var mre=1e3;if(Ws){Hf(Ws);for(let e=0,t=bn.addPorts.length;e<t;e++){let r=bn.addPorts[e];r.threadId=bn.addThreadIds[e],Hf(r)}setInterval(()=>{let e=process.memoryUsage();Ws.postMessage({type:mB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},mre).unref(),vR=a(()=>new Promise((e,t)=>{Ws.on("message",r),Ws.postMessage({type:hB});function r(s){s.type===pB&&(Ws.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else vR=bB;oi.exports.getThreadInfo=vR;function Hf(e,t){Zr.push(e),e.on("message",r=>{if(r.type===SB)r.port.threadId=r.threadId,Hf(r.port);else if(r.type===ere){let s=vf.get(r.id);s&&s()}else{for(let n of OB)n(r,e);let s=HR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yn.error(i)}}}).on("close",()=>{Zr.splice(Zr.indexOf(e),1)}).on("exit",()=>{Zr.splice(Zr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Hf,"addPort");if(FR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Wte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(fB(s,i.name));try{for await(let{filename:i}of Kte(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await kR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");oi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ws.on("message",async e=>{let{type:t}=e;t===Bf.ITC_EVENT_TYPES.SHUTDOWN&&(oi.exports.restartNumber=e.restartNumber,Ws.unref(),setTimeout(()=>{yn.warn("Thread did not voluntarily terminate",kte),process.exit(0)},GR).unref())})});function IB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ha||((0,Du.onMessageByType)(yB,d=>{wB(d.path)}),(0,Du.onMessageByType)(pre,d=>{(0,Cu.trace)("confirming to proceed with txn",d.txnId)}),ha=Object.create(null));let c=ha[i]||(ha[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Wo(t);let _=new $R(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function wB(e,t){if(!ha)return;let r=ha[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:VR,exclusiveStart:!0})){VR=n;let o=hr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Wo(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Cu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Cu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},VR,!0)}function CB(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Du.broadcast)({type:yB,path:n}),wB(n,!0)})}}var Cu,Du,yB,pre,ha,ahe,$R,VR,DB=Te(()=>{Cu=L(q()),Du=L(Ge());va();Zc();io();yB="transaction",pre="transaction-await",ahe=Buffer.alloc(4096);a(IB,"addSubscription");$R=class extends ss{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},VR=Date.now();a(wB,"notifyFromTransactionData");a(CB,"listenToCommits")});var $T={};Je($T,{coerceType:()=>kf,makeTable:()=>Yf,setServerUtilities:()=>yre,updateResource:()=>Pu});function Yf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),CB(i,u);let S=uh(i,s,u),g=0,I,b,Y,Q={},G=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Pt=2,ve={},At={},ts=864e5,dg,Yu,UH=10,MH=6;E&&hg();class ct extends Ot{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return($,z,oe)=>{if($?.source!==M)return M[y](z,oe,$)}}else return(M,$,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y]($,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],D=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,$)=>{if(!U?.source)return R[y](M,$,U)}},"getApplyToCanonicalSource");return ve={put:D("put"),delete:D("delete"),publish:D("publish")},At={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,$)=>{let z=M.value,oe=M.table?Ve[c][M.table]:ct;if(c===Ns.SYSTEM_SCHEMA_NAME&&(M.table===Ns.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ns.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,$,Lu);switch(M.type){case"put":return k._writeUpdate(z,Lu);case"delete":return k._writeDelete(Lu);case"publish":return k._writePublish(z,Lu);case"invalidate":return k.invalidate(Lu);default:Qe.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let $=m.subscribeOnThisThread?m.subscribeOnThisThread((0,zi.getWorkerIndex)()):(0,zi.getWorkerIndex)()===0,z=M&&$&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Qe.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=ke(k,()=>{if(k.type==="transaction"){let ne=[];for(let vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(ui=>ui.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(tt({table:n,database:c,attributes:ne,origin:"cluster"}),Bu.signalSchemaChange(new Hu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});y&&(await Ne,Bu.signalUserChange(new Hu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Qe.error("error in subscription handler",Ee)}}}catch(M){Qe.error(M)}})(),this}static getResource(m,A,C){let R=super.getResource(m,A,C);if(m!=null){Ra(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let D=!C?.async||i.cache?.get(m),y=Cn(A),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return fg(m,A,{transaction:U},D,M=>{if(M?Pu(R,M):R[Re]=null,A.onlyIfCached&&A.noCacheStore){if(!R.doesExist())throw new zs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let $=cE(m,M,A,R);if($)return y?.disregardReadTxn(),R[KR]=!0,QR($,z=>(Pu(R,z),R))}return R})}catch(D){throw D.message.includes("Unable to serialize object")&&(D.message+=": "+JSON.stringify(m)),D}}return R}ensureLoaded(){let m=cE(this[Ie],this[Qs],this[me]);if(m)return this[KR]=!0,QR(m,A=>{this[Qs]=A,this[Re]=A.value,this[xf]=A.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,ts=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ts=ts||(d+f)/4,uE()}static enableAuditing(m=!0){E=m,m&&hg(),ct.audit=m}static coerceId(m){return m===""?null:kf(m,Q)}static async dropTable(){if(delete Ve[c][n],c===o){for(let m of p)l.remove(ct.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ct.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Bu.signalSchemaChange(new Hu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,A){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,A)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[os])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,A){let C=Wu(m);if(C?.read){let R=C.attribute_permissions;if(R){A||(A={});let D=A.select;if(D){let y=WR(R,"read");A.select=D.filter(U=>y[U])}else A.select=R.filter(y=>y.read).map(y=>y.attribute_name);return A}else return!0}}allowUpdate(m,A){let C=Wu(m);if(C?.update){let R=C.attribute_permissions;if(R){let D=WR(R,"update");for(let y in A)if(!D[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in A)&&(A[U]=this.getProperty(U))}}return!0}}allowCreate(m,A){if(this[os]){let C=Wu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let D=WR(R,"insert");for(let y in A)if(!D[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Wu(m)?.delete}update(m,A){if(!Cn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(A){Object.isFrozen(m)&&(m=Object.assign({},m));for(let D in this[Re])m[D]===void 0&&(m[D]=void 0);this[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let A=this[me],C=this[Ie];Ra(C),Cn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Qs],nodeName:this[me]?.nodeName,before:ve.invalidate?.bind(this,A,C),beforeIntermediate:At.invalidate?.bind(this,A,C),commit:(D,y)=>{if(y?.version>D)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Qs],D,qf,E,this[me],0,"invalidate")}})}static evict(m,A,C){let R=this.Source,D;if(!((b||E)&&(!A||(D=i.getEntry(m),!D||!A)||D.version!==C))){if(b){if(i.hasLock(m,D.version))return;let y;for(let U in r)y||(y={}),y[U]=A[U];if(y){S(m,y,D,C,Ff,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Ku(m,A,null)}),E)S(m,null,D,C,Ff,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=n,m.schema||=c,HB.operation(m,A)}async put(m){this.update(m,!0)}_writeUpdate(m,A){let C=this[me],R=Cn(C),D=this[Ie];Ra(D);let y=this[Qs];this[YR]=!0;let U={key:D,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[UB]||al(m)){if(this.validate(m),C?.source?m=Ba(m):(t&&m[t]!==D&&(m[t]=D),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Ba(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:ve.put&&(()=>ve.put(C,D,m)),beforeIntermediate:At.put&&(()=>At.put(C,D,m)),commit:(M,$,z)=>{z&&(C&&$?.version>(C.lastModified||0)&&(C.lastModified=$.version),Pu(this,$));let oe=$?.value;this[YR]=!1,Qe.trace("Checking timestamp for put",D,$?.version>M,$?.version,M),!($?.version>M)&&(Ku(D,oe,m),S(D,m,$,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[os]){for await(let A of this.search(m))(await ct.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let A=Cn(this[me]),C=this[Ie];Ra(C);let R=this[me];return A.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:ve.delete?.bind(this,R,C),beforeIntermediate:At.delete?.bind(this,R,C),commit:(D,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),Pu(this,y)),!(y?.version>D)&&(Ku(this[Ie],M),Qe.trace("Write delete entry",C,D),E||h?(S(C,null,this[Qs],D,0,E,this[me],0,"delete"),E||uE()):i.remove(this[Ie]))}}),!0}search(m){let A=Cn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Ie]&&(R=[{attribute:null,comparator:"prefix",value:this[Ie]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=D(k.value,Ne):k[1]=D(k[1],Ne));else if(Ee!=null)throw(0,zs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function D(k,Ee){return Array.isArray(k)?k.map(Ne=>kf(Ne,Ee)):kf(k,Ee)}a(D,"coerceTypedValues"),R.length>1&&(R=(0,BB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Mu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Mu.SEARCH_TYPES.CONTAINS||Ee===Mu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Mu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=Rre:k.estimated_count=Tre}return k.estimated_count}));let y=A.getReadTxn();y.use();let U=m.select,M=R[0],$;if(!M)$=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Gf.SKIP);else{let k=DE(M,y,C,ct,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(LE);$=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=DE(ne,y,C,ct,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),$=oe(k)}}(m.offset||m.limit!==void 0)&&($=$.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),$.onDone=()=>{$.onDone=null,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ui,Fe){if(vt&&Fe!==void 0){let lr=!z.onlyIfCached&&cE(Fe,ui,z,this);if(lr)return lr.then(BH=>Vt(BH))}let ys=ui?.value;if(!ys)return Gf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](ys))return Gf.SKIP;return ys}return a(Vt,"processEntry"),k.map(ui=>fg(ui,z,ne,!1,Vt))}return a(oe,"idsToRecords"),$}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let A=IB(ct,this[Ie]??null,function(y,U,M,$){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:$})}catch(z){Qe.error(z)}},m.startTime,this[os]);m.crossThreads===!1&&(A.crossThreads=!1),m.supportsTransactions&&(A.supportsTransactions=!0);let C=this[Ie],R=m.previousCount;R>1e3&&(R=1e3);let D=m.startTime;if(this[os]){if(D){if(R)throw new zs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:D,exclusiveStart:!0})){let M=hr(U,i);if(M.tableId!==s)continue;let $=M.recordId;(C==null||vB(C,$))&&A.send({id:$,timestamp:y,...M}),A.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let $=hr(M);if($.tableId!==s)continue;let z=$.recordId;if(C==null||vB(C,z)){let oe=$.getValue(i);if(y.push({id:z,timestamp:U,value:oe,version:$.version,type:$.type}),--R<=0)break}}catch($){Qe.error("Error getting history entry",U,$)}for(let U=y.length;U>0;)A.send(y[--U]);y[0]&&(A.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:$}of i.getRange({start:C??!1,end:C==null?void 0:[C,Vf.MAXIMUM_KEY],versions:!0}))U&&A.send({id:y,version:M,timestamp:$,value:U})}else{R&&!D&&(D=0);let y=this[Qs]?.localTime;if(Qe.trace("Subscription from",D,"from",C),D<y){let U=[],M=y;do{let $=u.get(M);if($){m.omitCurrent=!0;let z=hr($),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>D&&R!==0);for(let $=U.length;$>0;)A.send(U[--$]);A.startTime=y}!m.omitCurrent&&this.doesExist()&&A.send({id:C,version:this[xf],timestamp:this[Qs]?.localTime,value:this})}return m.listener&&A.on("data",m.listener),A}doesExist(){return!!(this[Re]||this[YR])}async publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let C=Cn(this[me]),R=this[Ie]||null;Ra(R);let D=this[me];C.addWrite({key:R,store:i,entry:this[Qs],nodeName:D?.nodeName,validate:()=>{this.validate(m)},before:ve.publish?.bind(this,D,R,m),beforeIntermediate:At.publish?.bind(this,D,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&uE(),S(R,U?.value??null,U,U?.version||y,0,!0,D,U?.expiresAt,"message",!1,m)}})}validate(m){let A,C=a((R,D,y)=>{if(D.type&&R!=null)if(D.properties){typeof R!="object"&&(A||(A=[])).push(`Property ${y} must be an object${D.type?" ("+D.type+")":""}`);let U=D.properties;for(let M=0,$=U.length;M<$;M++){let z=U[M],oe=C(R[z.name],z,y+"."+z.name);oe&&(R[z.name]=oe)}}else switch(D.type){case"Int":(typeof R!="number"||R>>0!==R)&&(A||(A=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(A||(A=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(A||(A=[])).push(`Property ${y} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(A||(A=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(A||(A=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof R!="boolean"&&(A||(A=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(A||(A=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(A||(A=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(D.elements)for(let U=0,M=R.length;U<M;U++){let $=R[U],z=C($,D.elements,y+"[*]");z&&(R[U]=z)}}else(A||(A=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&R==null&&(A||(A=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let R=0,D=p.length;R<D;R++){let y=p[R],U=C(m[y.name],y,y.name);U&&(m[y.name]=U)}if(A)throw new zs.ClientError(A.join(". "))}getUpdatedTime(){return this[xf]}wasLoadedFromSource(){return b?!!this[KR]:void 0}static async addAttributes(m){let A=p.slice(0);for(let C of m){if(!C.name)throw new zs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new zs.ClientError("Attribute names cannot include backticks or forward slashes");A.push(C)}return tt({table:n,database:c,schemaDefined:_,attributes:A}),ct.indexingOperation}static async removeAttributes(m){let A=p.filter(C=>!m.includes(C.name));return tt({table:n,database:c,schemaDefined:_,attributes:A}),ct.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,C=5e3,R=1e3,D;A>C&&!m?.exactCount&&(D=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:D}))U!=null&&y++;if(D){let U=y;y=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:D}))vt!=null&&y++;let M=D*2,$=(y+U)/M,z=Math.pow((y-U+1)/D/2,2)+$*(1-$)/M,oe=Math.max(Math.sqrt(z)*A,1),k=Math.round($*A),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,A),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){ul(this,this)}static async deleteHistory(m=0){let A;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Uu(),hr(R).tableId===s&&(A=u.remove(C));await A}static async*getHistory(m=0,A=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:A})){await Uu();let D=hr(R);D.tableId===s&&(yield{id:D.recordId,localTime:C,version:D.version,type:D.type,value:D.getValue(i),user:D.user})}}static async getHistoryOfRecord(m){let A=[],C=i.getEntry(m);if(!C)return A;let R=C.localTime,D=0;do{await Uu();let y=u.get(R);if(y){let U=hr(y);A.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(D<1e3&&R);return A.reverse()}static cleanup(){x?.remove()}}ct.updatedAttributes();let PH=ct.prototype;return PH[UB]=!0,d&&ct.setTTLExpiration(d/1e3),B&&vH(),ct;function Ku(W,m,A){let C;for(let R in r){let D=r[R],y=D.isIndexing,U=A?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let $=(0,vu.getIndexedValues)(M);if($){LB&&D.prefetch($.map(z=>({key:z,value:W})),PB);for(let z=0,oe=$.length;z<oe;z++)D.remove($[z],W)}if($=(0,vu.getIndexedValues)(U),$){LB&&D.prefetch($.map(z=>({key:z,value:W})),PB);for(let z=0,oe=$.length;z<oe;z++)D.put($[z],W)}}return C}a(Ku,"updateIndices");function Ra(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>MB)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Vf.writeKey)(W,Nre,0)>MB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ra,"checkValidId");function fg(W,m,A,C,R){let D=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return R(null,W);let y=i.getEntry(W,A);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?D():se>0?(se--,D()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),$()})):(te.push(W),be.push($),te.length>MH&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<UH&&Pt++}a(M,"prefetch");function $(){try{y(D())}catch(z){U(z)}}a($,"load")})}a(fg,"loadLocalRecord");function Wu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return bre;let A=m[c],C,R=A?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(Wu,"getTablePermissions");function cE(W,m,A,C){if(b){let R;if(A.noCache?R=!0:(m?(!m.value||m.metadataFlags&(qf|Ff)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,kr(!R,"cache-hit",n)),R){let D=Eg(W,m,A).then(y=>(y?.value?.[Re]&&Qe.error("Can not assign a record with a record property"),A&&(y?.version>(A.lastModified||0)&&(A.lastModified=y.version),A.lastRefreshed=Date.now()),y));if(A?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(D.catch(y=>Qe.warn(y)),A?.onlyIfCached&&!C.doesExist())throw new zs.ServerError("Entry is not cached",504);return}else return D}}}a(cE,"ensureLoadedFromSource");function Cn(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new di,m.lmdbDb=i,m;m=A}while(!0)}else return new dl}a(Cn,"txnForContext");async function Eg(W,m,A){let C=m?.metadataFlags,R=m?.version,D,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(qf|Ff)?D(Eg(W,i.getEntry(W),A)):D(z)}))return new Promise(z=>{D=z,y=setTimeout(()=>{i.unlock(W,R)},Ore)});let U=m?.value,M={requestContext:A,replacingRecord:U,replacingVersion:R,source:null,resourceCache:A?.resourceCache},$=A?.responseHeaders;return new Promise((z,oe)=>{let k;QR(ke(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of ct.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;Vt=C&qf;let Fe=M.lastModified||Vt&&R;vt=Vt||Fe>R||!U,Fe||(Fe=(0,vu.getNextMonotonicTime)());let ys=performance.now()-Ne;if(br(ys,"cache-resolution",n),$&&$.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=Fe,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:Fe,value:ne})}catch(Fe){Fe.message+=` while resolving record ${W} for ${n}`,U&&((Fe.code==="ECONNRESET"||Fe.code==="ECONNREFUSED"||Fe.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(Fe.statusCode===500||Fe.statusCode===502||Fe.statusCode===503||Fe.statusCode===504))?(z({version:R,value:U}),Qe.trace(Fe.message,"(returned stale record)")):oe(Fe),M.transaction.abort();return}if(A?.noCacheStore){M.transaction.abort();return}Cn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(Fe,ys)=>{if(ys?.version!==R)return;let lr=Ku(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,ys,Fe,0,E&&vt||null,M,M.expiresAt,"put",!!Vt)):(At.delete?.(M,W),E||h?S(W,null,ys,Fe,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Qe.error("Error committing cache update",Ee)})})}a(Eg,"getFromSource");function uE(){if(ts!==dg&&(dg=ts,(0,zi.getWorkerIndex)()===(0,zi.getWorkerCount)()-1)){if(Yu&&clearTimeout(Yu),!ts)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/ts)*ts+W.getTime(),A=a(C=>{Qe.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),Yu=setTimeout(()=>G=G.then(async()=>{if(A(Math.max(C+ts,Date.now())),i.rootStore.status!=="open"){clearTimeout(Yu);return}Qe.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:D,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+Are<Date.now()?i.remove(D,U):M&&M+f<Date.now()&&(ct.evict(D,y,U),R++),await Uu();Qe.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Qe.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(uE,"scheduleCleanup");function hg(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(hg,"addDeleteRemoval");function vH(){(0,zi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:A}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(A);C?.value?.[W]<Date.now()&&ct.evict(A,C.value,C.version),await Uu()}}catch(W){Qe.error("Error in evicting old records",W)}},gre).unref()}a(vH,"runRecordExpirationEviction")}function WR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function PB(){}function yre(e){HB=e}function kf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Ire.test(e)&&(e+="Z"),new Date(e)):r?e:(0,$f.autoCast)(e)}function vB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function QR(e,t,r){return e?.then?e.then(t,r):t(e)}function Pu(e,t){e[Qs]=t,e[Re]=t?.value??null,e[xf]=t?.version}var Ns,Gf,vu,BB,Mu,qu,zs,Bu,Hu,Qe,Vf,zi,$f,Sre,HB,Tre,Rre,gre,Are,LB,Ore,xf,UB,Qs,YR,KR,Lu,qf,Ff,Nre,MB,bre,Nhe,Ire,Uu,cf=Te(()=>{Ns=L(N()),Gf=require("lmdb"),vu=L(fr()),BB=require("lodash");is();wE();Mu=L(je()),qu=L(j());DB();zs=L(X()),Bu=L(an()),Hu=L(ds());fe();El();Qe=L(q());_l();fi();Vf=require("ordered-binary"),zi=L(Ge());io();$f=L(V());xa();$n();Sre=new Uint8Array(9);Sre[8]=192;Tre=1e8,Rre=1e7,gre=6e4,Are=864e5;qu.initSync();LB=qu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ore=1e4,xf=Symbol.for("version"),UB=Symbol.for("incremental-update"),Qs=Symbol("entry"),YR=Symbol("is-saving"),KR=Symbol("loaded-from-source"),Lu={isNotification:!0,ensureLoaded:!1},qf=1,Ff=8,Nre=Buffer.allocUnsafeSlow(8192),MB=1978,bre={read:!0,insert:!0,update:!0,delete:!0},Nhe=(0,$f.convertToMS)(qu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Yf,"makeTable");a(WR,"attributesAsObject");a(PB,"noop");a(yre,"setServerUtilities");Ire=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(kf,"coerceType");a(vB,"isDescendantId");Uu=a(()=>new Promise(setImmediate),"rest");a(QR,"when");a(Pu,"updateResource")});var Ce={};Je(Ce,{database:()=>mc,databases:()=>Ve,dropDatabase:()=>sp,dropTableMeta:()=>Mre,getDatabases:()=>hs,getTables:()=>wre,onUpdatedTable:()=>gR,readMetaDb:()=>Fu,resetDatabases:()=>Cre,table:()=>tt,tables:()=>Er});function wre(){return Jf||hs(),Er||{}}function hs(){if(Jf)return Ve;Jf=!0,Sa=new Map;let e=(0,kt.getHdbBasePath)()&&(0,xe.join)((0,kt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),t=(0,kt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Dr.existsSync)(e)?e:(0,xe.join)((0,kt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Dr.existsSync)(e))for(let r of(0,Dr.readdirSync)(e,{withFileTypes:!0})){let s=(0,xe.basename)(r.name,".mdb");r.isFile()&&(0,xe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Fu((0,xe.join)(e,r.name),null,s)}if((0,Dr.existsSync)((0,pa.getBaseSchemaPath)())){for(let r of(0,Dr.readdirSync)((0,pa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,xe.join)((0,pa.getBaseSchemaPath)(),r.name),n=(0,xe.join)((0,pa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Dr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,xe.join)(n,i.name);Fu((0,xe.join)(s,i.name),(0,xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Dr.existsSync)(n))for(let o of(0,Dr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,xe.extname)(o.name).toLowerCase()===".mdb"&&Fu((0,xe.join)(n,o.name),(0,xe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,xe.join)(c.path,(0,xe.basename)(o+".mdb"));(0,Dr.existsSync)(u)&&Fu(u,o,r,null,!0)}}for(let r in Ve){let s=Sa.get(r);if(s){let n=Ve[r];r.includes("delete")&&es.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(es.trace(`delete table class ${i}`),delete n[i])}else if(delete Ve[r],r==="data"){for(let n in Er)delete Er[n];delete Er[jf]}}return Sa=null,Ve}}function Cre(){Jf=!1;for(let[,e]of ai)e.needsDeletion=!0;hs();for(let[e,t]of ai)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ai.delete(e));return Ve}function Fu(e,t,r=jR,s,n){let i=new zR.default(e,!1);try{let o=ai.get(e);o?o.needsDeletion=!1:(o=(0,Wf.open)(i),ai.set(e,o));let c=new Ji.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Kf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Dr.existsSync)(s)&&(i.path=s,_=(0,Wf.open)(i),_.isLegacy=!0):_=Rl(o));let l=xB(r),d=l[jf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let g=f.get(p);g||f.set(p,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){es.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let g=l[E],I={},b=[],Y,Q,G=typeof S.audit=="boolean"?S.audit:(0,kt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(g)I=g.indices,b=g.attributes,g.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ma)||0)&&u.putSync(ma,Y+1):(S.tableId=Y=u.get(ma),Y||(Y=1),u.putSync(ma,Y+1),u.putSync(S.key,S));let x=new Ji.default(!S.is_hash_attribute,S.is_hash_attribute);Q=bl(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new Ji.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=b.find(be=>be.name===x.name);te?b.splice(b.indexOf(te),1,x):b.push(x)}}catch(te){es.error("Error trying to update attribute",x,b,I,te)}}if(!g){g=kB(l,E,Yf({primaryStore:Q,auditStore:_,audit:G,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let x of XR)x(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function xB(e){let t=Ve[e];if(t||(e==="data"?t=Ve[e]=Er:e==="system"?Object.defineProperty(Ve,"system",{value:t=Object.create(null),configurable:!0}):t=Ve[e]=Object.create(null)),Sa&&!Sa.has(e)){let r=new Set;t[jf]=r,Sa.set(e,r)}return t}function kB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=jR),hs();let r=xB(e),s=(0,xe.join)((0,kt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),n=(0,kt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,kt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||((0,Dr.existsSync)(s)?s:(0,xe.join)((0,kt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME));let o=(0,xe.join)(s,(i?t:e)+".mdb"),c=ai.get(o);if(!c){let u=new zR.default(o,!1);c=(0,Wf.open)(u),ai.set(o,c)}return c}async function sp(e){if(!Ve[e])throw new Error("Schema does not exist");let t=Ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;ai.delete(n.path),n.status==="open"&&(await n.close(),await qB.remove(n.path))}if(e==="data"){for(let r in Er)delete Er[r];delete Er[jf]}delete Ve[e]}function tt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=jR);let l=mc({database:t,table:e}),d=Ve[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let g=new Ji.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let I,b;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=Rl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,kt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),es.trace(`${e} table loading, opening primary store`);let K=new Ji.default(!1,!0),B=e+"/",x=bl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Kf.INTERNAL_DBIS_NAME,g),x.tableId=S.get(ma),x.tableId||(x.tableId=1),S.putSync(ma,x.tableId+1),h.tableId=x.tableId,f=kB(d,e,Yf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,G(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Kf.INTERNAL_DBIS_NAME,g)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){G(),I=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),I=!0,G(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Ji.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gu.workerData?.restartNumber)&&(I=!0,G(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gu.workerData?.restartNumber)&&(I=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(I=!0,G(),S.put(K,w))}}finally{b&&b()}if(I&&(f.schemaVersion++,f.updatedAttributes()),es.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Ure(f,Q,Y):I&&Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of XR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),es.trace(`${e} table loaded`),f;function G(){b||l.transactionSync(()=>({then(w){b=w}}))}a(G,"startTxn")}async function Ure(e,t,r){try{let s=e.schemaVersion;await Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,FB.getIndexedValues)(l[h]);if(p)for(let S=0,g=p.length;S<g;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,es.error(f)}),Gu.workerData&&Gu.workerData.restartNumber!==GB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Dre?await n:u>Lre&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){es.error("Error in indexing",s)}}function Mre({table:e,database:t}){let r=mc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function gR(e){XR.push(e)}var kt,Kf,Wf,xe,Dr,pa,Ji,zR,Lr,qB,JR,FB,Qf,zf,Gu,es,GB,jR,jf,Er,Ve,ma,XR,Jf,ai,Sa,Dre,Lre,fe=Te(()=>{kt=L(j()),Kf=L(je()),Wf=require("lmdb"),xe=require("path"),Dr=require("fs"),pa=L(Be());cf();Ji=L(yl()),zR=L(wl()),Lr=L(N()),qB=L(require("fs-extra")),JR=require("../index"),FB=L(fr()),Qf=L(an()),zf=L(ds()),Gu=require("worker_threads"),es=L(q()),GB=L(Ge());io();xa();jR="data",jf=Symbol("defined-tables");(0,kt.initSync)();Er=Object.create(null),Ve=Object.create(null);(0,JR._assignPackageExport)("databases",Ve);(0,JR._assignPackageExport)("tables",Er);ma=Symbol.for("next-table-id"),XR=[],ai=new Map;a(wre,"getTables");a(hs,"getDatabases");a(Cre,"resetDatabases");a(Fu,"readMetaDb");a(xB,"ensureDB");a(kB,"setTable");a(mc,"database");a(sp,"dropDatabase");a(tt,"table");Dre=1e3,Lre=10;a(Ure,"runIndexing");a(Mre,"dropTableMeta");a(gR,"onUpdatedTable")});var V=T((Mhe,rH)=>{"use strict";var ci=require("path"),WB=require("fs-extra"),ur=q(),VB=require("fs-extra"),Xf=require("os"),Pre=require("net"),vre=require("recursive-iterator"),ze=N(),Bre=Qg(),$B=require("papaparse"),Zf=require("moment"),{inspect:Hre}=require("util"),YB=require("is-number"),Uhe=require("lodash"),qre=require("minimist"),Fre=require("https"),Gre=require("http"),{hdb_errors:eE}=X(),xre=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,QB=require("util").promisify(setTimeout),kre=100,Vre=5,$re="",Yre=4,KB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};rH.exports={isEmpty:Ur,isEmptyOrZeroLength:Js,arrayHasEmptyValues:Qre,arrayHasEmptyOrZeroLengthValues:zre,buildFolderPath:Jre,isBoolean:zB,errorizeMessage:Kre,stripFileExtension:Xre,autoCast:Zre,autoCastJSON:JB,autoCastJSONDeep:eg,removeDir:ese,compareVersions:tse,isCompatibleDataVersion:rse,escapeRawValue:sse,unescapeValue:nse,stringifyProps:ise,timeoutPromise:ase,isClusterOperation:use,getClusterUser:_se,checkGlobalSchemaTable:lse,getHomeDir:XB,getPropsFilePath:ose,promisifyPapaParse:dse,removeBOM:ZB,createEventPromise:fse,checkProcessRunning:Ese,checkSchemaTableExist:hse,checkSchemaExists:eH,checkTableExists:tH,getStartOfTomorrowInSeconds:mse,getLimitKey:pse,isObject:jre,isNotEmptyAndHasValue:Wre,autoCasterIsNumberCheck:jB,backtickASTSchemaItems:Sse,isPortTaken:cse,createForkArgs:Tse,autoCastBoolean:Rse,async_set_timeout:QB,getTableHashAttribute:gse,doesSchemaExist:Ase,doesTableExist:Ose,stringifyObj:Nse,ms_to_time:bse,changeExtension:yse,getEnvCliRootPath:tg,noBootFile:Ise,httpRequest:wse,transformReq:Cse,convertToMS:Dse,PACKAGE_ROOT:ze.PACKAGE_ROOT};function Kre(e){return e instanceof Error?e:new Error(e)}a(Kre,"errorizeMessage");function Ur(e){return e==null}a(Ur,"isEmpty");function Wre(e){return!Ur(e)&&(e||e===0||e===""||zB(e))}a(Wre,"isNotEmptyAndHasValue");function Js(e){return Ur(e)||e.length===0||e.size===0}a(Js,"isEmptyOrZeroLength");function Qre(e){if(Ur(e))return!0;for(let t=0;t<e.length;t++)if(Ur(e[t]))return!0;return!1}a(Qre,"arrayHasEmptyValues");function zre(e){if(Js(e))return!0;for(let t=0;t<e.length;t++)if(Js(e[t]))return!0;return!1}a(zre,"arrayHasEmptyOrZeroLengthValues");function Jre(...e){try{return e.join(ci.sep)}catch{console.error(e)}}a(Jre,"buildFolderPath");function zB(e){return Ur(e)?!1:e===!0||e===!1}a(zB,"isBoolean");function jre(e){return Ur(e)?!1:typeof e=="object"}a(jre,"isObject");function Xre(e){return Js(e)?$re:e.slice(0,-Yre)}a(Xre,"stripFileExtension");function Zre(e){return Ur(e)||e===""||typeof e!="string"?e:KB[e]!==void 0?KB[e]:jB(e)===!0?Number(e):xre.test(e)?new Date(e):e}a(Zre,"autoCast");function JB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(JB,"autoCastJSON");function eg(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=eg(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=eg(r);s!==r&&(e[t]=s)}return e}else return JB(e)}a(eg,"autoCastJSONDeep");function jB(e){if(e.startsWith("0.")&&YB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&YB(e))}a(jB,"autoCasterIsNumberCheck");async function ese(e){if(Js(e))throw new Error(`Directory path: ${e} does not exist`);try{await VB.emptyDir(e),await VB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(ese,"removeDir");function tse(e,t){if(Js(e)){ur.info("Invalid current version sent as parameter.");return}if(Js(t)){ur.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(tse,"compareVersions");function rse(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(rse,"isCompatibleDataVersion");function sse(e){if(Ur(e))return e;let t=String(e);return t==="."?ze.UNICODE_PERIOD:t===".."?ze.UNICODE_PERIOD+ze.UNICODE_PERIOD:t.replace(ze.FORWARD_SLASH_REGEX,ze.UNICODE_FORWARD_SLASH)}a(sse,"escapeRawValue");function nse(e){if(Ur(e))return e;let t=String(e);return t===ze.UNICODE_PERIOD?".":t===ze.UNICODE_PERIOD+ze.UNICODE_PERIOD?"..":String(e).replace(ze.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(nse,"unescapeValue");function ise(e,t){if(Ur(e))return ur.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+Xf.EOL}!Js(s)&&s[0]===";"?r+=" "+s+n+Xf.EOL:Js(s)||(r+=s+"="+n+Xf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(ise,"stringifyProps");function XB(){let e;try{e=Xf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(XB,"getHomeDir");function ose(){let e=ci.join(XB(),ze.HDB_HOME_DIR_NAME,ze.BOOT_PROPS_FILE_NAME);return WB.existsSync(e)||(e=ci.join(__dirname,"../","hdb_boot_properties.file")),e}a(ose,"getPropsFilePath");function ase(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ase,"timeoutPromise");async function cse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Pre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(cse,"isPortTaken");function use(e){try{return ze.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(use,"isClusterOperation");function lse(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(lse,"checkGlobalSchemaTable");function _se(e,t){if(Ur(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ur(e)||Js(e)){ur.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){ur.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ur.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(_se,"getClusterUser");function dse(){$B.parsePromise=function(e,t,r){return new Promise(function(s,n){$B.parse(e,{header:!0,transformHeader:ZB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(dse,"promisifyPapaParse");function ZB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(ZB,"removeBOM");function fse(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${Hre(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(fse,"createEventPromise");async function Ese(e){let t=!0,r=0;do await QB(kre*r++),(await Bre.findPs(e)).length>0&&(t=!1);while(t&&r<Vre);if(t)throw new Error(`process ${e} was not started`)}a(Ese,"checkProcessRunning");function hse(e,t){let r=eH(e);if(r)return r;let s=tH(e,t);if(s)return s}a(hse,"checkSchemaTableExist");function eH(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(eH,"checkSchemaExists");function tH(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(tH,"checkTableExists");function mse(){let e=Zf().utc().add(1,ze.MOMENT_DAYS_TAG).startOf(ze.MOMENT_DAYS_TAG).unix(),t=Zf().utc().unix();return e-t}a(mse,"getStartOfTomorrowInSeconds");function pse(){return Zf().utc().format("DD-MM-YYYY")}a(pse,"getLimitKey");function Sse(e){try{let t=new vre(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){ur.error("Got an error back ticking items."),ur.error(t)}}a(Sse,"backtickASTSchemaItems");function Tse(e){return[e]}a(Tse,"createForkArgs");function Rse(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Rse,"autoCastBoolean");function gse(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(gse,"getTableHashAttribute");function Ase(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Ase,"doesSchemaExist");function Ose(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Ose,"doesTableExist");function Nse(e){try{return JSON.stringify(e)}catch{return e}}a(Nse,"stringifyObj");function bse(e){let t=Zf.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(bse,"ms_to_time");function yse(e,t){let r=ci.basename(e,ci.extname(e));return ci.join(ci.dirname(e),r+t)}a(yse,"changeExtension");function tg(){if(process.env[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=qre(process.argv);if(e[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ze.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(tg,"getEnvCliRootPath");var ZR;function Ise(){if(ZR)return ZR;let e=tg();tg()&&WB.pathExistsSync(ci.join(e,ze.HDB_CONFIG_FILE))&&(ZR=!0)}a(Ise,"noBootFile");function wse(e,t){let r;return e.protocol==="http:"?r=Gre:r=Fre,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(wse,"httpRequest");function Cse(e){if(!e.schema&&!e.database){e.schema=ze.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Cse,"transformReq");function Dse(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Dse,"convertToMS")});var j=T((vhe,iH)=>{"use strict";var rg=require("fs-extra"),bs=require("path"),sH=require("os"),Lse=require("properties-reader"),xu=q(),ji=V(),ee=N(),tE=Rr(),Use="Error initializing environment manager",rE="BOOT_PROPS_FILE_PATH",nH=!1,Mse={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},In={};iH.exports={BOOT_PROPS_FILE_PATH:rE,getHdbBasePath:Pse,setHdbBasePath:vse,get:Bse,initSync:qse,setProperty:he,initTestEnvironment:Fse};function Pse(){return In[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Pse,"getHdbBasePath");function vse(e){In[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(vse,"setHdbBasePath");function Bse(e){let t=tE.getConfigValue(e);return t===void 0?In[e]:t}a(Bse,"get");function he(e,t){Mse[e]&&(In[e]=t),tE.updateConfigObject(e,t)}a(he,"setProperty");function Hse(){let e;try{e=ji.getPropsFilePath(),rg.accessSync(e,rg.constants.F_OK|rg.constants.R_OK),nH=!0;let t=Lse(e);return In[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),In[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),In[rE]=e,!0}catch{return xu.trace(`Environment manager found no properties file at ${e}`),!1}}a(Hse,"doesPropFileExist");function qse(e=!1){try{(nH||Hse()||ji.noBootFile())&&(tE.initConfig(e),In[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=tE.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){xu.error(Use),xu.error(t),console.error(t),process.exit(1)}}a(qse,"initSync");function Fse(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=bs.join(__dirname,"../../","unitTests");In[rE]=bs.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,bs.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,sH.userInfo()?sH.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,bs.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,bs.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,bs.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,bs.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,bs.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,bs.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,bs.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,ji.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ji.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ji.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,ji.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,bs.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ji.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${rE}. Please check your boot props and settings files`;xu.fatal(r),xu.error(t)}}a(Fse,"initTestEnvironment")});var lH=T((Hhe,uH)=>{"use strict";var cH=require("joi"),{string:ku,boolean:oH,array:Gse}=cH.types(),aH=N(),xse=He();uH.exports=kse;function kse(e){let t=cH.object({operation:ku.valid(aH.OPERATIONS_ENUM.ADD_NODE,aH.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:ku.required(),subscriptions:Gse.items({schema:ku.required(),table:ku.optional(),hash_attribute:ku.optional(),subscribe:oH.required(),publish:oH.required()}).min(1).required()});return xse.validateBySchema(e,t)}a(kse,"updateRemoteSourceValidator")});var Vu=T((Fhe,_H)=>{"use strict";var sg=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,s=void 0){this.status=t,this.message=r,this.system_info=s}};_H.exports=sg});var mH=T((xhe,hH)=>{"use strict";var Vse=lH(),wn=q(),ng=De(),dH=N(),ig=Yr(),og=$e(),fH=Dc(),$se=m_(),{Node:Yse,NodeSubscription:EH}=Jn(),ag=Vu(),cg=V(),Kse=j(),{cloneDeep:Wse}=require("lodash"),{broadcast:Qse}=Ge();hH.exports=zse;async function zse(e){try{let t=Vse(e);if(t)return wn.error(`Validation error in updateRemoteSource: ${t.message}`),new ag(ng.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:s,system_info:n}=e,i=[],o=Wse(await ig.getNodeRecord(s)),c=!cg.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&wn.trace(`Existing record found for ${s}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],f=d.schema,E=d.table;if(!cg.doesSchemaExist(f)){wn.trace(`updateRemoteSource creating schema: ${f}`);try{await fH.createSchema({operation:"create_schema",schema:f})}catch(h){wn.error(h)}}if(E&&!cg.doesTableExist(f,E)){let h=new $se(f,E,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),wn.trace(`updateRemoteSource creating table: ${E} in schema: ${f} with attributes: ${JSON.stringify(d.attributes)}`);try{await fH.createTable(h)}catch(p){wn.error(p)}wn.trace(`Creating local stream for ${f}.${E}`),await og.createLocalTableStream(f,E)}if(f===dH.SYSTEM_SCHEMA_NAME&&await og.createLocalTableStream(f,E),await og.updateWorkStream(d,s),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let g=o.subscriptions[p];if(g.schema===f&&g.table===E){g.publish=d.publish,g.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new EH(f,E,d.publish,d.subscribe))}else i.push(new EH(f,E,d.publish,d.subscribe))}c||(o=new Yse(s,i,void 0),wn.trace(`No record found for ${s}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=n,await ig.upsertNodeRecord(u),Qse({type:"nats_update"}),new ag(ng.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${Kse.get(dH.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await ig.getSystemInfo())}catch(t){wn.error(t);let r=t.message?t.message:t;return new ag(ng.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(zse,"updateRemoteSource")});var RH=T((Vhe,TH)=>{"use strict";var SH=require("joi"),{string:pH}=SH.types(),Jse=N(),jse=He();TH.exports=Xse;function Xse(e){let t=SH.object({operation:pH.valid(Jse.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:pH.required()});return jse.validateBySchema(e,t)}a(Xse,"removeRemoteSourceValidator")});var AH=T((Yhe,gH)=>{"use strict";var Zse=RH(),sE=q(),nE=De(),ug=N(),ene=Yr(),tne=V(),rne=$e(),sne=j(),iE=Vu(),{NodeSubscription:nne}=Jn(),ine=yo(),one=qn(),{broadcast:ane}=Ge(),cne=sne.get(ug.CONFIG_PARAMS.CLUSTERING_NODENAME);gH.exports=une;async function une(e){try{let t=Zse(e);if(t)return sE.error(`Validation error in removeRemoteSource: ${t.message}`),new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,s=await ene.getNodeRecord(r);if(tne.isEmptyOrZeroLength(s)){let i=`No record found for node '${r}'`;return sE.error(i),new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}s=s[0];for(let i=0,o=s.subscriptions.length;i<o;i++){let c=s.subscriptions[i];sE.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new nne(c.schema,c.table,!1,!1);await rne.updateWorkStream(u,r)}let n=new ine(ug.SYSTEM_SCHEMA_NAME,ug.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await one.deleteRecord(n),ane({type:"nats_update"}),new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${cne} successfully removed node '${r}'.`)}catch(t){sE.error(t);let r=t.message?t.message:t;return new iE(nE.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(une,"removeRemoteSource")});var IH=T((Whe,yH)=>{"use strict";var oE=q(),aE=N(),OH=De(),NH=j(),lne=V(),bH=Vu(),_ne=Yr(),dne=k_(),fne=pr();yH.exports=Ene;async function Ene(e){try{oE.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=lne.ms_to_time(t),s=new hne(NH.get(aE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),NH.get(aE.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),r,await _ne.getSystemInfo());try{let n={name:e.node_name,system_info:e.system_info},i=new dne(aE.SYSTEM_SCHEMA_NAME,aE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[n]);await fne.update(i)}catch(n){oE.error("Get remote config encountered an error updating system info for node:",e.node_name,n)}return oE.trace("getRemoteSourceConfig response:",s),new bH(OH.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,s)}catch(t){oE.error(t);let r=t.message?t.message:t;return new bH(OH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Ene,"getRemoteSourceConfig");function hne(e,t,r,s){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=s}a(hne,"ConfigResponseObject")});var LH=T((zhe,DH)=>{"use strict";var wH=j();wH.initSync();var CH=$e(),$u=q(),Ta=N(),lg=De(),mne=mH(),pne=AH(),Sne=IH(),Tne=Vu(),{encode:Rne,decode:gne}=require("msgpackr"),Ane=nn(),One=vn(),Nne=require("util"),bne=N(),{isMainThread:yne,parentPort:Ine}=require("worker_threads");Ge();var wne=Nne.promisify(Ane.setSchemaDataToGlobal),_g=wH.get(Ta.CONFIG_PARAMS.CLUSTERING_NODENAME);DH.exports=Cne;async function Cne(){try{$u.notify("Starting reply service."),await wne();let e=await CH.getConnection(),t=`${_g}.__request__`,r=e.subscribe(t,{queue:_g});await Dne(r)}catch(e){$u.error(e)}}a(Cne,"initialize");async function Dne(e){for await(let t of e){let r=gne(t.data),s;switch(r.operation){case Ta.OPERATIONS_ENUM.ADD_NODE:case Ta.OPERATIONS_ENUM.UPDATE_NODE:s=await mne(r);break;case Ta.OPERATIONS_ENUM.REMOVE_NODE:s=await pne(r);break;case Ta.OPERATIONS_ENUM.CLUSTER_STATUS:s=await Sne(r);break;case Ta.OPERATIONS_ENUM.DESCRIBE_ALL:s=await Lne();break;default:let n=`node '${_g}' reply service received unrecognized request operation`;$u.error(n),s=new Tne(lg.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,n)}$u.trace(s),t.respond(Rne(s))}}a(Dne,"handleRequest");async function Lne(){try{return{status:lg.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await One.describeAll()}}catch(e){return $u.error(e),{status:lg.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(Lne,"getRemoteDescribeAll");yne||Ine.on("message",async e=>{let{type:t}=e;t===bne.ITC_EVENT_TYPES.SHUTDOWN&&CH.closeConnection()})});var Une=LH();(async()=>{try{await Une()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|