harperdb 4.3.0-beta.5 → 4.3.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +20 -20
- package/bin/lite.js +16 -16
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +16 -16
- package/launchServiceScripts/launchNatsReplyService.js +16 -16
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +18 -18
- package/npm-shrinkwrap.json +8 -5
- package/package.json +1 -1
- package/resources/DatabaseTransaction.d.ts +1 -1
- package/server/jobs/jobProcess.js +16 -16
- package/server/threads/threadServer.js +16 -16
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.1b4b013e.js → main.912a850a.js} +2 -2
- package/utility/scripts/restartHdb.js +16 -16
- /package/studio/build-local/static/js/{main.1b4b013e.js.LICENSE.txt → main.912a850a.js.LICENSE.txt} +0 -0
package/bin/harperdb.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var sV=Object.create;var yl=Object.defineProperty;var iV=Object.getOwnPropertyDescriptor;var oV=Object.getOwnPropertyNames;var aV=Object.getPrototypeOf,cV=Object.prototype.hasOwnProperty;var a=(e,t)=>yl(e,"name",{value:t,configurable:!0});var Ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)yl(e,r,{get:t[r],enumerable:!0})},Gb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of oV(t))!cV.call(e,s)&&s!==r&&yl(e,s,{get:()=>t[s],enumerable:!(n=iV(t,s))||n.enumerable});return e};var q=(e,t,r)=>(r=e!=null?sV(aV(e)):{},Gb(t||!e||!e.__esModule?yl(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>Gb(yl({},"__esModule",{value:!0}),e);var $b=g((MEe,kb)=>{var lV=require("fast-glob"),{statSync:Am,existsSync:Om,readFileSync:uV,writeFileSync:_V}=require("fs"),{spawnSync:dV,spawn:fV,execFileSync:PEe}=require("child_process"),{isMainThread:EV}=require("worker_threads"),{join:qi,relative:Fb}=require("path"),{PACKAGE_ROOT:Yn}=w(),{tmpdir:hV,platform:pV}=require("os");require("source-map-support").install();var mV=["resources","server","dataLayer","components"],Il="ts-build",Nm,SV=__filename.endsWith("tsBuild.js");if(SV){if(EV){let r;try{Am(qi(Yn,Il)),r=!0}catch{}if(r)for(let n of lV.sync(mV.map(s=>s+"/**/*.ts"),{cwd:Yn})){let s=0,i=0;try{s=Am(qi(Yn,n)).mtimeMs-5e3,i=Am(qi(Yn,Il,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Nm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Nm=!0;if(Nm){let n=qi(Yn,"node_modules/.bin/tsc");pV()==="win32"&&(n+=".cmd");let s=dV(n,{cwd:Yn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=qi(hV(),"harperdb-tsc.pid"),o;if(Om(i))try{process.kill(+uV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=fV(n,["--watch"],{cwd:Yn,detached:!0,stdio:"ignore"});_V(i,c.pid.toString()),c.unref()}}}}let e=kb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Yn)&&!n[0].includes("node_modules")){let i=Fb(Yn,n[0]),o;i.startsWith(Il)?o=qi(Yn,Fb(Il,i)):o=qi(Yn,Il,i);let c=qi(o,r),l=c+".js";if(Om(l))return l;if(c.includes(".")&&Om(c))return c}return t(r,n,s)}}});var w=g((BEe,ny)=>{"use strict";var An=require("path"),TV=require("fs"),{relative:UEe,join:vEe}=An,{existsSync:gV}=TV;function RV(){let e=__dirname;for(;!gV(An.join(e,"package.json"));){let t=An.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(RV,"getHDBPackageRoot");var xi=RV(),Vb="js",yd=Vb,AV="harperdb-config.yaml",OV="defaultConfig.yaml",NV="hdb",Yb=`harperdb.${yd}`,Kb=`customFunctionsServer.${yd}`,bV=`restartHdb.${yd}`,ym="HarperDB",bd="Custom Functions",Id="Clustering Hub",wd="Clustering Leaf",yV="Clustering Ingest Service",IV="Clustering Reply Service",wV="foreground.pid",CV="hdb.pid",LV="data",DV={HDB:ym,CLUSTERING_HUB:Id,CLUSTERING_LEAF:wd,CLUSTERING_INGEST_SERVICE:yV,CLUSTERING_REPLY_SERVICE:IV,CUSTOM_FUNCTIONS:bd,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"},PV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},MV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},UV={harperdb:ym,"clustering hub":Id,"clustering leaf":wd,"custom functions":bd,custom_functions:bd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},vV={CLUSTERING_HUB_PROC_DESCRIPTOR:Id,CLUSTERING_LEAF_PROC_DESCRIPTOR:wd},bm={HDB:An.join(xi,"server/harperdb"),CUSTOM_FUNCTIONS:An.join(xi,"server/customFunctions"),CLUSTERING_HUB:An.join(xi,"server/nats"),CLUSTERING_LEAF:An.join(xi,"server/nats")},BV={HDB:An.join(bm.HDB,Yb),CUSTOM_FUNCTIONS:An.join(bm.CUSTOM_FUNCTIONS,Kb)},HV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:An.join(xi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:An.join(xi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:An.join(xi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},qV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Wb="support@harperdb.io",xV="customer-success@harperdb.io",Qb=1,GV=4141,jb="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",FV="https://www.harperdb.io/product",kV=`For support, please submit a request at ${jb} or contact ${Wb}`,zb=`For license support, please contact ${xV}`,$V="None of the specified records were found.",VV="hash attribute not found",YV=`Your current license only supports ${Qb} role. ${zb}`,KV="Your current license only supports 3 connections to a node.",WV="127.0.0.1",QV=1,jV=/^\.$/,zV=/^\.\.$/,JV="U+002E",XV=/\//g,ZV="U+002F",eY=/U\+002F/g,tY=/^U\+002E$/,rY=/^U\+002EU\+002E$/,nY="d",sY=999999,iY="*",oY="--max-old-space-size=",aY="system",cY="__hdb_hash",lY=".harperdb",uY=".hdb",_Y="keys",dY="hdb_boot_properties.file",fY=".updateConfig.json",EY="SIGTSTP",hY=24,pY=6e4,mY=448,SY="blob",TY="trash",gY="database",RY="schema",AY="transactions",OY=".count",NY="id",bY="PROCESS_NAME",Jb={SETTINGS_PATH_KEY:"settings_path"},Xb=require("lodash"),yY={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",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},IY={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},wY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},CY={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"},LY={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:",DY={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"},PY={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"},MY="060493.ks",UY=".license",vY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Z={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",SET_NODE_REPLICATION:"set_node_replication",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"},BY={CSV:".csv",JSON:".json"},HY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},qY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},wl={};wl[Z.INSERT]=Z.INSERT;wl[Z.UPDATE]=Z.UPDATE;wl[Z.UPSERT]=Z.UPSERT;wl[Z.DELETE]=Z.DELETE;var qe=Object.create(null);qe[Z.DESCRIBE_ALL]=Z.DESCRIBE_ALL;qe[Z.DESCRIBE_TABLE]=Z.DESCRIBE_TABLE;qe[Z.DESCRIBE_SCHEMA]=Z.DESCRIBE_SCHEMA;qe[Z.READ_LOG]=Z.READ_LOG;qe[Z.ADD_NODE]=Z.ADD_NODE;qe[Z.LIST_USERS]=Z.LIST_USERS;qe[Z.LIST_ROLES]=Z.LIST_ROLES;qe[Z.USER_INFO]=Z.USER_INFO;qe[Z.SQL]=Z.SQL;qe[Z.GET_JOB]=Z.GET_JOB;qe[Z.SEARCH_JOBS_BY_START_DATE]=Z.SEARCH_JOBS_BY_START_DATE;qe[Z.DELETE_FILES_BEFORE]=Z.DELETE_FILES_BEFORE;qe[Z.EXPORT_LOCAL]=Z.EXPORT_LOCAL;qe[Z.EXPORT_TO_S3]=Z.EXPORT_TO_S3;qe[Z.CLUSTER_STATUS]=Z.CLUSTER_STATUS;qe[Z.REMOVE_NODE]=Z.REMOVE_NODE;qe[Z.RESTART]=Z.RESTART;qe[Z.CUSTOM_FUNCTIONS_STATUS]=Z.CUSTOM_FUNCTIONS_STATUS;qe[Z.GET_CUSTOM_FUNCTIONS]=Z.GET_CUSTOM_FUNCTIONS;qe[Z.GET_CUSTOM_FUNCTION]=Z.GET_CUSTOM_FUNCTION;qe[Z.SET_CUSTOM_FUNCTION]=Z.SET_CUSTOM_FUNCTION;qe[Z.DROP_CUSTOM_FUNCTION]=Z.DROP_CUSTOM_FUNCTION;qe[Z.ADD_CUSTOM_FUNCTION_PROJECT]=Z.ADD_CUSTOM_FUNCTION_PROJECT;qe[Z.DROP_CUSTOM_FUNCTION_PROJECT]=Z.DROP_CUSTOM_FUNCTION_PROJECT;qe[Z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=Z.PACKAGE_CUSTOM_FUNCTION_PROJECT;qe[Z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=Z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var xY={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},GY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Zb={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"},FY=Xb.invert(Zb),kY={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"},C={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",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",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",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",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_DOMAINSOCKET:"operationsApi_network_domainSocket",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",SERIALIZATION_BIGINT:"serialization_bigInt",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_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},ey={settings_path:Jb.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS_COUNT,max_hdb_processes:C.THREADS_COUNT,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS_COUNT,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS_COUNT,threads:C.THREADS_COUNT,threads_count:C.THREADS_COUNT,threads_debug:C.THREADS_DEBUG,threads_maxheapmemory:C.THREADS_MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,http_mtls:C.HTTP_MTLS,http_mtls_user:C.HTTP_MTLS_USER,http_mtls_required:C.HTTP_MTLS_REQUIRED,customfunctions_processes:C.THREADS_COUNT,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:C.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];ey[t.toLowerCase()]=t}var $Y={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},VY={csv_file_load:"csv_file_load",csv_data_load:Z.CSV_DATA_LOAD,csv_url_load:Z.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"},YY={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"},KY={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},WY={VERSION_DEFAULT:"2.2.0"},QY={DEVELOPMENT:8192,DEFAULT:512},jY={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"},zY={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"},JY={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},ty={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},XY=Symbol("metadata"),ZY="__clustering__",e1=Object.values(ty),t1=15984864e5,ry={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},r1=Xb.invert(ry),n1={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"},s1=111,i1=`\r
|
|
3
|
-
`,
|
|
4
|
-
`}a(Xs,"createLogRecord");function Ml(e){zs&&Ey(e),Ts&&process.stdout.write(e)}a(Ml,"logStdOut");function Pd(e){zs&&Ey(e),Ts&&process.stderr.write(e)}a(Pd,"logStdErr");function Ey(e){L1(),Xa?vo.appendFileSync(Xa,e):Ll.log(e)}a(Ey,"logToFile");function Cm(){try{vo.closeSync(Xa)}catch{}Xa=null}a(Cm,"closeLogFile");function L1(){if(!Xa){try{if(!Dl)debugger;Xa=vo.openSync(Dl,"a")}catch(e){Ll.error(e)}setTimeout(()=>{Cm()},y1).unref()}}a(L1,"openLogFile");function Dd(...e){dr[_r]<=dr.info&&Ml(Xs("info",e))}a(Dd,"info");function Lm(...e){dr[_r]<=dr.trace&&Ml(Xs("trace",e))}a(Lm,"trace");function Pl(...e){dr[_r]<=dr.error&&Pd(Xs("error",e))}a(Pl,"error");function Dm(...e){dr[_r]<=dr.debug&&Ml(Xs("debug",e))}a(Dm,"debug");function hy(...e){dr[_r]<=dr.notify&&Ml(Xs("notify",e))}a(hy,"notify");function py(...e){dr[_r]<=dr.fatal&&Pd(Xs("fatal",e))}a(py,"fatal");function Pm(...e){dr[_r]<=dr.warn&&Pd(Xs("warn",e))}a(Pm,"warn");function D1(e,t,...r){t===_y.STDERR?Pd(Xs(e,r)):Ml(Xs(e,r))}a(D1,"logCustomLevel");function P1(){let e;try{e=A1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Js.join(e,Ct.HDB_HOME_DIR_NAME,Ct.BOOT_PROPS_FILE_NAME);return vo.existsSync(t)||(t=Js.join(wm,"utility/hdb_boot_properties.file")),t}a(P1,"getPropsFilePath");function M1(e){_r=e}a(M1,"setLogLevel");function cy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(cy,"autoCastBoolean");function U1(e){try{if(e.includes("config/settings.js")){let o=uy(e);return{level:o.get(Ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Js.dirname(o.get(Ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=ly.parseDocument(vo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Ct.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(U1,"getLogConfig");function v1(){try{let e=ly.parseDocument(vo.readFileSync(b1,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(v1,"getDefaultConfig");function B1(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(B1,"AuthAuditLog")});var Bo=g((kEe,H1)=>{H1.exports={name:"harperdb",version:"4.3.0-beta.5",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && 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:bin && 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:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@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:"4.1.10","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.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.2",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.10.1",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.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",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:"1.6.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.3.3","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 Gi=g(($Ee,my)=>{"use strict";my.exports={version:q1,printVersion:x1};var Md=Bo();function q1(){if(Md)return Md.version}a(q1,"version");function x1(){Md&&console.log(`HarperDB Version ${Md.version}`)}a(x1,"printVersion")});var gy=g((YEe,Ty)=>{"use strict";var Sy=require("semver/functions/major"),G1=Bo(),Um=process.versions&&process.versions.node?process.versions.node:void 0;Ty.exports=F1;function F1(){let e=G1.engines["minimum-node"];if(Um&&Sy(Um)<Sy(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Um}. Please install a version of Node.js that is withing the defined range.`}}a(F1,"checkNodeVersion")});var Ho={};$e(Ho,{server:()=>it});var Ry,it,fr=Ne(()=>{Ry=require("../index"),it={};(0,Ry._assignPackageExport)("server",it)});var vm=g((WEe,Ay)=>{"use strict";var k1=require("util"),$1=require("path"),V1=require("child_process"),Y1=k1.promisify(V1.execFile),K1=1e3*1e3*10;Ay.exports={findPs:W1};async function W1(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await Y1("ps",["wwxo",`pid,${r}`],{maxBuffer:K1});for(let s of n.trim().split(`
|
|
5
|
-
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:$1.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(W1,"findPs")});var _t=g((jEe,Ny)=>{"use strict";var Q1="__dbis__",j1="__txns__",z1="__environment_name__",J1="__dbi_defintion__",X1={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"},Z1=["__createdtime__","__updatedtime__"],eK="\uFFFF",Oy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},tK=Object.values(Oy);Ny.exports={AUDIT_STORE_NAME:j1,INTERNAL_DBIS_NAME:Q1,DBI_DEFINITION_NAME:J1,SEARCH_TYPES:X1,TIMESTAMP_NAMES:Z1,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:z1,TRANSACTIONS_DBI_NAMES_ENUM:Oy,TRANSACTIONS_DBIS:tK,OVERFLOW_MARKER:eK}});var Vr=g((zEe,My)=>{"use strict";var by=w(),yy=_t(),Iy={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},wy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Cy={500:wy("There was an error processing your request."),400:"Invalid request"},rK=Cy[Iy.INTERNAL_SERVER_ERROR],nK={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.`},sK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},iK={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"},oK={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 ${yy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${yy.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"},aK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${by.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 ${by.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"},Ly={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"},cK={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."},lK={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`},uK={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"},_K={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},dK={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`},Dy={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.`},Py={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}`},fK={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."},EK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},hK={...Ly,...iK,...nK,...cK,...lK,...uK,..._K,...dK,...aK,...Dy,...Py,...fK,...EK,...sK};My.exports={CHECK_LOGS_WRAPPER:wy,HDB_ERROR_MSGS:hK,DEFAULT_ERROR_MSGS:Cy,DEFAULT_ERROR_RESP:rK,HTTP_STATUS_CODES:Iy,LMDB_ERRORS_ENUM:oK,AUTHENTICATION_ERROR_MSGS:Ly,VALIDATION_ERROR_MSGS:Dy,ITC_ERRORS:Py}});var se=g((XEe,By)=>{"use strict";var Za=Vr(),pK=G(),mK=w(),Ud=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Uy),this.statusCode=n||Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Za.DEFAULT_ERROR_MSGS[n]?Za.DEFAULT_ERROR_MSGS[n]:Za.DEFAULT_ERROR_MSGS[Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&pK[s](i)}},Bm=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}},Hm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Uy(e,t,r,n=mK.LOG_LEVELS.ERROR,s=null,i=!1){if(vy(e))return e;let o=new Ud(e,t,r,n,s);return i&&delete o.stack,o}a(Uy,"handleHDBError");function vy(e){return e.__proto__.constructor.name===Ud.name}a(vy,"isHDBError");By.exports={isHDBError:vy,handleHDBError:Uy,ClientError:Bm,ServerError:Hm,hdb_errors:Za}});var ze=g((ehe,$y)=>{"use strict";var ql=w(),SK=W(),Er=J(),xl=require("path"),TK=require("minimist"),Hy=require("fs-extra"),qy=require("lodash");Er.initSync();var{CONFIG_PARAMS:Fi,DATABASES_PARAM_CONFIG:Ul,SYSTEM_SCHEMA_NAME:vd}=ql,vl,Bl,Hl;function xy(){if(vl!==void 0)return vl;if(Er.getHdbBasePath()!==void 0)return vl=Er.get(Fi.STORAGE_PATH)||xl.join(Er.getHdbBasePath(),ql.DATABASES_DIR_NAME),vl}a(xy,"getBaseSchemaPath");function Gy(){if(Bl!==void 0)return Bl;if(Er.getHdbBasePath()!==void 0)return Bl=ky(vd),Bl}a(Gy,"getSystemSchemaPath");function Fy(){if(Hl!==void 0)return Hl;if(Er.getHdbBasePath()!==void 0)return Hl=Er.get(ql.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||xl.join(Er.getHdbBasePath(),ql.TRANSACTIONS_DIR_NAME),Hl}a(Fy,"getTransactionAuditStoreBasePath");function gK(e,t){let r=Er.get(Fi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||xl.join(Fy(),e.toString())}a(gK,"getTransactionAuditStorePath");function ky(e,t){e=e.toString(),t=t&&t.toString();let r=Er.get(ql.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||xl.join(xy(),e)}a(ky,"getSchemaPath");function RK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,TK(process.argv));let n=r[Fi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!SK.isObject(n))throw o;i=n}for(let o of i){let c=o[vd];if(!c)continue;let l=Er.get(Fi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Ul.PATH];if(_)return qy.set(l,[vd,Ul.TABLES,t,Ul.PATH],_),Er.setProperty(Fi.DATABASES,l),_;let u=c?.[Ul.PATH];if(u)return qy.set(l,[vd,Ul.PATH],u),Er.setProperty(Fi.DATABASES,l),u}}let s=r[Fi.STORAGE_PATH.toUpperCase()];if(s){if(!Hy.pathExistsSync(s))throw new Error(s+" does not exist");let i=xl.join(s,e);return Hy.mkdirsSync(i),Er.setProperty(Fi.STORAGE_PATH,s),i}return Gy()}a(RK,"initSystemSchemaPaths");function AK(){vl=void 0,Bl=void 0,Hl=void 0}a(AK,"resetPaths");$y.exports={getBaseSchemaPath:xy,getSystemSchemaPath:Gy,getTransactionAuditStorePath:gK,getTransactionAuditStoreBasePath:Fy,getSchemaPath:ky,initSystemSchemaPaths:RK,resetPaths:AK}});var hr=g((she,Qy)=>{"use strict";var OK=Vr().LMDB_ERRORS_ENUM,rhe=require("lmdb"),NK=_t(),nhe=require("buffer").Buffer,{OVERFLOW_MARKER:Vy,MAX_SEARCH_KEY_LENGTH:Bd}=NK,Yy=["number","string","symbol","boolean","bigint"];function bK(e){if(e=e?.primaryStore||e,!e)throw new Error(OK.ENV_REQUIRED)}a(bK,"validateEnv");function yK(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(yK,"stringifyData");function IK(e){return e instanceof Date?e.valueOf():e}a(IK,"convertKeyValueToWrite");function wK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Yy.includes(typeof e))return e.length>Bd?[e.slice(0,Bd)+Vy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Yy.includes(typeof i))i.length>Bd?r.push(i.slice(0,Bd)+Vy):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(wK,"getIndexedValues");var Hd=0,Ky=0;function Wy(){Ky=Date.now()-performance.now()}a(Wy,"adjustStartTime");Wy();var CK=6e4;setInterval(Wy,CK).unref();function LK(){let e=performance.now()+Ky;return e>Hd?(Hd=e,e):(Hd+=488e-6,Hd)}a(LK,"getNextMonotonicTime");Qy.exports={validateEnv:bK,stringifyData:yK,convertKeyValueToWrite:IK,getNextMonotonicTime:LK,getIndexedValues:wK}});var jy,Kn,qm,Gl=Ne(()=>{jy=require("events"),Kn=class extends jy.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new qm;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)}},qm=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}}}});var Zy={};$e(Zy,{HAS_EXPIRATION:()=>Km,LAST_TIMESTAMP_PLACEHOLDER:()=>$l,LOCAL_TIMESTAMP:()=>DK,METADATA:()=>Fl,NO_TIMESTAMP:()=>Gm,PENDING_LOCAL_TIME:()=>Wm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Ym,RecordEncoder:()=>$m,TIMESTAMP_ASSIGN_LAST:()=>MK,TIMESTAMP_ASSIGN_NEW:()=>Jy,TIMESTAMP_ASSIGN_PREVIOUS:()=>Xy,TIMESTAMP_PLACEHOLDER:()=>qd,TIMESTAMP_RECORD_PREVIOUS:()=>Fm,fromResource:()=>kd,getUpdateRecord:()=>Qm,handleLocalTimeForGets:()=>$d});function vK(){return kl[0]=kl[0]^64,PK.getFloat64(0)}function kd(e){Vm=!0;try{return e()}finally{Vm=!1}}function $d(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[Fl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Fl]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[Fl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,qo.push(new WeakRef(this))),!Vm)try{throw new Error("Read transaction used outside of resource")}catch(l){this.readStack=l.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<qo.length;l++){let _=qo[l].deref();(!_||_.isDone||_.isCommitted)&&qo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Qm(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?ec=i?.localTime?Fm|Xy:Gm:ec=l?i?.localTime?Fm|16384:Jy|16384:Gm,u>0&&(c|=Km),Gd=c,km=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ec>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let A=_?.user?.username;if(E&&(xd=e.encoder.encode(E)),f&&i?.localTime){let T=i?.localTime,R=r.get(T);if(R){let U=xt(R).previousLocalTime;return r.put(T,Fd(o,t,n,U,A,d,xd),{ifVersion:m}),S}}r.put($l,Fd(o,t,n,i?.localTime?1:0,A,d,xd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var zy,xm,qd,$l,Ym,DK,Fl,kl,PK,Gm,Jy,MK,Xy,Fm,Km,Wm,UK,xd,ec,Gd,km,$m,lhe,Vm,qo,tc=Ne(()=>{zy=require("msgpackr");xo();xm=q(G()),qd=new Uint8Array([1,1,1,1,4,64,0,0]),$l=new Uint8Array([1,1,1,1,1,0,0,0]),Ym=new Uint8Array([1,1,1,1,3,64,0,0]),DK=Symbol("local-timestamp"),Fl=Symbol("metadata"),kl=new Uint8Array(8),PK=new DataView(kl.buffer,0,8),Gm=0,Jy=0,MK=1,Xy=3,Fm=4,Km=16,Wm=1,ec=0,Gd=-1,km=0,$m=class extends zy.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(ec||Gd>=0){let i=0,o=ec;o&&(i+=8,ec=0);let c=Gd,l=km;c>=0&&(i+=2,Gd=-1,l&&(i+=8,km=0));let _=UK=r.call(this,n,s|2048|i);xd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(qd[4]=o,qd[5]=o>>8,_.set(qd,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(kl,0,c),c+=8;else for(let d=0;d<8;d++)kl[d]=t[c++];l=vK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Km&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[Fl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(vK,"getTimestamp");lhe=Map.prototype.get;a(kd,"fromResource");a($d,"handleLocalTimeForGets");qo=[];setInterval(()=>{for(let e=0;e<qo.length;e++){let t=qo[e].deref();!t||t.isDone||t.isCommitted?qo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(xm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):xm.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(Qm,"getUpdateRecord")});var _I={};$e(_I,{AUDIT_STORE_OPTIONS:()=>lI,createAuditEntry:()=>Fd,openAuditStore:()=>Wd,readAuditEntry:()=>xt,setAuditRetention:()=>HK,transactionKeyEncoder:()=>cI});function Wd(e){let t=e.auditStore=e.openDB(iI.AUDIT_STORE_NAME,lI);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Vd){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-jm})){if((_[0]&15)===Xm){let u=xt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=BK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,jm/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Kd.getWorkerIndex)()===(0,Kd.getWorkerCount)()-1&&s(Vd),t}function HK(e,t=Vd){jm=e,Vd=t}function Fd(e,t,r,n,s,i,o){let c=uI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?rc.setFloat64(0,n):On.set(Ym),l=9),f(0),f(t),d(r),rc.setFloat64(l,e),l+=8,s?d(s):On[l++]=0,On[n?8:0]=c;let u=On.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,nc.writeKey)(E,On,l);let m=l-h-1;m>127?m>16383?(eS.error("Key or username was too large for audit entry",E),l=h+1,On[h]=0):(On.copyWithin(h+2,h+1,l),rc.setUint16(h,m|32768),l++):On[h]=m}function f(E){E<128?On[l++]=E:E<16384?(rc.setUint16(l,E|32768),l+=2):E<1056964608?(rc.setUint32(l,E|3221225472),l+=4):(On[l]=255,rc.setUint32(l+1,E),l+=5)}}function xt(e){try{let t=e.dataView||(e.dataView=new Zm(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:uI[n&7],tableId:i,get recordId(){return sI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?sI(e,u,d):void 0},getValue(f,E,h){if(n&zm||n&Jm&&!E)return f.decoder.decode(e.subarray(t.position));if(n&Jm&&h)return tS(f.getEntry(this.recordId),h,f)}}}catch{return eS.error("Reading audit entry error",e),{}}}function sI(e,t,r){let n=e.subarray(t,r);return(0,nc.readKey)(n,0,r-t)}var nc,Yd,iI,oI,Kd,aI,eS,On,rc,cI,lI,jm,BK,Vd,zm,Jm,eI,Xm,tI,rI,nI,uI,Zm,xo=Ne(()=>{nc=require("ordered-binary"),Yd=q(J()),iI=q(_t()),oI=q(w()),Kd=q(tt()),aI=q(W());tc();eS=q(G());Qd();(0,Yd.initSync)();On=Buffer.alloc(1024),rc=new DataView(On.buffer,On.byteOffset,1024),cI={writeKey(e,t,r){return e===$l?(t.set($l,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,nc.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,nc.readKey)(e,t,r)}},lI={encoding:"binary",keyEncoder:cI},jm=(0,aI.convertToMS)((0,Yd.get)(oI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,BK=1e3,Vd=1e4;a(Wd,"openAuditStore");a(HK,"setAuditRetention");zm=16,Jm=32,eI=1,Xm=2,tI=3,rI=4,nI=5,uI={put:eI|zm,[eI]:"put",delete:Xm,[Xm]:"delete",message:tI|zm,[tI]:"message",invalidate:rI,[rI]:"invalidate",patch:nI|Jm,[nI]:"patch"};a(Fd,"createAuditEntry");a(xt,"readAuditEntry");Zm=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(sI,"readKeySafely")});var rS={};$e(rS,{add:()=>jd,applyReverse:()=>dI,getRecordAtTime:()=>tS,rebuildUpdateBefore:()=>zd});function jd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function zd(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,jd(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function dI(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=qK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=fI}}function tS(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=xt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":dI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===fI&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=xt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var qK,fI,Qd=Ne(()=>{xo();a(jd,"add");jd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};qK={add:jd};a(zd,"rebuildUpdateBefore");a(dI,"applyReverse");fI={};a(tS,"getRecordAtTime")});function Yr(e){return e[Lt]||(e[Lt]=Object.create(null))}function tf(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[be])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a string, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a string, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a number, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new Nn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new Nn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new Nn.ClientError(`${c} must be a number, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Nn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Yr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Yr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be an object, attempt to assign ${u}`);Yr(this)[c]=u},"set")}_={get(){let u=this[Lt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[Ee]?.[c];return f.update(E)}return f}let d=this[Ee]?.[c];if(d&&typeof d=="object"){let f=hI(d,o);if(f)return u||(u=this[Lt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Lt];return l?.[o]!==void 0?l[o]:this[Ee]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Nn.ClientError("Can not add a property to a sealed table schema");Yr(this)[o]=c}),i("deleteProperty",function(o){Yr(this)[o]=void 0}),i("toJSON",function(){let o=this[Lt],c;for(let _ in o){c||(c=Object.assign({},this[Ee]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ee])),Object.assign(c,this)),c||this[Ee]}),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 hI(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=s}},tf(r,t)),new r(e)):new Jd(e);case Array:let n=new Zd(e.length);n[Ee]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=hI(o,t?.elements)),n[s]=o}return n;default:return e}}function rf(e){let t=e[Lt],r;for(let s in t){r||(r=Object.assign({},e[Ee]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=rf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ee])),Object.assign(r,e)),r||e[Ee]}function Fo(e,t=e[Lt]){let r;if(EI.call(e,Ee)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Fo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ee]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=rS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Fo(s);r[n]=s}return r?Object.freeze(r):EI.call(e,Ee)?e[Ee]:e}function Xd(e){let t=e[Ee];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Go]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Ee]===s){if(Xd(i))return!0}else return!0}}else{let r=e[Lt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Ee]===i){if(Xd(s))return!0}else return!0}else return!0}}return!1}var Nn,Lt,Jd,EI,Go,Zd,ef,nf=Ne(()=>{Wn();Nn=q(se());Qd();Lt=Symbol("own-data");a(Yr,"getChanges");a(tf,"assignTrackedAccessors");a(hI,"trackObject");Jd=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=t}};tf(Jd,{});a(rf,"collapseData");EI=Object.prototype.hasOwnProperty;a(Fo,"deepFreeze");a(Xd,"hasChanges");Go=Symbol.for("has-array-changes"),Zd=class extends Array{static{a(this,"TrackedArray")}[Go];constructor(t){super(t)}splice(...t){return this[Go]=!0,super.splice(...t)}push(...t){return this[Go]=!0,super.push(...t)}pop(){return this[Go]=!0,super.pop()}unshift(...t){return this[Go]=!0,super.unshift(...t)}shift(){return this[Go]=!0,super.shift()}};Zd.prototype.constructor=Array;ef=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function kK(){FK=setInterval(function(){for(let e of nS)if(e.stale){let t=e[be]?.url;pI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},GK).unref()}var sS,pI,xK,nS,ko,sf,GK,FK,iS=Ne(()=>{sS=q(hr()),pI=q(G());Wn();tc();xK=100,nS=new Set,ko=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===0)return this.readTxnsUsed=1,kd(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),nS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),kd(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(nS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(this.open===2)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.open===1&&this.commit()}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,sS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?1:2;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<xK>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return s.then(u=>u?(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=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=2,this.writes=[]}},sf=class extends ko{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,sS.getNextMonotonicTime)())}getReadTxn(){}},GK=3e4;a(kK,"startMonitoringTxns");kK()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===0&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new ko;e.timestamp&&(n.timestamp=e.timestamp),n[be]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var mI,$o=Ne(()=>{mI=require("../index");Wn();iS();a(Ze,"transaction");(0,mI._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function cS(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let E=1;E<e.length;E++){let h=e[E],m=_(h);d=d.concat(m)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?cS(d.conditions,d.operator,r,n,s,i,o,c):oc(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",R=u(h.conditions,!T,E);return T?(U,B)=>R.some(v=>v(U,B)):(U,B)=>R.every(v=>v(U,B))}let S=(h.attribute||h[0])===r.primaryKey,A=uS(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=JK(r.primaryStore,h.estimated_count,E)),A}).filter(Boolean)}a(u,"mapConditionsToFilters")}function oc(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],R=ei(n.attributes,T);if(R.relationship){if(o.length<2)throw new Kr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let U=R.definition?.tableClass||R.elements?.definition?.tableClass,B=new Map,v=oc({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,U,s,B);if(R.relationship.to){i[o[0]]=B;let P=!!ei(U.attributes,R.relationship.to)?.elements;v=WK(v,R,U.primaryStore,P,B)}if(R.relationship.from){let P=a(V=>oc({attribute:R.relationship.from,value:V},t,r,n,s,B),"searchEntry");R.elements?(i[o[0]]=B,v=QK(v,R,U.primaryStore,B,P)):v=v.flatMap(P)}return v}else if(o.length===1)o=o[0];else throw new Kr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(lS[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=gs.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new Kr.ClientError(`Unknown query comparator "${l}"`)}if(r){let T=_;_=u,u=T,T=!f,f=!d,d=T}let h=o===n.primaryKey||o==null,m=h?n.primaryStore:n.indices[o],S;if(!m||m.isIndexing||E||c===null&&!m.indexNulls){if(s===!1&&!m)throw new Kr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new Kr.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new Kr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new Kr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=uS(e),!S)throw new Kr.ClientError(`Unknown search operator ${e.comparator}`)}let A={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=m.getRange(A).map(S?function({key:R,value:U}){return this.isSync?U&&S(U)?R:ki.SKIP:new Promise((B,v)=>setImmediate(()=>{try{B(U&&S(U)?R:ki.SKIP)}catch(P){v(P)}}))}:R=>R.value==null?ki.SKIP:R);return T.hasEntries=!0,T}else return m?m.getRange(A).map(S?function({key:T,value:R}){return this.isSync?S({[o]:T})?R:ki.SKIP:new Promise((U,B)=>setImmediate(()=>{try{U(S({[o]:T})?R:ki.SKIP)}catch(v){B(v)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:R}){return this.isSync?R&&S(R)?T:ki.SKIP:new Promise((U,B)=>setImmediate(()=>{try{U(R&&S(R)?T:ki.SKIP)}catch(v){B(v)}}))})}function ei(e,t){if(Array.isArray(t))if(t.length>1){let r=ei(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ei(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function WK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let f=u;Array.isArray(u)&&(f=Qn(u),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),u!==f&&(E.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[l];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],u);else _(f,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function QK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let _=Qn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(Qn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(Qn(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function uS(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=ei(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=uS({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},f,r,E?.[u]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let m=t.propertyResolvers?.[u],S,A=a((T,R)=>{let U,B;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let P of h.idFilter.idSet)e={attribute:m.from,value:P};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(A.idFilter=S.idFilter),v}B=m(T,r,R),U=B?.value}else U=T[u];return U?Array.isArray(U)?U.some(h):h(U,B):!1},"recordFilter");return A}}switch(l instanceof Date&&(l=l.getTime()),lS[o]||o){case oS.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,f=l.length;d<f;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,gs.compareKeys)(u,l[0])>=0&&(0,gs.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,gs.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,gs.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,gs.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,gs.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,gs.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Kr.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f,E){let h;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&af(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function A(T){let R=T[u],U;if(typeof R!="object"||!R||E?U=d(R):Array.isArray(R)?U=R.some(d):R instanceof Date&&(U=d(R.getTime())),f&&(S++,!U&&!A.idFilter&&++m/S*(i-S)>h)){let B=oc(e,r.transaction.getReadTxn(),!1,t).map(Qn),v=new Set(B);A.idFilter=P=>v.has(Qn(P)),A.idFilter.idSet=v}return U}return a(A,"recordFilter"),s&&(A.idFilter=d),A}a(_,"attributeComparator")}function af(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Zs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=lS[n]||n,n===oS.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=ei(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=af(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Zs(e.indices[i.relationship.from])/(Zs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Zs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=YK*Zs(e.primaryStore)+1:n==="between"?r.estimated_count=VK*Zs(e.primaryStore)+1:n==="sort"?r.estimated_count=Zs(e.primaryStore)+1:r.estimated_count=$K*Zs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function cf(e){if(e)if($i=e,sc.lastIndex=0,jK.test(e))try{let t=Vl(new ic,"");if(pr!==$i.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${pr} in '${$i}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Vl(e,t){let r=sc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec($i);){pr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=SI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Yl(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=KK[d],l=aS[i]?SI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Yl(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&TI(h,u),of(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Yl(u)),s=void 0;break;case"(":sc.lastIndex=pr;let E=Vl(u?[]:new ic,")");switch(u){case"":of(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=gI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}$i[pr]===","?r.lastIndex=++pr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");sc.lastIndex=pr,f=Vl([],"}"),f.name=u,e.push(f),$i[pr]===","?r.lastIndex=++pr:o=!0;break;case"[":sc.lastIndex=pr,u?(f=Vl(new ic,"]"),f.name=u):f=Vl(e.conditions?new ic:[],"]"),e.conditions?(of(e,_),e.conditions.push(f),s=null):e.push(f),$i[pr]===","?r.lastIndex=++pr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&TI(h,u),of(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Yl(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?zK:sc,r.lastIndex=pr),pr===$i.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function of(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Yl(e){return e.indexOf(".")>-1?e.split(".").map(Yl):decodeURIComponent(e)}function SI(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new Kr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function TI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Kr.ClientError("wildcard can only be used at the end of a string")}function gI(e){let t=RI(e[0]);return e.length>1&&(t.next=gI(e.slice(1))),t}function RI(e){if(Array.isArray(e)){let t=RI(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Qn(e){return Array.isArray(e)?e.join("\0"):e}function Zs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function JK(e,t,r){return t*r/Zs(e)}var Kr,oS,gs,ki,$K,VK,YK,KK,aS,lS,jK,sc,zK,pr,$i,ic,lf=Ne(()=>{Kr=q(se()),oS=q(_t()),gs=require("ordered-binary"),ki=require("lmdb"),$K=.3,VK=.1,YK=.05,KK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},aS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(cS,"executeConditions");a(oc,"searchByIndex");a(ei,"findAttribute");a(WK,"joinTo");a(QK,"joinFrom");lS={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(uS,"filterByType");a(af,"estimateCondition");jK=/[()[\]|!<>.]|(=\w*=)/,sc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,zK=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(cf,"parseQuery");a(Vl,"parseBlock");a(of,"assignOperator");a(Yl,"decodeProperty");a(SI,"typedDecoding");a(TI,"wildcardDecoding");a(gI,"toSortObject");a(RI,"toSortEntry");ic=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Qn,"flattenKey");a(Zs,"estimatedEntryCount");a(JK,"intersectionEstimate")});var fS={};$e(fS,{CONTEXT:()=>be,ID_PROPERTY:()=>Pe,IS_COLLECTION:()=>bn,RECORD_PROPERTY:()=>Ee,Resource:()=>Wt,snake_case:()=>ZK,transformForSelect:()=>_f});function ZK(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function AI(e,t){if(Kl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Kl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new dS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Kl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Wr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[be]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[be]||i):u=i:(u=s,c=u[Pe]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[be]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new uf(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new uf(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Qr(e,t){let r=new bI.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function _S(e,t,r){let n=e[Ee];if(n){let s=e[Lt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function _f(e,t){let r=t?.propertyResolvers,n=t[be],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):_S(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(_S(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(_S(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=_f(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var OI,NI,bI,be,Pe,bn,Ee,XK,Wt,uf,Kl,dS,Wn=Ne(()=>{OI=require("crypto");Gl();NI=require("../index"),bI=q(se());nf();$o();lf();be=Symbol.for("context"),Pe=Symbol.for("primary-key"),bn=Symbol("is-collection"),Ee=Symbol("stored-record"),XK={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Wt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Pe]=t;let n=r?.[be];this[be]=n!==void 0?n:r||null}static get=Wr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=_f(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Wr(function(t,r,n,s){if(Array.isArray(s)&&t[bn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Qr(t,"put")},{hasContent:!0,type:"update"});static patch=Wr(function(t,r,n,s){return t.patch?t.patch(s,r):Qr(t,"patch")},{hasContent:!0,type:"update"});static delete=Wr(function(t,r,n,s){return t.delete?t.delete(r):Qr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,OI.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Qr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Wr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Qr(t,"delete")},{hasContent:!1,type:"update"});static post=Wr(function(t,r,n,s){return t[Pe]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Wr(function(t,r,n,s){return t.connect?t.connect(s,r):Qr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Wr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Qr(t,"subscribe")},{type:"read"});static publish=Wr(function(t,r,n,s){return t[Pe]!=null&&t.update?.(),t.publish?t.publish(s,r):Qr(t,"publish")},{hasContent:!0,type:"create"});static search=Wr(function(t,r,n,s){let i=t.search?t.search(r):Qr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=_f(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Wr(function(t,r,n,s){return t.search?t.search(s,r):Qr(t,"search")},{hasContent:!0,type:"read"});static copy=Wr(function(t,r,n,s){return t.copy?t.copy(s,r):Qr(t,"copy")},{type:"create"});static move=Wr(function(t,r,n,s){return t.move?t.move(s,r):Qr(t,"move")},{type:"delete"});post(t){if(this[bn])return this.constructor.create(this[Pe],t,this[be]);Qr(this,"post")}static isCollection(t){return t?.[bn]}static coerceId(t){return t}static parseQuery(t){return cf(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&XK[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:AI(t,this),isCollection:Kl}}let i=AI(t,this);return Kl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[be],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Pe]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Pe],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[bn]=!0),s}subscribe(t){return new Kn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Kn}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[Pe]}getContext(){return this[be]}};Wt.prototype[be]=null;(0,NI._assignPackageExport)("Resource",Wt);a(ZK,"snake_case");uf=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(AI,"pathToId");dS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Wr,"transactional");a(Qr,"missingMethod");a(_S,"selectFromObject");a(_f,"transformForSelect")});var yI={};$e(yI,{Resources:()=>df,keyArrayToString:()=>ac,resetResources:()=>eW,resources:()=>Vi});function eW(){return Vi=new df}function ac(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var df,Vi,Wl=Ne(()=>{$o();df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(eW,"resetResources");a(ac,"keyArrayToString")});function wI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;cc||((0,ff.onMessageByType)(II,u=>{CI(u.path)}),cc=Object.create(null));let o=cc[s]||(cc[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ac(t);let l=new hS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function CI(e,t){if(!cc)return;let r=cc[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=xt(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=ac(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,ES.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,ES.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function LI(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,ff.broadcast)({type:II,path:s}),CI(s,!0)})}}var ES,ff,II,cc,Khe,hS,DI=Ne(()=>{ES=q(G()),ff=q(tt());Gl();Wl();xo();II="transaction",Khe=Buffer.alloc(4096);a(wI,"addSubscription");hS=class extends Kn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(CI,"notifyFromTransactionData");a(LI,"listenToCommits")});var MI=g((jhe,PI)=>{"use strict";var pS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};PI.exports=pS});var vI=g((Jhe,UI)=>{"use strict";var mS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};UI.exports=mS});var Ef=g((Zhe,BI)=>{"use strict";var TS=J(),gS=w(),{RecordEncoder:tW}=(tc(),ie(Zy));TS.initSync();var rW=TS.get(gS.CONFIG_PARAMS.STORAGE_COMPRESSION),nW=TS.get(gS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,sW=gS.UPDATES_PROPERTY,SS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=rW&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=nW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:tW},this.alwaysLazyProperty=n=>n===sW)}};BI.exports=SS});var pf=g((tpe,qI)=>{"use strict";var lc=J(),Ql=w();lc.initSync();var iW=lc.get(Ql.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||lc.get(Ql.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||lc.get(Ql.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",HI=lc.get(Ql.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),oW=lc.get(Ql.CONFIG_PARAMS.STORAGE_NOREADAHEAD),hf=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=iW,this.noFSAccess=!0,HI!==void 0&&(this.overlappingSync=HI),this.noReadAhead=oW}};qI.exports=hf;hf.MAX_DBS=1e4});var Ve=g((npe,QI)=>{"use strict";var AS=require("lmdb"),jn=require("fs-extra"),jr=require("path"),mf=hr(),FI=G(),mr=Vr().LMDB_ERRORS_ENUM,Sf=vI(),OS=Ef(),kI=pf(),Yi=_t(),xI=w(),{table:aW,resetDatabases:cW}=(Re(),ie(Ge)),GI=J(),zn=Yi.INTERNAL_DBIS_NAME,$I=Yi.DBI_DEFINITION_NAME,lW="data.mdb",uW="lock.mdb",jl=".mdb",_W="-lock",RS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=yn(t,r),this.key_type=this.dbi[Yi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Yi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new AS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Tf(e,t){if(e===void 0)throw new Error(mr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(mr.ENV_NAME_REQUIRED)}a(Tf,"pathEnvNameValidation");async function NS(e,t,r=!0){try{await jn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(mr.INVALID_BASE_PATH):n}try{let n=jr.join(e,t+jl);return await jn.access(n,jn.constants.R_OK|jn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await jn.access(jr.join(e,t,lW),jn.constants.R_OK|jn.constants.F_OK),jr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(mr.INVALID_ENVIRONMENT)}else throw new Error(mr.INVALID_ENVIRONMENT);throw n}}a(NS,"validateEnvironmentPath");function gf(e,t){if(mf.validateEnv(e),t===void 0)throw new Error(mr.DBI_NAME_REQUIRED)}a(gf,"validateEnvDBIName");async function dW(e,t,r=!1,n=!1){Tf(e,t);let s=jr.basename(e);t=t.toString();let i=GI.get(xI.CONFIG_PARAMS.DATABASES);i||GI.setProperty(xI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await NS(e,t,n),VI(e,t,r)}catch(o){if(o.message===mr.INVALID_ENVIRONMENT){let c=jr.join(e,t);await jn.mkdirp(n?c:e);let l=new kI(n?c:c+jl,!1),_=AS.open(l);_.dbis=Object.create(null);let u=new OS(!1);_.openDB(zn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=bS(e,t,r);return _[Yi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(dW,"createEnvironment");async function fW(e,t,r,n=!0){Tf(e,t),t=t.toString();let s=jr.join(e,t);return aW({table:t,database:jr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(fW,"copyEnvironment");async function VI(e,t,r=!1){Tf(e,t),t=t.toString();let n=bS(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await NS(e,t),i=jr.join(e,t+jl),o=s!=i,c=new kI(s,o),l=AS.open(c);l.dbis=Object.create(null);let _=KI(l);for(let u=0;u<_.length;u++)yn(l,_[u]);return l[Yi.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(VI,"openEnvironment");async function EW(e,t,r=!1){Tf(e,t),t=t.toString();let n=jr.join(e,t+jl),s=await NS(e,t);if(global.lmdb_map!==void 0){let i=bS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await YI(o),delete global.lmdb_map[i]}}await jn.remove(s),await jn.remove(s===n?s+_W:jr.join(jr.dirname(s),uW))}a(EW,"deleteEnvironment");async function YI(e){mf.validateEnv(e);let t=e[Yi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(YI,"closeEnvironment");function bS(e,t,r=!1){let s=`${jr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(bS,"getCachedEnvironmentName");function hW(e){mf.validateEnv(e);let t=Object.create(null),r=yn(e,zn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==zn)try{t[n]=Object.assign(new Sf,s)}catch{FI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(hW,"listDBIDefinitions");function KI(e){mf.validateEnv(e);let t=[],r=yn(e,zn);for(let{key:n}of r.getRange({start:!1}))n!==zn&&t.push(n);return t}a(KI,"listDBIs");function pW(e,t){let n=yn(e,zn).getEntry(t),s=new Sf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{FI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(pW,"getDBIDefinition");function WI(e,t,r,n=!r){if(gf(e,t),t=t.toString(),t===zn)throw new Error(mr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return yn(e,t)}catch(s){if(s.message===mr.DBI_DOES_NOT_EXIST){let i=new OS(r,n===!0),o=e.openDB(t,i),c=new Sf(r===!0,n);return o[$I]=c,yn(e,zn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(WI,"createDBI");function yn(e,t){if(gf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==zn?r=pW(e,t):r=new Sf,r===void 0)throw new Error(mr.DBI_DOES_NOT_EXIST);let n;try{let s=new OS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(mr.DBI_DOES_NOT_EXIST):s}return n[$I]=r,e.dbis[t]=n,n}a(yn,"openDBI");function mW(e,t){gf(e,t),t=t.toString();let r=yn(e,t),n=r.getStats();return r[Yi.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(mW,"statDBI");async function SW(e,t){try{let r=jr.join(e,t+jl);return(await jn.stat(r)).size}catch{throw new Error(mr.INVALID_ENVIRONMENT)}}a(SW,"environmentDataSize");function TW(e,t){if(gf(e,t),t=t.toString(),t===zn)throw new Error(mr.CANNOT_DROP_INTERNAL_DBIS_NAME);yn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],yn(e,zn).removeSync(t)}a(TW,"dropDBI");function gW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{yn(e,i)}catch(o){if(o.message===mr.DBI_DOES_NOT_EXIST)WI(e,i,i!==t,i===t),n=!0;else throw o}}n&&cW()}a(gW,"initializeDBIs");QI.exports={openDBI:yn,openEnvironment:VI,createEnvironment:dW,listDBIs:KI,listDBIDefinitions:hW,createDBI:WI,dropDBI:TW,statDBI:mW,deleteEnvironment:EW,initializeDBIs:gW,TransactionCursor:RS,environmentDataSize:SW,copyEnvironment:fW,closeEnvironment:YI}});var JI=g((ipe,zI)=>{"use strict";var yS=Ve(),RW=G(),jI=Vr().LMDB_ERRORS_ENUM;zI.exports=AW;async function AW(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 yS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==jI.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await yS.closeEnvironment(global.lmdb_map[n]),await yS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==jI.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){RW.error(t)}}a(AW,"cleanLMDBMap")});var ti=g((ape,OW)=>{OW.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"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var uw=g((lpe,lw)=>{"use strict";var IS=require("recursive-iterator"),NW=require("alasql"),wS=require("clone"),XI=W(),{handleHDBError:ZI,hdb_errors:bW}=se(),{HDB_ERROR_MSGS:ew,HTTP_STATUS_CODES:tw}=bW,{getDatabases:yW}=(Re(),ie(Ge)),IW=["DISTINCT_ARRAY"],rw=Symbol("validateTables"),CS=Symbol("validateTable"),cpe=Symbol("getAllColumns"),nw=Symbol("validateAllColumns"),Rf=Symbol("findColumn"),sw=Symbol("validateOrderBy"),zl=Symbol("validateSegment"),LS=Symbol("validateColumn"),iw=Symbol("setColumnsForTable"),ow=Symbol("checkColumnsForAsterisk"),aw=Symbol("validateGroupBy"),cw=Symbol("hasColumns"),DS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[rw](),this[ow](),this[nw]()}[rw](){if(this[cw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[CS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[CS](t.table)})}}[cw](){let t=!1,r=new IS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[CS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=yW();if(!r[t.databaseid])throw ZI(new Error,ew.SCHEMA_NOT_FOUND(t.databaseid),tw.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw ZI(new Error,ew.TABLE_NOT_FOUND(t.databaseid,t.tableid),tw.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=wS(s);i.table=wS(t),this.attributes.push(i)})}[Rf](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)}[ow](){let t=new IS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[iw](r.tableid)}[iw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new NW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[nw](){this[zl](this.statement.columns,!1),this[zl](this.statement.joins,!1),this[zl](this.statement.where,!1),this[aw](this.statement.group,!1),this[zl](this.statement.order,!0)}[zl](t,r){if(!t)return;let n=new IS(t),s=[];for(let{node:i,path:o}of n)!XI.isEmpty(i)&&!XI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[sw](i):s.push(this[LS](i)));return s}[aw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&IW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=wS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Rf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Rf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[sw](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[LS](t)}[LS](t){let r=this[Rf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};lw.exports=DS});var dw=g((_pe,_w)=>{"use strict";var PS=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")}};_w.exports=PS});var Ew=g((fpe,fw)=>{"use strict";var MS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};fw.exports=MS});var pw=g((hpe,hw)=>{"use strict";var US=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};hw.exports=US});var Sw=g((mpe,mw)=>{"use strict";var vS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};mw.exports=vS});var Yo=g((Ape,Rw)=>{"use strict";var wW=Ve(),CW=Ew(),LW=pw(),DW=Sw(),Rs=hr(),Jl=Vr().LMDB_ERRORS_ENUM,PW=_t(),ri=w(),MW=W(),UW=require("uuid"),Tpe=require("lmdb"),{handleHDBError:vW,hdb_errors:BW}=se(),{OVERFLOW_MARKER:gpe,MAX_SEARCH_KEY_LENGTH:Rpe}=PW,Tw=J();Tw.initSync();var Af=Tw.get(ri.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),BS=ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Vo=ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function HW(e,t,r,n,s=Rs.getNextMonotonicTime()){GS(e,t,r,n),HS(e,t,r);let i=new CW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];gw(_,!0,s);let u=qW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return qS(o,c,n,i,s)}a(HW,"insertRecords");function qW(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ri.FUNC_VAL],n[o]=c)}let l=Rs.getIndexedValues(c),_=e.dbis[o];if(l){Af&&_.prefetch(l.map(u=>({key:u,value:s})),Of);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}Af&&e.dbis[t].prefetch([s],Of),e.dbis[t].put(s,n,n[Vo])})}a(qW,"insertRecord");function xW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(xW,"removeSkippedRecords");function gw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Vo]))&&(e[Vo]=r||(r=Rs.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[BS]))&&(e[BS]=r||Rs.getNextMonotonicTime()):delete e[BS]}a(gw,"setTimestamps");function HS(e,t,r){r.indexOf(ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),wW.initializeDBIs(e,t,r)}a(HS,"initializeTransaction");async function GW(e,t,r,n,s=Rs.getNextMonotonicTime()){GS(e,t,r,n),HS(e,t,r);let i=new LW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=xS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return qS(c,l,n,i,s,o)}a(GW,"updateRecords");async function FW(e,t,r,n,s=Rs.getNextMonotonicTime()){try{GS(e,t,r,n)}catch(l){throw vW(l,l.message,BW.HTTP_STATUS_CODES.BAD_REQUEST)}HS(e,t,r);let i=new DW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;MW.isEmpty(_[t])?(u=UW.v4(),_[t]=u):u=_[t];let d=xS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return qS(o,c,n,i,s)}a(FW,"upsertRecords");async function qS(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Rs.getNextMonotonicTime(),xW(r,i),n}a(qS,"finalizeWrite");function xS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(gw(r,!u,o),Number.isInteger(r[Vo])&&_[Vo]>r[Vo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof m=="function"){let R=m([[_]]);Array.isArray(R)&&(m=R[0][ri.FUNC_VAL],r[h]=m)}if(m===A)continue;let T=Rs.getIndexedValues(A);if(T){Af&&S.prefetch(T.map(R=>({key:R,value:n})),Of);for(let R=0,U=T.length;R<U;R++)S.remove(T[R],n)}if(T=Rs.getIndexedValues(m),T){Af&&S.prefetch(T.map(R=>({key:R,value:n})),Of);for(let R=0,U=T.length;R<U;R++)S.put(T[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Vo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:xS(e,t,r,n,s,i,o))}a(xS,"updateUpsertRecord");function kW(e,t,r){if(Rs.validateEnv(e),t===void 0)throw new Error(Jl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jl.WRITE_ATTRIBUTES_REQUIRED):new Error(Jl.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(kW,"validateBasic");function GS(e,t,r,n){if(kW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Jl.RECORDS_REQUIRED):new Error(Jl.RECORDS_MUST_BE_ARRAY)}a(GS,"validateWrite");function Of(){}a(Of,"noop");Rw.exports={insertRecords:HW,updateRecords:GW,upsertRecords:FW}});var Os=g((Npe,Nw)=>{"use strict";var Ow=W(),Aw=w(),uc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,As=require("joi"),Ki={schema_format:{pattern:uc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},$W=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number(),As.array()).required(),VW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number()),YW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number()).required();function KW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ki.schema_length.maximum?`'${e}' maximum of 250 characters`:uc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(KW,"checkValidTable");function WW(e,t){return Ow.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(WW,"validateSchemaExists");function QW(e,t){let r=t.state.ancestors[0].schema;return Ow.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(QW,"validateTableExists");function jW(e,t){return e.toLowerCase()===Aw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Aw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(jW,"validateSchemaName");Nw.exports={common_validators:Ki,schema_regex:uc,hdb_schema_table:$W,validateSchemaExists:WW,validateTableExists:QW,validateSchemaName:jW,checkValidTable:KW,hdb_database:VW,hdb_table:YW}});var rt=g((ype,bw)=>{"use strict";var Sr=require("validate.js");Sr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Sr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Sr.validators.type.checks={Object:function(e){return Sr.isObject(e)&&!Sr.isArray(e)},Array:Sr.isArray,Integer:Sr.isInteger,Number:Sr.isNumber,String:Sr.isString,Date:Sr.isDate,Boolean:function(e){return typeof e=="boolean"}};Sr.validators.hasValidFileExt=function(e,t){return Sr.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};bw.exports={validateObject:zW,validateObjectAsync:JW,validateBySchema:XW};function zW(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Sr(e,t,{format:"flat"});return r?new Error(r):null}a(zW,"validateObject");async function JW(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Sr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(JW,"validateObjectAsync");function XW(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(XW,"validateBySchema")});var Nf=g((wpe,yw)=>{var{common_validators:Ns}=Os(),Zl=rt(),Xl="is required",gt={database:{presence:!1,format:Ns.schema_format,length:Ns.schema_length},schema:{presence:!1,format:Ns.schema_format,length:Ns.schema_length},table:{presence:!0,format:Ns.schema_format,length:Ns.schema_length},attribute:{presence:!0,format:Ns.schema_format,length:Ns.schema_length},hash_attribute:{presence:!0,format:Ns.schema_format,length:Ns.schema_length}};function eu(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(eu,"makeAttributesStrings");function ZW(e){return e=eu(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(ZW,"schema_object");function eQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(eQ,"table_object");function tQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence=!1,Zl.validateObject(e,gt)}a(tQ,"create_table_object");function rQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence={message:Xl},gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(rQ,"attribute_object");function nQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(nQ,"describe_table");function sQ(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(sQ,"validateTableResidence");yw.exports={schema_object:ZW,create_table_object:tQ,table_object:eQ,attribute_object:rQ,describe_table:nQ,validateTableResidence:sQ}});var ww=g((Lpe,Iw)=>{"use strict";var iQ=require("uuid"),FS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||iQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};Iw.exports=FS});var bf=g((Ppe,Cw)=>{"use strict";var oQ=ww(),kS=class extends oQ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};Cw.exports=kS});var Dw=g((Upe,Lw)=>{"use strict";Lw.exports=cQ;var aQ="inserted";function cQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===aQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(cQ,"returnObject")});var yf=g((Bpe,Bw)=>{"use strict";var lQ=w(),$S=Ve(),uQ=Yo(),{getSystemSchemaPath:_Q,getSchemaPath:dQ}=ze(),fQ=ti(),EQ=Nf(),hQ=bf(),pQ=Dw(),{handleHDBError:Pw,hdb_errors:Uw}=se(),Mw=W(),{HTTP_STATUS_CODES:mQ}=Uw,VS=fQ.hdb_attribute,vw=[];for(let e=0;e<VS.attributes.length;e++)vw.push(VS.attributes[e].attribute);var SQ="inserted";Bw.exports=TQ;async function TQ(e){let t=EQ.attribute_object(e);if(t)throw Pw(new Error,t.message,Uw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Mw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Pw(new Error,r,mQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Mw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new hQ(e.schema,e.table,e.attribute,e.id);try{let i=await $S.openEnvironment(dQ(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}`);$S.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await $S.openEnvironment(_Q(),lQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await uQ.insertRecords(o,VS.hash_attribute,vw,[s]);return pQ(SQ,c,{records:[s]},l)}catch(i){throw i}}a(TQ,"lmdbCreateAttribute")});var KS=g((qpe,qw)=>{var{hdb_table:gQ,hdb_database:Hw}=Os(),RQ=rt(),YS=require("joi"),AQ={undefined:"undefined",null:"null"},OQ=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||AQ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),NQ=YS.object({database:Hw,schema:Hw,table:gQ,records:YS.array().items(YS.object().custom(OQ)).required()});qw.exports=function(e){return RQ.validateBySchema(e,NQ)}});var tu=g((Fpe,Gw)=>{"use strict";var ni=W(),xw=G(),Gpe=KS(),{getDatabases:bQ}=(Re(),ie(Ge)),{ClientError:Ko}=se();Gw.exports=yQ;function yQ(e){if(ni.isEmpty(e))throw new Ko("invalid update parameters defined.");if(ni.isEmptyOrZeroLength(e.schema))throw new Ko("invalid schema specified.");if(ni.isEmptyOrZeroLength(e.table))throw new Ko("invalid table specified.");if(!Array.isArray(e.records))throw new Ko("records must be an array");let t=bQ()[e.schema]?.[e.table];if(ni.isEmpty(t))throw new Ko(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&ni.isEmptyOrZeroLength(o[r]))throw xw.error("a valid hash attribute must be provided with update record:",o),new Ko("a valid hash attribute must be provided with update record, check log for more info");if(!ni.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw xw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Ko(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ni.isEmpty(o[r])&&o[r]!==""&&n.has(ni.autoCast(o[r]))&&(o.skip=!0),n.add(ni.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(yQ,"insertUpdateValidate")});var ru=g(($pe,Fw)=>{"use strict";var IQ=w().OPERATIONS_ENUM,WS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=IQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Fw.exports=WS});var ou=g((Kpe,kw)=>{"use strict";var Ype=ru(),If=w(),jS=W(),QS=G(),wQ=require("uuid"),{handleHDBError:nu,hdb_errors:CQ}=se(),{HDB_ERROR_MSGS:su,HTTP_STATUS_CODES:iu}=CQ;kw.exports=LQ;function LQ(e,t,r){for(let s=0;s<t.length;s++)DQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];PQ(i,r,e.operation)}}a(LQ,"processRows");function DQ(e){if(Buffer.byteLength(String(e))>If.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw nu(new Error,su.ATTR_NAME_LENGTH_ERR(e),iu.BAD_REQUEST,void 0,void 0,!0);if(jS.isEmptyOrZeroLength(e)||jS.isEmpty(e.trim()))throw nu(new Error,su.ATTR_NAME_NULLISH_ERR,iu.BAD_REQUEST,void 0,void 0,!0)}a(DQ,"validateAttribute");function PQ(e,t,r){if(!e.hasOwnProperty(t)||jS.isEmptyOrZeroLength(e[t])){if(r===If.OPERATIONS_ENUM.INSERT||r===If.OPERATIONS_ENUM.UPSERT){e[t]=wQ.v4();return}throw QS.error("Update transaction aborted due to record with no hash value:",e),nu(new Error,su.RECORD_MISSING_HASH_ERR,iu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>If.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw QS.error(e),nu(new Error,su.HASH_VAL_LENGTH_ERR,iu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw QS.error(e),nu(new Error,su.INVALID_FORWARD_SLASH_IN_HASH_ERR,iu.BAD_REQUEST,void 0,void 0,!0)}a(PQ,"validateHash")});var wf=g((Qpe,Vw)=>{"use strict";var $w=W(),MQ=w(),UQ=G(),vQ=yf(),BQ=bf(),HQ=si(),{SchemaEventMsg:qQ}=Jn(),xQ="already exists in";Vw.exports=GQ;async function GQ(e,t,r){if($w.isEmptyOrZeroLength(r))return r;let n=[];$w.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await FQ(e,t.schema,t.name,i)})),s}a(GQ,"lmdbCheckForNewAttributes");async function FQ(e,t,r,n){let s=new BQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await kQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(xQ))UQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(FQ,"createNewAttribute");async function kQ(e){let t;return t=await vQ(e),HQ.signalSchemaChange(new qQ(process.pid,MQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(kQ,"createAttribute")});var _c=g((zpe,Yw)=>{"use strict";var zS=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Yw.exports=zS});var Ww=g((Xpe,Kw)=>{"use strict";var $Q=_c(),VQ=w().OPERATIONS_ENUM,JS=class extends $Q{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(VQ.INSERT,r,n,s,i),this.records=t}};Kw.exports=JS});var jw=g((eme,Qw)=>{"use strict";var YQ=_c(),KQ=w().OPERATIONS_ENUM,XS=class extends YQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(KQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Qw.exports=XS});var Jw=g((rme,zw)=>{"use strict";var WQ=_c(),QQ=w().OPERATIONS_ENUM,ZS=class extends WQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(QQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};zw.exports=ZS});var Zw=g((sme,Xw)=>{"use strict";var jQ=_c(),zQ=w().OPERATIONS_ENUM,eT=class extends jQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(zQ.DELETE,n,s,t,i),this.original_records=r}};Xw.exports=eT});var au=g((ame,nC)=>{"use strict";var ome=require("path"),eC=Ve(),JQ=Ww(),XQ=jw(),ZQ=Jw(),ej=Zw(),dc=_t(),tC=W(),{CONFIG_PARAMS:tj}=w(),rC=J();rC.initSync();var Cf=w().OPERATIONS_ENUM,{getTransactionAuditStorePath:rj}=ze();nC.exports=nj;async function nj(e,t){if(rC.get(tj.LOGGING_AUDITLOG)===!1)return;let r=rj(e.schema,e.table),n=await eC.openEnvironment(r,e.table,!0),s=sj(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){eC.initializeDBIs(n,dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),tC.isEmpty(s.user_name)||n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(nj,"writeTransaction");function sj(e,t){let r=tC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Cf.INSERT)return new JQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.UPDATE)return new XQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.UPSERT)return new ZQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.DELETE)return new ej(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(sj,"createTransactionObject")});var tT=g((ume,sC)=>{"use strict";var ij=tu(),lme=ru(),cu=w(),oj=ou(),aj=Yo().insertRecords,cj=Ve(),lj=G(),uj=wf(),{getSchemaPath:_j}=ze(),dj=au();sC.exports=fj;async function fj(e){try{let{schema_table:t,attributes:r}=ij(e);oj(e,r,t.hash_attribute),e.schema!==cu.SYSTEM_SCHEMA_NAME&&(r.includes(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await uj(e.hdb_auth_header,t,r),s=_j(e.schema,e.table),i=await cj.openEnvironment(s,e.table),o=await aj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await dj(e,o)}catch(c){lj.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(fj,"lmdbCreateRecords")});var aC=g((dme,oC)=>{"use strict";var iC=w(),Ej=tT(),hj=ru(),pj=require("fs-extra"),{getSchemaPath:mj}=ze();oC.exports=Sj;async function Sj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new hj(iC.SYSTEM_SCHEMA_NAME,iC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Ej(r),await pj.mkdirp(mj(e.schema))}a(Sj,"lmdbCreateSchema")});var lC=g((Eme,cC)=>{"use strict";var rT=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};cC.exports=rT});var fC=g((Tme,dC)=>{"use strict";var uC=Ve(),nT=hr(),sT=Vr().LMDB_ERRORS_ENUM,Tj=_t(),_C=G(),pme=W(),gj=require("lmdb"),Rj=lC(),Aj=w(),{OVERFLOW_MARKER:mme,MAX_SEARCH_KEY_LENGTH:Sme}=Tj,Oj=Aj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Nj(e,t,r,n){if(nT.validateEnv(e),t===void 0)throw new Error(sT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sT.IDS_REQUIRED):new Error(sT.IDS_MUST_BE_ITERABLE);try{let s=uC.listDBIs(e);uC.initializeDBIs(e,t,s);let i=new Rj,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[Oj]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,gj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let T=e.dbis[A],R=h[A];if(R!=null)try{let U=nT.getIndexedValues(R);if(U)for(let B=0,v=U.length;B<v;B++)T.remove(U[B],o)}catch{_C.warn(`cannot delete from attribute: ${A}, ${R}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){_C.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[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=nT.getNextMonotonicTime(),i}catch(s){throw s}}a(Nj,"deleteRecords");dC.exports={deleteRecords:Nj}});var lu=g((Rme,hC)=>{"use strict";var fc=W(),bj=fC(),yj=Ve(),{getSchemaPath:Ij}=ze(),wj=au(),Cj=G();hC.exports=Lj;async function Lj(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fc.isEmptyOrZeroLength(e.hash_values)&&!fc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fc.isEmpty(l)||e.hash_values.push(l)}}if(fc.isEmptyOrZeroLength(e.hash_values))return EC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fc.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=Ij(e.schema,e.table),i=await yj.openEnvironment(s,e.table),o=await bj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await wj(e,o)}catch(c){Cj.error(`unable to write transaction due to ${c.message}`)}return EC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Lj,"lmdbDeleteRecords");function EC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(EC,"createDeleteResponse")});var oT=g((Nme,pC)=>{"use strict";var Dj=w(),Ome=hr();function iT(e,t){let r=Object.create(null);if(t.length===1&&Dj.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(iT,"parseRow");function Pj(e,t,r,n){let s=iT(r,e);n.push(s)}a(Pj,"searchAll");function Mj(e,t,r,n){let s=iT(r,e);n[t]=s}a(Mj,"searchAllToMap");function Uj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Uj,"iterateDBI");function Wo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Wo,"pushResults");function vj(e,t,r,n,s,i){t.toString().endsWith(e)&&Wo(t,r,n,s,i)}a(vj,"endsWith");function Bj(e,t,r,n,s,i){t.toString().includes(e)&&Wo(t,r,n,s,i)}a(Bj,"contains");function Hj(e,t,r,n,s,i){t>e&&Wo(t,r,n,s,i)}a(Hj,"greaterThanCompare");function qj(e,t,r,n,s,i){t>=e&&Wo(t,r,n,s,i)}a(qj,"greaterThanEqualCompare");function xj(e,t,r,n,s,i){t<e&&Wo(t,r,n,s,i)}a(xj,"lessThanCompare");function Gj(e,t,r,n,s,i){t<=e&&Wo(t,r,n,s,i)}a(Gj,"lessThanEqualCompare");pC.exports={parseRow:iT,searchAll:Pj,searchAllToMap:Mj,iterateDBI:Uj,endsWith:vj,contains:Bj,greaterThanCompare:Hj,greaterThanEqualCompare:qj,lessThanCompare:xj,lessThanEqualCompare:Gj,pushResults:Wo}});var Ec=g((Cme,OC)=>{"use strict";var Wi=Ve(),yme=G(),zr=hr(),Lf=_t(),dt=Vr().LMDB_ERRORS_ENUM,Ime=W(),Fj=w(),Df=oT(),{parseRow:kj}=Df,wme=require("lmdb"),{OVERFLOW_MARKER:mC,MAX_SEARCH_KEY_LENGTH:$j}=Lf;function SC(e,t,r,n=!1,s=void 0,i=void 0){return Qo(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(SC,"iterateFullIndex");function uu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Qo(e,t,r,(u,d,f,E)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(T.values=!1,d.getRange(T).map(R=>({value:R}))):d.getRange(T)})}a(uu,"iterateRangeBetween");function Qo(e,t,r,n){let s=e.database||e,i=Wi.openDBI(s,r);i[Lf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wi.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Qo,"setupTransaction");function TC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(mC)){if(!s)if(r)s=Wi.openDBI(e,r);else{let l=Wi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Wi.openDBI(e,l[_]),!s[Lf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(TC,"getOverflowCheck");function Vj(e,t,r,n=!1,s=void 0,i=void 0){if(zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Qo(e,t,t,(o,c,l)=>(Pf(r),r=_u(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>kj(_.value,r))))}a(Vj,"searchAll");function Yj(e,t,r,n=!1,s=void 0,i=void 0){if(zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);Pf(r),r=_u(e.database||e,r);let o=new Map;for(let{key:c,value:l}of SC(e,t,t,n,s,i))o.set(c,Df.parseRow(l,r));return o}a(Yj,"searchAllToMap");function Kj(e,t,r=!1,n=void 0,s=void 0){if(zr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=SC(e,void 0,t,r,n,s),c=o.transaction,l=TC(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(Kj,"iterateDBI");function Wj(e,t){if(zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Wi.statDBI(e,t).entryCount}a(Wj,"countAll");function Qj(e,t,r,n,s=!1,i=void 0,o=void 0){return Qi(e,r,n),Qo(e,t,r,(c,l,_,u)=>(n=zr.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(Qj,"equals");function jj(e,t,r){return Qi(e,t,r),Wi.openDBI(e,t).getValuesCount(r)}a(jj,"count");function zj(e,t,r,n,s=!1,i=void 0,o=void 0){return Qi(e,r,n),Qo(e,null,r,(c,l)=>{n=zr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(zj,"startsWith");function Jj(e,t,r,n,s=!1,i=void 0,o=void 0){return gC(e,t,r,n,s,i,o,!0)}a(Jj,"endsWith");function gC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Qi(e,r,n),Qo(e,null,r,(l,_,u,d)=>{let f=TC(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(mC)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Lf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(gC,"contains");function Xj(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!0,!1)}a(Xj,"greaterThan");function Zj(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!1,!1)}a(Zj,"greaterThanEqual");function ez(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!0)}a(ez,"lessThan");function tz(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!1)}a(tz,"lessThanEqual");function rz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(zr.validateEnv(e),r===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(dt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(dt.END_VALUE_REQUIRED);if(n=zr.convertKeyValueToWrite(n),s=zr.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uu(e,t,r,n,s,i,o,c)}a(rz,"between");function nz(e,t,r,n){zr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(Pf(r),r=_u(s,r),n===void 0)throw new Error(dt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Df.parseRow(c,r)),o}a(nz,"searchByHash");function sz(e,t,r){zr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(sz,"checkHashExists");function iz(e,t,r,n,s=[]){return AC(e,t,r,n,s),RC(e,t,r,n,s).map(i=>i[1])}a(iz,"batchSearchByHash");function oz(e,t,r,n,s=[]){AC(e,t,r,n,s);let i=new Map;for(let[o,c]of RC(e,t,r,n,s))i.set(o,c);return i}a(oz,"batchSearchByHashToMap");function RC(e,t,r,n,s=[]){return Qo(e,t,t,(i,o,c)=>{r=_u(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Df.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(RC,"batchHashSearch");function AC(e,t,r,n,s){if(zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(Pf(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(AC,"initializeBatchSearchByHash");function Pf(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Pf,"validateFetchAttributes");function Qi(e,t,r){if(zr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.SEARCH_VALUE_REQUIRED);if(r?.length>$j)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(Qi,"validateComparisonFunctions");function _u(e,t){return t.length===1&&Fj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wi.listDBIs(e)),t}a(_u,"setGetWholeRowAttributes");OC.exports={searchAll:Vj,searchAllToMap:Yj,count:jj,countAll:Wj,equals:Qj,startsWith:zj,endsWith:Jj,contains:gC,searchByHash:nz,setGetWholeRowAttributes:_u,batchSearchByHash:iz,batchSearchByHashToMap:oz,checkHashExists:sz,iterateDBI:Kj,greaterThan:Xj,greaterThanEqual:Zj,lessThan:ez,lessThanEqual:tz,between:rz}});var hc=g((Dme,wC)=>{var NC=require("lodash"),bC=rt(),he=require("joi"),az=W(),{hdb_schema_table:du,checkValidTable:yC,hdb_table:IC,hdb_database:Mf}=Os(),{handleHDBError:cz,hdb_errors:lz}=se(),{getDatabases:uz}=(Re(),ie(Ge)),{HTTP_STATUS_CODES:_z}=lz,dz=he.object({database:Mf,schema:Mf,table:IC,search_attribute:du,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),fz=he.object({database:Mf,schema:Mf,table:IC,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),sort:he.object({attribute:he.alternatives(du,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(du,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});wC.exports=function(e,t){let r=null;switch(t){case"value":r=bC.validateBySchema(e,dz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(yC("database",e.schema)),i(yC("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=bC.validateBySchema(e,fz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=az.checkGlobalSchemaTable(e.schema,e.table);if(s)return cz(new Error,s,_z.NOT_FOUND);let o=uz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=NC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!NC.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var aT=g((Mme,CC)=>{"use strict";var Ez=Ve(),hz=hc(),{getSchemaPath:pz}=ze();CC.exports=mz;function mz(e){let t=hz(e,"hashes");if(t)throw t;let r=pz(e.schema,e.table);return Ez.openEnvironment(r,e.table)}a(mz,"initialize")});var cT=g((vme,LC)=>{"use strict";var Sz=Ec(),Tz=aT();LC.exports=gz;async function gz(e){let t=await Tz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Sz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(gz,"lmdbGetDataByHash")});var pc=g((Hme,DC)=>{"use strict";var lT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};DC.exports=lT});var MC=g((Gme,PC)=>{"use strict";var xme=pc(),Rz=Ec(),Az=aT();PC.exports=Oz;async function Oz(e){let t=await Az(e),r=global.hdb_schema[e.schema][e.table];return Rz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Oz,"lmdbSearchByHash")});var Xn=g((kme,UC)=>{"use strict";var uT=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};UC.exports=uT});var Uf=g((Vme,GC)=>{"use strict";var tr=Ec(),Nz=Ve(),bz=W(),pe=_t(),jo=w(),yz=ti(),vC=Vr().LMDB_ERRORS_ENUM,{getSchemaPath:Iz}=ze(),ii=jo.SEARCH_WILDCARDS;async function wz(e,t,r){let n;e.schema===jo.SYSTEM_SCHEMA_NAME?n=yz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=xC(e,n.hash_attribute,r,t);return HC(e,s,n.hash_attribute,r)}a(wz,"prepSearch");async function HC(e,t,r,n){let s=Iz(e.schema,e.table),i=await Nz.openEnvironment(s,e.table),o=qC(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Cz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?BC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?BC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?tr.batchSearchByHashToMap(c,r,e.get_attributes,_):tr.batchSearchByHash(c,r,e.get_attributes,_)}a(HC,"executeSearch");function qC(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=tr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=tr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=tr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=tr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return tr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return tr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return tr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return tr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=tr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=tr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=tr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=tr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=tr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(qC,"searchByType");function BC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(BC,"createMapFromIterable");function Cz(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Cz,"checkToFetchMore");function xC(e,t,r,n){if(bz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ii.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ii[0])<0&&s.indexOf(ii[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(ii.indexOf(i)>=0&&ii.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(ii.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(ii.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(ii[0])||s.includes(ii[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(vC.UNKNOWN_SEARCH_TYPE)}else switch(n){case jo.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case jo.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case jo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case jo.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case jo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(vC.UNKNOWN_SEARCH_TYPE)}}a(xC,"createSearchTypeFromSearchObject");GC.exports={executeSearch:HC,createSearchTypeFromSearchObject:xC,prepSearch:wz,searchByType:qC}});var kC=g((Wme,FC)=>{"use strict";var Kme=Xn(),Lz=hc(),Dz=W(),Pz=w(),Mz=Uf();FC.exports=Uz;function Uz(e,t){if(!Dz.isEmpty(t)&&Pz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Lz(e,"value");if(n)throw n;return Mz.prepSearch(e,t,!0)}a(Uz,"lmdbGetDataByValue")});var fu=g((zme,$C)=>{"use strict";var jme=Xn(),vz=hc(),Bz=W(),Hz=w(),qz=Uf();$C.exports=xz;async function xz(e,t){if(!Bz.isEmpty(t)&&Hz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=vz(e,"value");if(n)throw n;return qz.prepSearch(e,t,!1)}a(xz,"lmdbSearchByValue")});var YC=g((Zme,VC)=>{"use strict";var Xme=_t(),_T=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},dT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},fT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};VC.exports={SearchByConditionsObject:_T,SearchCondition:dT,SortAttribute:fT}});var zC=g((nSe,jC)=>{"use strict";var tSe=YC().SearchByConditionsObject,Gz=Xn(),Fz=hc(),ET=Ec(),vf=_t(),{Resource:rSe}=(Wn(),ie(fS)),QC=Uf(),kz=oT(),$z=require("lodash"),{getSchemaPath:Vz}=ze(),KC=Ve(),{handleHDBError:Yz,hdb_errors:Kz}=se(),{HTTP_STATUS_CODES:Wz}=Kz,Qz=1e8;jC.exports=jz;async function jz(e){let t=Fz(e,"conditions");if(t)throw Yz(t,t.message,Wz.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=Vz(e.schema,e.table),n=await KC.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)KC.openDBI(n,_.search_attribute);let i=$z.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===vf.SEARCH_TYPES.EQUALS?_.estimated_count=ET.count(n,_.search_attribute,_.search_value):u===vf.SEARCH_TYPES.CONTAINS||u===vf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Qz}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await WC(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(QC.filterByType),d=u.length,f=ET.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>kz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await WC(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=ET.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(jz,"lmdbSearchByConditions");async function WC(e,t,r,n){let s=new Gz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===vf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,QC.searchByType(e,s,i,n).map(o=>o.value)}a(WC,"executeConditionSearch")});var Eu=g((iSe,JC)=>{"use strict";var zz=w().OPERATIONS_ENUM,hT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=zz.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};JC.exports=hT});var pT=g((aSe,iL)=>{"use strict";var tL=Xn(),rL=Eu(),nL=fu(),sL=lu(),Tr=w(),XC=W(),ZC=Ve(),{getTransactionAuditStorePath:Jz,getSchemaPath:Xz}=ze(),eL=G();iL.exports=Zz;async function Zz(e){try{if(XC.isEmpty(global.hdb_schema[e.schema])||XC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await eJ(e),await tJ(e);let t=Xz(e.schema,e.table);try{await ZC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")eL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Jz(e.schema,e.table);await ZC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")eL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Zz,"lmdbDropTable");async function eJ(e){let t=new tL(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await nL(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new rL(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await sL(s)}a(eJ,"deleteAttributesFromSystem");async function tJ(e){let t=new tL(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await nL(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new rL(Tr.SYSTEM_SCHEMA_NAME,Tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await sL(s)}catch(i){throw i}}a(tJ,"dropTableFromSystem")});var aL=g((lSe,oL)=>{"use strict";var rJ=require("fs-extra"),nJ=Xn(),sJ=pc(),iJ=Eu(),oJ=pT(),aJ=lu(),cJ=cT(),lJ=fu(),oi=w(),{getSchemaPath:uJ}=ze(),{handleHDBError:_J,hdb_errors:dJ}=se(),{HDB_ERROR_MSGS:fJ,HTTP_STATUS_CODES:EJ}=dJ;oL.exports=hJ;async function hJ(e){let t;try{t=await pJ(e.schema);let r=new nJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await lJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await oJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new iJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await aJ(s);let i=uJ(t);await rJ.remove(i)}catch(r){throw r}}a(hJ,"lmdbDropSchema");async function pJ(e){let t=new sJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await cJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw _J(new Error,fJ.SCHEMA_NOT_FOUND(e),EJ.NOT_FOUND,void 0,void 0,!0);return n}a(pJ,"validateDropSchema")});var hu=g((_Se,cL)=>{"use strict";var mT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};cL.exports=mT});var TT=g((ESe,lL)=>{"use strict";var mJ=require("fs-extra"),Bf=Ve(),{getTransactionAuditStorePath:SJ}=ze(),ST=_t(),fSe=hu();lL.exports=TJ;async function TJ(e){let t;try{let r=SJ(e.schema,e.table);await mJ.mkdirp(r),t=await Bf.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{Bf.createDBI(t,ST.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Bf.createDBI(t,ST.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Bf.createDBI(t,ST.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(TJ,"createTransactionsAuditEnvironment")});var fL=g((pSe,dL)=>{"use strict";var gT=w(),uL=Ve(),gJ=Yo(),{getSystemSchemaPath:RJ,getSchemaPath:AJ}=ze(),OJ=ti(),NJ=yf(),RT=bf(),bJ=G(),yJ=TT(),OT=OJ.hdb_table,_L=[];for(let e=0;e<OT.attributes.length;e++)_L.push(OT.attributes[e].attribute);dL.exports=IJ;async function IJ(e,t){let r=AJ(t.schema,t.table),n=new RT(t.schema,t.table,gT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new RT(t.schema,t.table,gT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new RT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await uL.createEnvironment(r,t.table),e!==void 0){let o=await uL.openEnvironment(RJ(),gT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await gJ.insertRecords(o,OT.hash_attribute,_L,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await AT(n),await AT(s),await AT(i)}await yJ(t)}catch(o){throw o}}a(IJ,"lmdbCreateTable");async function AT(e){try{await NJ(e)}catch(t){bJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(AT,"createAttribute")});var hL=g((SSe,EL)=>{"use strict";var wJ=tu(),CJ=ou(),LJ=wf(),pu=w(),DJ=Yo().updateRecords,PJ=Ve(),{getSchemaPath:MJ}=ze(),UJ=au(),vJ=G();EL.exports=BJ;async function BJ(e){try{let{schema_table:t,attributes:r}=wJ(e);CJ(e,r,t.hash_attribute),e.schema!==pu.SYSTEM_SCHEMA_NAME&&(r.includes(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await LJ(e.hdb_auth_header,t,r),s=MJ(e.schema,e.table),i=await PJ.openEnvironment(s,e.table),o=await DJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await UJ(e,o)}catch(c){vJ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(BJ,"lmdbUpdateRecords")});var mL=g((gSe,pL)=>{"use strict";var HJ=w().OPERATIONS_ENUM,NT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=HJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};pL.exports=NT});var TL=g((OSe,SL)=>{"use strict";var ASe=mL(),qJ=tu(),xJ=ou(),GJ=wf(),mu=w(),FJ=Yo().upsertRecords,kJ=Ve(),{getSchemaPath:$J}=ze(),VJ=au(),YJ=G(),{handleHDBError:KJ,hdb_errors:WJ}=se();SL.exports=QJ;async function QJ(e){let t;try{t=qJ(e)}catch(l){throw KJ(l,l.message,WJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;xJ(e,n,r.hash_attribute),e.schema!==mu.SYSTEM_SCHEMA_NAME&&(n.includes(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await GJ(e.hdb_auth_header,r,n),i=$J(e.schema,e.table),o=await kJ.openEnvironment(i,e.table),c=await FJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await VJ(e,c)}catch(l){YJ.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(QJ,"lmdbUpsertRecords")});var RL=g((bSe,gL)=>{"use strict";var bT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};gL.exports=bT});var OL=g((ISe,AL)=>{"use strict";var yT=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};AL.exports=yT});var yL=g((LSe,bL)=>{"use strict";var IT=Ve(),{getTransactionAuditStorePath:jJ}=ze(),CSe=RL(),Su=_t(),zJ=W(),NL=OL(),JJ=require("util").promisify,XJ=JJ(setTimeout),ZJ=1e4,e2=100;bL.exports=t2;async function t2(e){let t=jJ(e.schema,e.table),r=await IT.openEnvironment(t,e.table,!0),n=IT.listDBIs(r);IT.initializeDBIs(r,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new NL;do s=await r2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await XJ(e2);while(s.transactions_deleted>0);return i}a(t2,"deleteAuditLogsBefore");async function r2(e,t){let r=new NL;try{let n=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];zJ.isEmpty(c)||(s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ZJ)break}return await s,r}catch(n){throw n}}a(r2,"deleteTransactions")});var wL=g((PSe,IL)=>{"use strict";var wT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};IL.exports=wT});var LL=g((vSe,CL)=>{"use strict";var n2=Xn(),s2=Eu(),USe=wL(),bs=w(),i2=W(),CT=Ve(),o2=ti(),a2=fu(),c2=lu(),{getSchemaPath:l2}=ze();CL.exports=u2;async function u2(e,t=!0){let r;e.schema===bs.SYSTEM_SCHEMA_NAME?r=o2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await d2(e),s=l2(e.schema,e.table),i=await CT.openEnvironment(s,e.table);return t===!0&&await _2(e,i,r.hash_attribute),CT.dropDBI(i,e.attribute),n}a(u2,"lmdbDropAttribute");async function _2(e,t,r){let n=CT.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(_2,"removeAttributeFromAllObjects");async function d2(e){let t=new n2(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]),n=Array.from(await a2(t)).filter(o=>o[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(i2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new s2(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return c2(i)}a(d2,"dropAttributeFromSystem")});var BL=g((qSe,vL)=>{"use strict";var LT=Ve(),mc=_t(),HSe=hr(),DT=w(),DL=W(),{getTransactionAuditStorePath:f2}=ze(),E2=Ec(),Hf=_c(),h2=G();vL.exports=p2;async function p2(e){let t=f2(e.schema,e.table),r=await LT.openEnvironment(t,e.table,!0),n=LT.listDBIs(r);LT.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case DT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return PL(r,e.search_values);case DT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,S2(r,e.search_values,s);case DT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return m2(r,e.search_values);default:return PL(r)}}a(p2,"readAuditLog");function PL(e,t=[0,Date.now()]){DL.isEmpty(t[0])&&(t[0]=0),DL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Hf,s))}a(PL,"searchTransactionsByTimestamp");function m2(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,UL(e,i))}return Object.fromEntries(r)}a(m2,"searchTransactionsByUsername");function S2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=E2.equals(e,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,mc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=UL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);ML(l,"records",r,u,o),ML(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(S2,"searchTransactionsByHashValues");function ML(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Hf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Hf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(ML,"loopRecords");function UL(e,t){let r=[];try{let n=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Hf,i);r.push(o)}}catch(i){h2.warn(i)}return r}catch(n){throw n}}a(UL,"batchSearchTransactions")});var qL=g((kSe,HL)=>{"use strict";var{getSchemaPath:GSe}=ze(),FSe=Ve(),{database:T2}=(Re(),ie(Ge));HL.exports={writeTransaction:g2};async function g2(e,t,r){return T2({database:e,table:t}).transaction(r)}a(g2,"writeTransaction")});var kL=g((VSe,FL)=>{"use strict";var{getSchemaPath:xL}=ze(),GL=Ve();FL.exports={flush:R2,resetReadTxn:A2};async function R2(e,t){return(await GL.openEnvironment(xL(e,t),t.toString())).flushed}a(R2,"flush");async function A2(e,t){try{(await GL.openEnvironment(xL(e,t),t.toString())).resetReadTxn()}catch{}}a(A2,"resetReadTxn")});var KL=g((KSe,YL)=>{"use strict";var{Readable:O2}=require("stream"),{getDatabases:N2}=(Re(),ie(Ge)),{readSync:b2,openSync:y2,createReadStream:$L}=require("fs"),{open:I2}=require("lmdb"),VL=Ef(),w2=pf(),{AUDIT_STORE_OPTIONS:C2}=(xo(),ie(_I)),{INTERNAL_DBIS_NAME:L2,AUDIT_STORE_NAME:D2}=_t();YL.exports=M2;var PT=32768,P2=100;async function M2(e){let t=e.database||e.schema||"data",r=N2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=I2({noSync:!0,maxDbs:w2.MAX_DBS}),f,E=d.openDB(L2,new VL(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,R){R.encoding="binary",R.encoder=void 0;let U=d.openDB(T,R),B=u.openDB(T,R);for(let{key:v,version:P,value:V}of B.getRange({transaction:h,versions:B.useVersions}))f=U.put(v,V,P),m++%P2===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of u.getRange({transaction:h,start:!1}))if(s.some(U=>T.startsWith?.(U+"/"))){E.put(T,R);let[,U]=T.split("/"),B=!U,v=new VL(!B,B);await S(T,v)}e.include_audit&&await S(D2,Object.assign({},C2)),await f;let A=$L(d.path);return A.headers=l(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=y2(o.path);return o.transaction(()=>{let _=Buffer.alloc(PT);b2(c,_,0,PT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=$L(null,{fd:c,start:PT}),f=new O2.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(M2,"getBackup")});var jL=g((QSe,QL)=>{"use strict";var U2=G(),{handleHDBError:v2}=se(),B2=dw(),H2=yf(),q2=tT(),x2=aC(),G2=lu(),F2=cT(),k2=MC(),$2=kC(),V2=fu(),Y2=zC(),K2=aL(),W2=fL(),Q2=hL(),j2=TL(),z2=yL(),J2=pT(),X2=LL(),Z2=BL(),e4=qL(),WL=kL(),t4=KL(),MT=class extends B2{static{a(this,"LMDBBridge")}async searchByConditions(t){return Y2(t)}async getDataByHash(t){return await F2(t)}async searchByHash(t){return await k2(t)}async getDataByValue(t,r){return await $2(t,r)}async searchByValue(t){return await V2(t)}async createSchema(t){return await x2(t)}async dropSchema(t){return await K2(t)}async createTable(t,r){return await W2(t,r)}async dropTable(t){return await J2(t)}async createAttribute(t){return await H2(t)}async createRecords(t){return await q2(t)}async updateRecords(t){return await Q2(t)}async upsertRecords(t){try{return await j2(t)}catch(r){throw v2(r,null,null,U2.ERR,r)}}async deleteRecords(t){return await G2(t)}async dropAttribute(t){return await X2(t)}async deleteAuditLogsBefore(t){return await z2(t)}async readAuditLog(t){return await Z2(t)}writeTransaction(t,r,n){return e4.writeTransaction(t,r,n)}flush(t,r){return WL.flush(t,r)}resetReadTxn(t,r){return WL.resetReadTxn(t,r)}getBackup(t){return t4(t)}};QL.exports=MT});var sD={};$e(sD,{ResourceBridge:()=>BT});function HT({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 JL(e,t){let r=ys(e),n=HT(e,r);if(!r)throw new Zn.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&rf(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ys(e){let t=e.database||e.schema||n4,r=es()[t];if(!r)throw(0,Zn.handleHDBError)(new Error,r4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function XL(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*ZL(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var eD,qf,Zn,tD,rD,ts,UT,vT,nD,r4,n4,s4,i4,zL,BT,iD=Ne(()=>{"use strict";eD=q(jL()),qf=q(hc()),Zn=q(se());Re();tD=q(tu()),rD=q(ou()),ts=q(w()),UT=q(si()),vT=q(Jn()),nD=q(W());$o();nf();({HDB_ERROR_MSGS:r4}=Zn.hdb_errors),n4="data",s4=1e4,i4=10,BT=class extends eD.default{static{a(this,"ResourceBridge")}constructor(t){super(t),zL=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,qf.default)(t,"conditions");if(r)throw(0,Zn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ys(t);if(!n)throw new Zn.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:HT(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Zn.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ft({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ys(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ys(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ys(t).dropTable()}createSchema(t){return Tu({database:t.schema,table:null}),UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,ts.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qT(t.schema),UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,ts.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,zL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,tD.default)(t);(0,rD.default)(t,n,r.primaryKey);let s,i=es()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=rf(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=es()[t.schema][t.table],n={user:t.hdb_user};return Ze(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return XL(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=es()[t.schema][t.table];if(!r.createdTimeProperty)throw new Zn.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ts.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,nD.async_set_timeout)(i4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%s4===0&&await _();return l.length>0&&await _(),s?XL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,qf.default)(t,"hashes");if(r)throw r;return JL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of JL(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ts.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,qf.default)(t,"value");if(n)throw n;let s=ys(t);if(!s)throw new Zn.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===ts.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:HT(t,s)})}async getDataByValue(t,r){let n=new Map,s=ys(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){ys({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ys(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ys(t),n={};switch(t.search_type){case ts.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[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 n;case ts.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of ZL(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return ZL(r,t.search_values?.[0],t.search_values?.[1])}}};a(HT,"getSelect");a(JL,"getRecords");a(ys,"getTable");a(XL,"createDeleteResponse");a(ZL,"groupRecordsInHistory")});var In=g((eTe,oD)=>{"use strict";var{ResourceBridge:o4}=(iD(),ie(sD)),a4=J();a4.initSync();var xf;function c4(){return xf||(xf=new o4,xf)}a(c4,"getBridge");oD.exports=c4()});var uD=g((rTe,lD)=>{"use strict";var aD=require("lodash"),gu=require("mathjs"),l4=require("jsonata"),cD=W();lD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?aD.uniqWith(e,aD.isEqual):e,searchJSON:u4,mad:Ru.bind(null,gu.mad),mean:Ru.bind(null,gu.mean),mode:Ru.bind(null,gu.mode),prod:Ru.bind(null,gu.prod),median:Ru.bind(null,gu.median)};function Ru(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ru,"aggregateFunction");function u4(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(cD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),cD.isEmpty(this.__ala__.res[r])){let n=l4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(u4,"searchJSON")});var dD=g((sTe,_D)=>{"use strict";var Rt=require("moment"),xT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;_D.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(xT),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(xT),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(xT)}});var pD=g((iTe,hD)=>{"use strict";var _4=require("@turf/area"),d4=require("@turf/length"),f4=require("@turf/circle"),E4=require("@turf/difference"),h4=require("@turf/distance"),p4=require("@turf/boolean-contains"),m4=require("@turf/boolean-equal"),S4=require("@turf/boolean-disjoint"),T4=require("@turf/helpers"),fD=w(),Te=W(),ai=G();hD.exports={geoArea:g4,geoLength:R4,geoCircle:A4,geoDifference:O4,geoDistance:ED,geoNear:N4,geoContains:b4,geoEqual:y4,geoCrosses:I4,geoConvert:w4};function g4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return _4.default(e)}catch(t){return ai.trace(t,e),NaN}}a(g4,"geoArea");function R4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return d4.default(e,{units:t||"kilometers"})}catch(r){return ai.trace(r,e),NaN}}a(R4,"geoLength");function A4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return f4.default(e,t,{units:r||"kilometers"})}catch(n){return ai.trace(n,e,t),NaN}}a(A4,"geoCircle");function O4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return E4(e,t)}catch(r){return ai.trace(r,e,t),NaN}}a(O4,"geoDifference");function ED(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return h4.default(e,t,{units:r||"kilometers"})}catch(n){return ai.trace(n,e,t),NaN}}a(ED,"geoDistance");function N4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ED(e,t,n)<=r}catch(s){return ai.trace(s,e,t),!1}}a(N4,"geoNear");function b4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return p4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(b4,"geoContains");function y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return m4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(y4,"geoEqual");function I4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!S4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(I4,"geoCrosses");function w4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(fD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(fD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),T4[t](e,r)}a(w4,"geoConvert")});var Gf=g((aTe,mD)=>{var zo=uD(),Jr=dD(),Is=pD();mD.exports=e=>{e.aggr.mad=e.aggr.MAD=zo.mad,e.aggr.mean=e.aggr.MEAN=zo.mean,e.aggr.mode=e.aggr.MODE=zo.mode,e.aggr.prod=e.aggr.PROD=zo.prod,e.aggr.median=e.aggr.MEDIAN=zo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=zo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=zo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Jr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Jr.current_time,e.fn.extract=e.fn.EXTRACT=Jr.extract,e.fn.date=e.fn.DATE=Jr.date,e.fn.date_format=e.fn.DATE_FORMAT=Jr.date_format,e.fn.date_add=e.fn.DATE_ADD=Jr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Jr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Jr.date_diff,e.fn.now=e.fn.NOW=Jr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Jr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Jr.get_server_time,e.fn.getdate=e.fn.GETDATE=Jr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Jr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Is.geoNear}});var RD=g((cTe,gD)=>{"use strict";var Au=require("lodash"),gr=require("alasql");gr.options.cache=!1;var C4=Gf(),SD=require("clone"),Ff=require("recursive-iterator"),fe=G(),Le=W(),Sc=In(),L4=w(),{hdb_errors:D4}=se(),{getDatabases:TD}=(Re(),ie(Ge)),P4="IS NULL",rs="There was a problem performing this search. Please check the logs and try again.";C4(gr);var GT=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw fe.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(rs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(rs)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(rs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(rs)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(rs)}}_getColumns(){let t=new Ff(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(SD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Au.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=TD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ff(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new gr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new gr.yy.LogicValue({value:i}):n instanceof gr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new gr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ff(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(L4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.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(Le.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"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Au.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await gr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(SD(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.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(P4)>-1&&this.tables.forEach(s=>{let i={columnid:TD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Au.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await Sc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(u),new Error(rs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await Sc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(u),new Error(rs)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Sc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(u),new Error(rs)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await Sc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(u),new Error(rs)}}}_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 gr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new gr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new gr.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 s=t.is_func?new gr.yy.FuncValue:new gr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.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={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${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 "${m}.${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 l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";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 u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=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(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await gr.promise(h,t),t=null}catch(E){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.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 m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Au.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=m.length;S<A;S++){let T=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Ff(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Au.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(rs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Sc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await gr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(D4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Sc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(rs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};gD.exports=GT});var Rr=g((uTe,AD)=>{"use strict";var M4=uw();AD.exports={searchByConditions:v4,searchByHash:B4,searchByValue:H4,search:q4};var FT=In(),{transformReq:kT}=W(),U4=RD();async function v4(e){return kT(e),FT.searchByConditions(e)}a(v4,"searchByConditions");async function B4(e){kT(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of FT.searchByHash(e))r&&t.push(r);return t}a(B4,"searchByHash");async function H4(e){kT(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of FT.searchByValue(e))t.push(r);return t}a(H4,"searchByValue");function q4(e,t){try{let r=new M4(e);r.validate(),new U4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(q4,"search")});var ci=g((dTe,yD)=>{"use strict";var Ou=require("crypto"),x4=J(),{CONFIG_PARAMS:G4}=w(),ND="aes-256-cbc",F4=32,k4=16,$T=64,bD=32,$4=$T+bD,OD=new Map;yD.exports={encrypt:V4,decrypt:Y4,createNatsTableStreamName:K4};function V4(e){let t=Ou.randomBytes(F4),r=Ou.randomBytes(k4),n=Ou.createCipheriv(ND,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(V4,"encrypt");function Y4(e){let t=e.substr(0,$T),r=e.substr($T,bD),n=e.substr($4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Ou.createDecipheriv(ND,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Y4,"decrypt");function K4(e,t){let r=x4.get(G4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=OD.get(r);return n||(n=Ou.createHash("md5").update(r).digest("hex"),OD.set(r,n)),n}a(K4,"createNatsTableStreamName")});var ji=g((hTe,wD)=>{"use strict";var ETe=Rr(),kf=G(),ID=Nf(),W4=ci(),$f=W(),{handleHDBError:Vf,hdb_errors:Q4}=se(),{HDB_ERROR_MSGS:Yf,HTTP_STATUS_CODES:VT}=Q4,j4=J();j4.initSync();var{getDatabases:YT}=(Re(),ie(Ge));wD.exports={describeAll:z4,describeTable:Kf,describeSchema:J4};async function z4(e){try{let t=$f.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=YT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await Kf({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await Kf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){kf.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return kf.error("Got an error in describeAll"),kf.error(t),Vf(new Error,Yf.DESCRIBE_ALL_ERR)}}a(z4,"describeAll");async function Kf(e,t){$f.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=ID.describe_table(e);if(i)throw i;let c=YT()[r];if(!c)throw Vf(new Error,Yf.SCHEMA_NOT_FOUND(e.schema),VT.NOT_FOUND);let l=c[n];if(!l)throw Vf(new Error,Yf.TABLE_NOT_FOUND(e.schema,e.table),VT.NOT_FOUND);function _(f){u.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 u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=W4.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){kf.warn(`unable to stat table dbi due to ${f}`)}return d}a(Kf,"descTable");async function J4(e){$f.transformReq(e);let t=ID.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 n=e.schema.toString(),i=YT()[n];if(!i)throw Vf(new Error,Yf.SCHEMA_NOT_FOUND(e.schema),VT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),$f.isEmpty(l)||l.describe){let _=await Kf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(J4,"describeSchema")});var wn=g((TTe,MD)=>{var X4=ti(),{callbackify:LD,promisify:Z4}=require("util"),{getDatabases:DD}=(Re(),ie(Ge));MD.exports={setSchemaDataToGlobal:CD,getTableSchema:e3,getSystemSchema:t3,setSchemaDataToGlobalAsync:Z4(CD)};var PD=ji(),mTe=LD(PD.describeAll),STe=LD(PD.describeTable);function CD(e){global.hdb_schema=DD(),e&&e()}a(CD,"setSchemaDataToGlobal");function e3(e,t,r){let n=DD()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(e3,"getTableSchema");function t3(){return X4}a(t3,"getSystemSchema")});var Ar=g((RTe,HD)=>{"use strict";var Qf=KS(),Qt=W(),r3=require("util"),jf=In(),n3=wn(),UD=G(),{handleHDBError:Jo,hdb_errors:s3}=se(),{HTTP_STATUS_CODES:Xo}=s3,i3=r3.promisify(n3.getTableSchema),o3="updated",vD="inserted",BD="upserted";HD.exports={insert:c3,update:l3,upsert:u3,validation:a3,flush:_3};async function a3(e){if(Qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await i3(e.schema,e.table),r=Qf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Qt.isEmptyOrZeroLength(c[n]))throw UD.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(!Qt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw UD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qt.isEmpty(c[n])&&c[n]!==""&&s.has(Qt.autoCast(c[n]))&&(c.skip=!0),s.add(Qt.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(a3,"validation");async function c3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Qf(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);Qt.transformReq(e);let r=Qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await jf.createRecords(e);return Wf(vD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(c3,"insertData");async function l3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Qf(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);Qt.transformReq(e);let r=Qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await jf.updateRecords(e);return Qt.isEmpty(n.existing_rows)?Wf(o3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Wf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(l3,"updateData");async function u3(e){if(e.operation!=="upsert")throw Jo(new Error,"invalid operation, must be upsert",Xo.INTERNAL_SERVER_ERROR);let t=Qf(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);Qt.transformReq(e);let r=Qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await jf.upsertRecords(e);return Wf(BD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(u3,"upsertData");function Wf(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===vD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===BD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Wf,"returnObject");function _3(e){return Qt.transformReq(e),jf.flush(e.schema,e.table)}a(_3,"flush")});var WT=g((OTe,GD)=>{var d3=rt(),KT=require("joi"),{hdb_table:f3,hdb_database:qD}=Os(),xD={schema:qD,database:qD,table:f3},E3={date:KT.date().iso().required()},h3={timestamp:KT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GD.exports=function(e,t){let r=t==="timestamp"?{...xD,...h3}:{...xD,...E3},n=KT.object(r);return d3.validateBySchema(e,n)}});var $D=g((NTe,kD)=>{var p3=rt(),QT=require("joi"),{hdb_table:m3,hdb_database:FD}=Os(),S3=QT.object({schema:FD,database:FD,table:m3,hash_values:QT.array().required(),ids:QT.array()});kD.exports=function(e){return p3.validateBySchema(e,S3)}});var XT=g((bTe,VD)=>{"use strict";var jT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},zT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},JT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};VD.exports={InsertObject:jT,NoSQLSeachObject:zT,DeleteResponseObject:JT}});var ta=g((ITe,jD)=>{"use strict";var KD=WT(),T3=$D(),Zo=W(),YD=require("moment"),WD=G(),{promisify:g3,callbackify:R3}=require("util"),ea=w(),A3=wn(),ZT=g3(A3.getTableSchema),eg=In(),{DeleteResponseObject:O3}=XT(),{handleHDBError:zi,hdb_errors:N3}=se(),{HDB_ERROR_MSGS:zf,HTTP_STATUS_CODES:Ji}=N3,b3="records successfully deleted",y3=R3(QD);jD.exports={delete:y3,deleteRecord:QD,deleteFilesBefore:I3,deleteAuditLogsBefore:w3};async function I3(e){let t=KD(e,"date");if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),!YD(e.date,YD.ISO_8601).isValid())throw zi(new Error,zf.INVALID_DATE,Ji.BAD_REQUEST,ea.LOG_LEVELS.ERROR,zf.INVALID_DATE,!0);let n=Zo.checkSchemaTableExist(e.schema,e.table);if(n)throw zi(new Error,n,Ji.NOT_FOUND,ea.LOG_LEVELS.ERROR,n,!0);let s=await eg.deleteRecordsBefore(e);if(await ZT(e.schema,e.table),WD.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(I3,"deleteFilesBefore");async function w3(e){let t=KD(e,"timestamp");if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),isNaN(e.timestamp))throw zi(new Error,zf.INVALID_VALUE("Timestamp"),Ji.BAD_REQUEST,ea.LOG_LEVELS.ERROR,zf.INVALID_VALUE("Timestamp"),!0);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);let n=await eg.deleteAuditLogsBefore(e);return await ZT(e.schema,e.table),WD.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(w3,"deleteAuditLogsBefore");async function QD(e){e.ids&&(e.hash_values=e.ids);let t=T3(e);if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);Zo.transformReq(e);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);try{await ZT(e.schema,e.table);let n=await eg.deleteRecords(e);return Zo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${b3}`),n}catch(n){if(n.message===ea.SEARCH_NOT_FOUND_MESSAGE){let s=new O3;return s.message=ea.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(QD,"deleteRecord")});var Jf=g((CTe,XD)=>{var C3=require("crypto"),zD=9;function L3(e){let t=P3(zD),r=JD(e+t);return t+r}a(L3,"createHash");function D3(e,t){let r=e?.substr(0,zD),n=r+JD(t+r);return e===n}a(D3,"validateHash");function P3(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(P3,"generateSalt");function JD(e){return C3.createHash("md5").update(e).digest("hex")}a(JD,"md5");XD.exports={hash:L3,validate:D3}});var eP=g((DTe,ZD)=>{var tg=rt(),rr={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 M3(e){return rr.password.presence=!0,rr.username.presence=!0,rr.role.presence=!0,rr.active.presence=!0,tg.validateObject(e,rr)}a(M3,"addUserValidation");function U3(e){return rr.password.presence=!1,rr.username.presence=!0,rr.role.presence=!1,rr.active.presence=!1,tg.validateObject(e,rr)}a(U3,"alterUserValidation");function v3(e){return rr.password.presence=!1,rr.username.presence=!0,rr.role.presence=!1,rr.active.presence=!1,tg.validateObject(e,rr)}a(v3,"dropUserValidation");ZD.exports={addUserValidation:M3,alterUserValidation:U3,dropUserValidation:v3}});var et=g((UTe,rP)=>{"use strict";var{platform:MTe}=require("os"),B3="nats-server.zip",rg="nats-server",H3=process.platform==="win32"?`${rg}.exe`:rg,ng="HDB",q3=/^[^\s.,*>]+$/,tP="__request__",x3=a(e=>`${e}.${tP}`,"REQUEST_SUBJECT"),G3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},F3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},k3={HUB:"hub.pid",LEAF:"leaf.pid"},$3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},V3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ng,deliver_subject:"__HDB__.WORKQUEUE"},Y3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ng,deliver_subject:"HDB.SCHEMAQUEUE"},K3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ng,deliver_subject:"HDB.USERQUEUE"},W3={SUCCESS:"success",ERROR:"error"},Q3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},j3={TXN:"txn",MSGID:"msgid"},Tc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},z3={[Tc.ERR]:1,[Tc.WRN]:2,[Tc.INF]:3,[Tc.DBG]:4,[Tc.TRC]:5},J3={debug:"-D",trace:"-DVV"};rP.exports={NATS_SERVER_ZIP:B3,NATS_SERVER_NAME:rg,NATS_BINARY_NAME:H3,PID_FILES:k3,NATS_CONFIG_FILES:F3,SERVER_SUFFIX:$3,WORK_QUEUE_CONSUMER_NAMES:V3,SCHEMA_QUEUE_CONSUMER_NAMES:Y3,USER_QUEUE_CONSUMER_NAMES:K3,NATS_TERM_CONSTRAINTS_RX:q3,REQUEST_SUFFIX:tP,UPDATE_REMOTE_RESPONSE_STATUSES:W3,CLUSTER_STATUS_STATUSES:Q3,REQUEST_SUBJECT:x3,SUBJECT_PREFIXES:j3,MSG_HEADERS:G3,LOG_LEVELS:Tc,LOG_LEVEL_FLAGS:J3,LOG_LEVEL_HIERARCHY:z3}});var sg=g((BTe,nP)=>{"use strict";var X3={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
2
|
+
"use strict";var iV=Object.create;var yl=Object.defineProperty;var oV=Object.getOwnPropertyDescriptor;var aV=Object.getOwnPropertyNames;var cV=Object.getPrototypeOf,lV=Object.prototype.hasOwnProperty;var a=(e,t)=>yl(e,"name",{value:t,configurable:!0});var Ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)yl(e,r,{get:t[r],enumerable:!0})},xb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of aV(t))!lV.call(e,s)&&s!==r&&yl(e,s,{get:()=>t[s],enumerable:!(n=oV(t,s))||n.enumerable});return e};var q=(e,t,r)=>(r=e!=null?iV(cV(e)):{},xb(t||!e||!e.__esModule?yl(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>xb(yl({},"__esModule",{value:!0}),e);var kb=g((MEe,Fb)=>{var uV=require("fast-glob"),{statSync:Om,existsSync:Nm,readFileSync:_V,writeFileSync:dV}=require("fs"),{spawnSync:fV,spawn:EV,execFileSync:PEe}=require("child_process"),{isMainThread:hV}=require("worker_threads"),{join:qi,relative:Gb}=require("path"),{PACKAGE_ROOT:Yn}=C(),{tmpdir:pV,platform:mV}=require("os");require("source-map-support").install();var SV=["resources","server","dataLayer","components"],Il="ts-build",bm,TV=__filename.endsWith("tsBuild.js");if(TV){if(hV){let r;try{Om(qi(Yn,Il)),r=!0}catch{}if(r)for(let n of uV.sync(SV.map(s=>s+"/**/*.ts"),{cwd:Yn})){let s=0,i=0;try{s=Om(qi(Yn,n)).mtimeMs-5e3,i=Om(qi(Yn,Il,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),bm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),bm=!0;if(bm){let n=qi(Yn,"node_modules/.bin/tsc");mV()==="win32"&&(n+=".cmd");let s=fV(n,{cwd:Yn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=qi(pV(),"harperdb-tsc.pid"),o;if(Nm(i))try{process.kill(+_V(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=EV(n,["--watch"],{cwd:Yn,detached:!0,stdio:"ignore"});dV(i,c.pid.toString()),c.unref()}}}}let e=Fb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Yn)&&!n[0].includes("node_modules")){let i=Gb(Yn,n[0]),o;i.startsWith(Il)?o=qi(Yn,Gb(Il,i)):o=qi(Yn,Il,i);let c=qi(o,r),l=c+".js";if(Nm(l))return l;if(c.includes(".")&&Nm(c))return c}return t(r,n,s)}}});var C=g((BEe,ry)=>{"use strict";var An=require("path"),gV=require("fs"),{relative:UEe,join:vEe}=An,{existsSync:RV}=gV;function AV(){let e=__dirname;for(;!RV(An.join(e,"package.json"));){let t=An.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(AV,"getHDBPackageRoot");var xi=AV(),$b="js",yd=$b,OV="harperdb-config.yaml",NV="defaultConfig.yaml",bV="hdb",Vb=`harperdb.${yd}`,Yb=`customFunctionsServer.${yd}`,yV=`restartHdb.${yd}`,Im="HarperDB",bd="Custom Functions",Id="Clustering Hub",wd="Clustering Leaf",IV="Clustering Ingest Service",wV="Clustering Reply Service",CV="foreground.pid",LV="hdb.pid",DV="data",PV={HDB:Im,CLUSTERING_HUB:Id,CLUSTERING_LEAF:wd,CLUSTERING_INGEST_SERVICE:IV,CLUSTERING_REPLY_SERVICE:wV,CUSTOM_FUNCTIONS:bd,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"},MV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},UV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},vV={harperdb:Im,"clustering hub":Id,"clustering leaf":wd,"custom functions":bd,custom_functions:bd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},BV={CLUSTERING_HUB_PROC_DESCRIPTOR:Id,CLUSTERING_LEAF_PROC_DESCRIPTOR:wd},ym={HDB:An.join(xi,"server/harperdb"),CUSTOM_FUNCTIONS:An.join(xi,"server/customFunctions"),CLUSTERING_HUB:An.join(xi,"server/nats"),CLUSTERING_LEAF:An.join(xi,"server/nats")},HV={HDB:An.join(ym.HDB,Vb),CUSTOM_FUNCTIONS:An.join(ym.CUSTOM_FUNCTIONS,Yb)},qV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:An.join(xi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:An.join(xi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:An.join(xi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},xV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Kb="support@harperdb.io",GV="customer-success@harperdb.io",Wb=1,FV=4141,Qb="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",kV="https://www.harperdb.io/product",$V=`For support, please submit a request at ${Qb} or contact ${Kb}`,jb=`For license support, please contact ${GV}`,VV="None of the specified records were found.",YV="hash attribute not found",KV=`Your current license only supports ${Wb} role. ${jb}`,WV="Your current license only supports 3 connections to a node.",QV="127.0.0.1",jV=1,zV=/^\.$/,JV=/^\.\.$/,XV="U+002E",ZV=/\//g,eY="U+002F",tY=/U\+002F/g,rY=/^U\+002E$/,nY=/^U\+002EU\+002E$/,sY="d",iY=999999,oY="*",aY="--max-old-space-size=",cY="system",lY="__hdb_hash",uY=".harperdb",_Y=".hdb",dY="keys",fY="hdb_boot_properties.file",EY=".updateConfig.json",hY="SIGTSTP",pY=24,mY=6e4,SY=448,TY="blob",gY="trash",RY="database",AY="schema",OY="transactions",NY=".count",bY="id",yY="PROCESS_NAME",zb={SETTINGS_PATH_KEY:"settings_path"},Jb=require("lodash"),IY={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",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},wY={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},CY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},LY={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"},DY={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"},Yr="hdb_internal:",PY={CREATE_SCHEMA:Yr+"create_schema",CREATE_TABLE:Yr+"create_table",CREATE_ATTRIBUTE:Yr+"create_attribute",ADD_USER:Yr+"add_user",ALTER_USER:Yr+"alter_user",DROP_USER:Yr+"drop_user",HDB_NODES:Yr+"hdb_nodes",HDB_USERS:Yr+"hdb_users",HDB_WORKERS:Yr+"hdb_workers",CATCHUP:Yr+"catchup",SCHEMA_CATCHUP:Yr+"schema_catchup",WORKER_ROOM:Yr+"cluster_workers"},MY={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"},UY="060493.ks",vY=".license",BY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Z={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",SET_NODE_REPLICATION:"set_node_replication",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"},HY={CSV:".csv",JSON:".json"},qY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},xY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},wl={};wl[Z.INSERT]=Z.INSERT;wl[Z.UPDATE]=Z.UPDATE;wl[Z.UPSERT]=Z.UPSERT;wl[Z.DELETE]=Z.DELETE;var xe=Object.create(null);xe[Z.DESCRIBE_ALL]=Z.DESCRIBE_ALL;xe[Z.DESCRIBE_TABLE]=Z.DESCRIBE_TABLE;xe[Z.DESCRIBE_SCHEMA]=Z.DESCRIBE_SCHEMA;xe[Z.READ_LOG]=Z.READ_LOG;xe[Z.ADD_NODE]=Z.ADD_NODE;xe[Z.LIST_USERS]=Z.LIST_USERS;xe[Z.LIST_ROLES]=Z.LIST_ROLES;xe[Z.USER_INFO]=Z.USER_INFO;xe[Z.SQL]=Z.SQL;xe[Z.GET_JOB]=Z.GET_JOB;xe[Z.SEARCH_JOBS_BY_START_DATE]=Z.SEARCH_JOBS_BY_START_DATE;xe[Z.DELETE_FILES_BEFORE]=Z.DELETE_FILES_BEFORE;xe[Z.EXPORT_LOCAL]=Z.EXPORT_LOCAL;xe[Z.EXPORT_TO_S3]=Z.EXPORT_TO_S3;xe[Z.CLUSTER_STATUS]=Z.CLUSTER_STATUS;xe[Z.REMOVE_NODE]=Z.REMOVE_NODE;xe[Z.RESTART]=Z.RESTART;xe[Z.CUSTOM_FUNCTIONS_STATUS]=Z.CUSTOM_FUNCTIONS_STATUS;xe[Z.GET_CUSTOM_FUNCTIONS]=Z.GET_CUSTOM_FUNCTIONS;xe[Z.GET_CUSTOM_FUNCTION]=Z.GET_CUSTOM_FUNCTION;xe[Z.SET_CUSTOM_FUNCTION]=Z.SET_CUSTOM_FUNCTION;xe[Z.DROP_CUSTOM_FUNCTION]=Z.DROP_CUSTOM_FUNCTION;xe[Z.ADD_CUSTOM_FUNCTION_PROJECT]=Z.ADD_CUSTOM_FUNCTION_PROJECT;xe[Z.DROP_CUSTOM_FUNCTION_PROJECT]=Z.DROP_CUSTOM_FUNCTION_PROJECT;xe[Z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=Z.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[Z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=Z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var GY={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs"},FY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Xb={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"},kY=Jb.invert(Xb),$Y={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"},w={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",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",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",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",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_DOMAINSOCKET:"operationsApi_network_domainSocket",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",SERIALIZATION_BIGINT:"serialization_bigInt",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_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},Zb={settings_path:zb.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];Zb[t.toLowerCase()]=t}var VY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},YY={csv_file_load:"csv_file_load",csv_data_load:Z.CSV_DATA_LOAD,csv_url_load:Z.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"},KY={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"},WY={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},QY={VERSION_DEFAULT:"2.2.0"},jY={DEVELOPMENT:8192,DEFAULT:512},zY={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"},JY={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"},XY={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},ey={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},ZY=Symbol("metadata"),e1="__clustering__",t1=Object.values(ey),r1=15984864e5,ty={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},n1=Jb.invert(ty),s1={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"},i1=111,o1=`\r
|
|
3
|
+
`,a1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},c1=["*","%"],l1="unauthorized_access",u1="func_val",_1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},d1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},f1={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"},E1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},h1={HTTP:"http"},p1={STOPPED:"stopped",ONLINE:"online"},m1="3.x.x",S1={SUCCESS:"success",FAILURE:"failure"},T1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};ry.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:Kb,HDB_SUPPORT_URL:Qb,HDB_PRICING_URL:kV,SUPPORT_HELP_MSG:$V,LICENSE_HELP_MSG:jb,HDB_PROC_NAME:Vb,HDB_PROC_DESCRIPTOR:Im,CLUSTERING_LEAF_PROC_DESCRIPTOR:wd,CLUSTERING_HUB_PROC_DESCRIPTOR:Id,SYSTEM_SCHEMA_NAME:cY,HASH_FOLDER_NAME:lY,HDB_HOME_DIR_NAME:uY,UPDATE_FILE_NAME:EY,LICENSE_KEY_DIR_NAME:dY,BOOT_PROPS_FILE_NAME:fY,JOB_TYPE_ENUM:YY,JOB_STATUS_ENUM:BY,SYSTEM_TABLE_NAMES:LY,SYSTEM_TABLE_HASH_ATTRIBUTES:DY,OPERATIONS_ENUM:Z,VALID_S3_FILE_TYPES:HY,S3_BUCKET_AUTH_KEYS:qY,VALID_SQL_OPS_ENUM:xY,GEO_CONVERSION_ENUM:FY,HDB_SETTINGS_NAMES:Xb,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:kY,SERVICE_ACTIONS_ENUM:GY,CLUSTER_MESSAGE_TYPE_ENUM:KY,CLUSTER_CONNECTION_DIRECTION_ENUM:WY,CLUSTER_EVENTS_DEFS_ENUM:zY,PERIOD_REGEX:zV,DOUBLE_PERIOD_REGEX:JV,UNICODE_PERIOD:XV,FORWARD_SLASH_REGEX:ZV,UNICODE_FORWARD_SLASH:eY,ESCAPED_FORWARD_SLASH_REGEX:tY,ESCAPED_PERIOD_REGEX:rY,ESCAPED_DOUBLE_PERIOD_REGEX:nY,REG_KEY_FILE_NAME:UY,RESTART_TIMEOUT_MS:mY,HDB_FILE_PERMISSIONS:SY,DATABASES_DIR_NAME:RY,LEGACY_DATABASES_DIR_NAME:AY,TRANSACTIONS_DIR_NAME:OY,LIMIT_COUNT_NAME:NY,ID_ATTRIBUTE_STRING:bY,INSERT_MODULE_ENUM:wY,UPGRADE_JSON_FIELD_NAMES_ENUM:CY,RESTART_CODE:hY,RESTART_CODE_NUM:pY,CLUSTER_OPERATIONS:wl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:MY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Yr,INTERNAL_SC_CHANNELS:PY,CLUSTERING_MESSAGE_TYPES:s1,HDB_FILE_SUFFIX:_Y,BLOB_FOLDER_NAME:TY,HDB_TRASH_DIR:gY,ORIGINATOR_SET_VALUE:i1,LICENSE_VALUES:QY,RAM_ALLOCATION_ENUM:jY,TIME_STAMP_NAMES_ENUM:ey,TIME_STAMP_NAMES:t1,PERMS_UPDATE_RELEASE_TIMESTAMP:r1,SEARCH_NOT_FOUND_MESSAGE:VV,SEARCH_ATTRIBUTE_NOT_FOUND:YV,LICENSE_ROLE_DENIED_RESPONSE:KV,LICENSE_MAX_CONNS_REACHED:WV,BASIC_LICENSE_MAX_NON_CU_ROLES:Wb,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:FV,VALUE_SEARCH_COMPARATORS:ty,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:n1,LICENSE_FILE_NAME:vY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:JY,NEW_LINE:o1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:jV,MOMENT_DAYS_TAG:sY,API_TURNOVER_SEC:iY,LOOPBACK:QV,CODE_EXTENSION:yd,WILDCARD_SEARCH_VALUE:oY,NODE_ERROR_CODES:XY,JAVASCRIPT_EXTENSION:$b,PERMS_CRUD_ENUM:a1,UNAUTHORIZED_PERMISSION_NAME:l1,SEARCH_WILDCARDS:c1,FUNC_VAL:u1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:_1,JWT_ENUM:d1,CLUSTERING_FLAG:e1,ITC_EVENT_TYPES:f1,CUSTOM_FUNCTION_PROC_NAME:Yb,CUSTOM_FUNCTION_PROC_DESCRIPTOR:bd,SERVICES:E1,THREAD_TYPES:h1,MEM_SETTING_KEY:aY,HDB_RESTART_SCRIPT:yV,PROCESS_DESCRIPTORS:PV,SERVICE_SERVERS:HV,SERVICE_SERVERS_CWD:ym,PROCESS_DESCRIPTORS_VALIDATE:vV,LAUNCH_SERVICE_SCRIPTS:qV,LOG_LEVELS:UV,PROCESS_NAME_ENV_PROP:yY,LOG_NAMES:MV,PM2_PROCESS_STATUSES:p1,CONFIG_PARAM_MAP:Zb,CONFIG_PARAMS:w,HDB_CONFIG_FILE:OV,HDB_DEFAULT_CONFIG_FILE:NV,ROLE_TYPES_ENUM:xV,BOOT_PROP_PARAMS:zb,INSTALL_PROMPTS:IY,HDB_ROOT_DIR_NAME:bV,CLUSTERING_PROCESSES:BV,FOREGROUND_PID_FILE:CV,PACKAGE_ROOT:xi,PRE_4_0_0_VERSION:m1,DATABASES_PARAM_CONFIG:VY,METADATA_PROPERTY:ZY,AUTH_AUDIT_STATUS:S1,AUTH_AUDIT_TYPES:T1,HDB_PID_FILE:LV,DEFAULT_DATABASE_NAME:DV,LEGACY_CONFIG_PARAMS:$Y};kb()});var Uo=g((qEe,iy)=>{"use strict";var ny=require("minimist");iy.exports=g1;function g1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=sy(process.env),n=sy(ny(process.argv))):(r=process.env,n=ny(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(g1,"assignCMDENVVariables");function sy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(sy,"objKeysToLowerCase")});var G=g((GEe,Um)=>{"use strict";var vo=require("fs-extra"),{workerData:R1,threadId:A1}=require("worker_threads"),Js=require("path"),cy=require("yaml"),ly=require("properties-reader"),Lt=C(),oy=Uo(),O1=require("os"),{PACKAGE_ROOT:Cm}=C(),{_assignPackageExport:N1}=require("../index"),Ll={};for(let e in console)Ll[e]||(Ll[e]=console[e]);var fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},uy={STDOUT:"stdOut",STDERR:"stdErr"},b1=Js.join(Cm,"logs"),y1=Js.join(Cm,"config/yaml/",Lt.HDB_DEFAULT_CONFIG_FILE),I1=1e4,zs,Ts,dr,Cd,Ld,Dl,Xa,Cl;Cl===void 0&&_y();Um.exports={notify:Ey,fatal:hy,error:Pl,warn:Mm,info:Dd,debug:Pm,trace:Dm,setLogLevel:U1,log_level:dr,loggerWithTag:w1,suppressLogging:C1,initLogSettings:_y,setupConsoleLogging:dy,logCustomLevel:P1,closeLogFile:Lm,getLogFilePath:()=>Dl,OUTPUTS:uy,AuthAuditLog:H1};N1("logger",Um.exports);function _y(e=!1){try{if(Cl===void 0||e){Lm();let t=M1(),r=oy(["ROOTPATH"]);try{Cl=ly(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!vo.pathExistsSync(Js.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE)))throw n}({level:dr,config_log_path:Ld,to_file:zs,to_stream:Ts}=v1(r.ROOTPATH?Js.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE):Cl.get("settings_path"))),Cd=Lt.LOG_NAMES.HDB,Dl=Js.join(Ld,Cd)}}catch(t){if(Cl=void 0,t.code===Lt.NODE_ERROR_CODES.ENOENT){let r=oy(Object.keys(Lt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Lt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Lt.CONFIG_PARAMS.LOGGING_LEVEL){dr=l;continue}if(c===Lt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ts=l;continue}c===Lt.CONFIG_PARAMS.LOGGING_FILE&&(zs=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=B1();zs=zs===void 0?s:zs,zs=ay(zs),Ts=Ts===void 0?i:Ts,Ts=ay(Ts),dr=dr===void 0?n:dr,Ld=b1,Cd=Lt.LOG_NAMES.INSTALL,Dl=Js.join(Ld,Cd);return}throw Pl("Error initializing log settings"),Pl(t),t}process.env.DEV_MODE&&(Ts=!0),dy()}a(_y,"initLogSettings");var wm=!0;function dy(){Ja("error",Pl),Ja("warn",Mm),Ja("log",Dd),Ja("info",Dd),Ja("debug",Pm),Ja("trace",Dm)}a(dy,"setupConsoleLogging");function Ja(e,t){console[e]=function(...r){if(wm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ll[e](...r)}}a(Ja,"logConsole");function w1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Ey),fatal:r(hy),error:r(Pl),warn:r(Mm),info:r(Dd),debug:r(Pm),trace:r(Dm)};function r(n){return function(...s){return n(t,...s)}}}a(w1,"loggerWithTag");function C1(e){try{wm=!1,e()}finally{wm=!0}}a(C1,"suppressLogging");var L1=R1?.name?.replace(/ /g,"-")||"main";function Xs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||L1+"/"+A1);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
|
|
4
|
+
`}a(Xs,"createLogRecord");function Ml(e){zs&&fy(e),Ts&&process.stdout.write(e)}a(Ml,"logStdOut");function Pd(e){zs&&fy(e),Ts&&process.stderr.write(e)}a(Pd,"logStdErr");function fy(e){D1(),Xa?vo.appendFileSync(Xa,e):Ll.log(e)}a(fy,"logToFile");function Lm(){try{vo.closeSync(Xa)}catch{}Xa=null}a(Lm,"closeLogFile");function D1(){if(!Xa){try{if(!Dl)debugger;Xa=vo.openSync(Dl,"a")}catch(e){Ll.error(e)}setTimeout(()=>{Lm()},I1).unref()}}a(D1,"openLogFile");function Dd(...e){fr[dr]<=fr.info&&Ml(Xs("info",e))}a(Dd,"info");function Dm(...e){fr[dr]<=fr.trace&&Ml(Xs("trace",e))}a(Dm,"trace");function Pl(...e){fr[dr]<=fr.error&&Pd(Xs("error",e))}a(Pl,"error");function Pm(...e){fr[dr]<=fr.debug&&Ml(Xs("debug",e))}a(Pm,"debug");function Ey(...e){fr[dr]<=fr.notify&&Ml(Xs("notify",e))}a(Ey,"notify");function hy(...e){fr[dr]<=fr.fatal&&Pd(Xs("fatal",e))}a(hy,"fatal");function Mm(...e){fr[dr]<=fr.warn&&Pd(Xs("warn",e))}a(Mm,"warn");function P1(e,t,...r){t===uy.STDERR?Pd(Xs(e,r)):Ml(Xs(e,r))}a(P1,"logCustomLevel");function M1(){let e;try{e=O1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Js.join(e,Lt.HDB_HOME_DIR_NAME,Lt.BOOT_PROPS_FILE_NAME);return vo.existsSync(t)||(t=Js.join(Cm,"utility/hdb_boot_properties.file")),t}a(M1,"getPropsFilePath");function U1(e){dr=e}a(U1,"setLogLevel");function ay(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ay,"autoCastBoolean");function v1(e){try{if(e.includes("config/settings.js")){let o=ly(e);return{level:o.get(Lt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Js.dirname(o.get(Lt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Lt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Lt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=cy.parseDocument(vo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Lt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(v1,"getLogConfig");function B1(){try{let e=cy.parseDocument(vo.readFileSync(y1,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(B1,"getDefaultConfig");function H1(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(H1,"AuthAuditLog")});var Bo=g((kEe,q1)=>{q1.exports={name:"harperdb",version:"4.3.0-beta.6",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && 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:bin && 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:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","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.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@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:"4.1.10","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.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.10.0-beta.2",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.10.1",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.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",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:"1.6.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.3.3","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 Gi=g(($Ee,py)=>{"use strict";py.exports={version:x1,printVersion:G1};var Md=Bo();function x1(){if(Md)return Md.version}a(x1,"version");function G1(){Md&&console.log(`HarperDB Version ${Md.version}`)}a(G1,"printVersion")});var Ty=g((YEe,Sy)=>{"use strict";var my=require("semver/functions/major"),F1=Bo(),vm=process.versions&&process.versions.node?process.versions.node:void 0;Sy.exports=k1;function k1(){let e=F1.engines["minimum-node"];if(vm&&my(vm)<my(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${vm}. Please install a version of Node.js that is withing the defined range.`}}a(k1,"checkNodeVersion")});var Ho={};$e(Ho,{server:()=>it});var gy,it,Er=Ne(()=>{gy=require("../index"),it={};(0,gy._assignPackageExport)("server",it)});var Bm=g((WEe,Ry)=>{"use strict";var $1=require("util"),V1=require("path"),Y1=require("child_process"),K1=$1.promisify(Y1.execFile),W1=1e3*1e3*10;Ry.exports={findPs:Q1};async function Q1(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await K1("ps",["wwxo",`pid,${r}`],{maxBuffer:W1});for(let s of n.trim().split(`
|
|
5
|
+
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.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,n])=>({pid:Number.parseInt(r,10),name:V1.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(Q1,"findPs")});var _t=g((jEe,Oy)=>{"use strict";var j1="__dbis__",z1="__txns__",J1="__environment_name__",X1="__dbi_defintion__",Z1={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"},eK=["__createdtime__","__updatedtime__"],tK="\uFFFF",Ay={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},rK=Object.values(Ay);Oy.exports={AUDIT_STORE_NAME:z1,INTERNAL_DBIS_NAME:j1,DBI_DEFINITION_NAME:X1,SEARCH_TYPES:Z1,TIMESTAMP_NAMES:eK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:J1,TRANSACTIONS_DBI_NAMES_ENUM:Ay,TRANSACTIONS_DBIS:rK,OVERFLOW_MARKER:tK}});var Kr=g((zEe,Py)=>{"use strict";var Ny=C(),by=_t(),yy={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},Iy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),wy={500:Iy("There was an error processing your request."),400:"Invalid request"},nK=wy[yy.INTERNAL_SERVER_ERROR],sK={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.`},iK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},oK={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"},aK={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 ${by.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${by.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"},cK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Ny.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 ${Ny.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"},Cy={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"},lK={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."},uK={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`},_K={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"},dK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},fK={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`},Ly={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.`},Dy={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}`},EK={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."},hK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},pK={...Cy,...oK,...sK,...lK,...uK,..._K,...dK,...fK,...cK,...Ly,...Dy,...EK,...hK,...iK};Py.exports={CHECK_LOGS_WRAPPER:Iy,HDB_ERROR_MSGS:pK,DEFAULT_ERROR_MSGS:wy,DEFAULT_ERROR_RESP:nK,HTTP_STATUS_CODES:yy,LMDB_ERRORS_ENUM:aK,AUTHENTICATION_ERROR_MSGS:Cy,VALIDATION_ERROR_MSGS:Ly,ITC_ERRORS:Dy}});var se=g((XEe,vy)=>{"use strict";var Za=Kr(),mK=G(),SK=C(),Ud=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,My),this.statusCode=n||Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Za.DEFAULT_ERROR_MSGS[n]?Za.DEFAULT_ERROR_MSGS[n]:Za.DEFAULT_ERROR_MSGS[Za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&mK[s](i)}},Hm=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}},qm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function My(e,t,r,n=SK.LOG_LEVELS.ERROR,s=null,i=!1){if(Uy(e))return e;let o=new Ud(e,t,r,n,s);return i&&delete o.stack,o}a(My,"handleHDBError");function Uy(e){return e.__proto__.constructor.name===Ud.name}a(Uy,"isHDBError");vy.exports={isHDBError:Uy,handleHDBError:My,ClientError:Hm,ServerError:qm,hdb_errors:Za}});var ze=g((ehe,ky)=>{"use strict";var ql=C(),TK=W(),hr=J(),xl=require("path"),gK=require("minimist"),By=require("fs-extra"),Hy=require("lodash");hr.initSync();var{CONFIG_PARAMS:Fi,DATABASES_PARAM_CONFIG:Ul,SYSTEM_SCHEMA_NAME:vd}=ql,vl,Bl,Hl;function qy(){if(vl!==void 0)return vl;if(hr.getHdbBasePath()!==void 0)return vl=hr.get(Fi.STORAGE_PATH)||xl.join(hr.getHdbBasePath(),ql.DATABASES_DIR_NAME),vl}a(qy,"getBaseSchemaPath");function xy(){if(Bl!==void 0)return Bl;if(hr.getHdbBasePath()!==void 0)return Bl=Fy(vd),Bl}a(xy,"getSystemSchemaPath");function Gy(){if(Hl!==void 0)return Hl;if(hr.getHdbBasePath()!==void 0)return Hl=hr.get(ql.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||xl.join(hr.getHdbBasePath(),ql.TRANSACTIONS_DIR_NAME),Hl}a(Gy,"getTransactionAuditStoreBasePath");function RK(e,t){let r=hr.get(Fi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||xl.join(Gy(),e.toString())}a(RK,"getTransactionAuditStorePath");function Fy(e,t){e=e.toString(),t=t&&t.toString();let r=hr.get(ql.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||xl.join(qy(),e)}a(Fy,"getSchemaPath");function AK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,gK(process.argv));let n=r[Fi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!TK.isObject(n))throw o;i=n}for(let o of i){let c=o[vd];if(!c)continue;let l=hr.get(Fi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Ul.PATH];if(_)return Hy.set(l,[vd,Ul.TABLES,t,Ul.PATH],_),hr.setProperty(Fi.DATABASES,l),_;let u=c?.[Ul.PATH];if(u)return Hy.set(l,[vd,Ul.PATH],u),hr.setProperty(Fi.DATABASES,l),u}}let s=r[Fi.STORAGE_PATH.toUpperCase()];if(s){if(!By.pathExistsSync(s))throw new Error(s+" does not exist");let i=xl.join(s,e);return By.mkdirsSync(i),hr.setProperty(Fi.STORAGE_PATH,s),i}return xy()}a(AK,"initSystemSchemaPaths");function OK(){vl=void 0,Bl=void 0,Hl=void 0}a(OK,"resetPaths");ky.exports={getBaseSchemaPath:qy,getSystemSchemaPath:xy,getTransactionAuditStorePath:RK,getTransactionAuditStoreBasePath:Gy,getSchemaPath:Fy,initSystemSchemaPaths:AK,resetPaths:OK}});var pr=g((she,Wy)=>{"use strict";var NK=Kr().LMDB_ERRORS_ENUM,rhe=require("lmdb"),bK=_t(),nhe=require("buffer").Buffer,{OVERFLOW_MARKER:$y,MAX_SEARCH_KEY_LENGTH:Bd}=bK,Vy=["number","string","symbol","boolean","bigint"];function yK(e){if(e=e?.primaryStore||e,!e)throw new Error(NK.ENV_REQUIRED)}a(yK,"validateEnv");function IK(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(IK,"stringifyData");function wK(e){return e instanceof Date?e.valueOf():e}a(wK,"convertKeyValueToWrite");function CK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Vy.includes(typeof e))return e.length>Bd?[e.slice(0,Bd)+$y]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Vy.includes(typeof i))i.length>Bd?r.push(i.slice(0,Bd)+$y):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(CK,"getIndexedValues");var Hd=0,Yy=0;function Ky(){Yy=Date.now()-performance.now()}a(Ky,"adjustStartTime");Ky();var LK=6e4;setInterval(Ky,LK).unref();function DK(){let e=performance.now()+Yy;return e>Hd?(Hd=e,e):(Hd+=488e-6,Hd)}a(DK,"getNextMonotonicTime");Wy.exports={validateEnv:yK,stringifyData:IK,convertKeyValueToWrite:wK,getNextMonotonicTime:DK,getIndexedValues:CK}});var Qy,Kn,xm,Gl=Ne(()=>{Qy=require("events"),Kn=class extends Qy.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new xm;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)}},xm=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}}}});var Xy={};$e(Xy,{HAS_EXPIRATION:()=>Wm,LAST_TIMESTAMP_PLACEHOLDER:()=>$l,LOCAL_TIMESTAMP:()=>PK,METADATA:()=>Fl,NO_TIMESTAMP:()=>Fm,PENDING_LOCAL_TIME:()=>Qm,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Km,RecordEncoder:()=>Vm,TIMESTAMP_ASSIGN_LAST:()=>UK,TIMESTAMP_ASSIGN_NEW:()=>zy,TIMESTAMP_ASSIGN_PREVIOUS:()=>Jy,TIMESTAMP_PLACEHOLDER:()=>qd,TIMESTAMP_RECORD_PREVIOUS:()=>km,fromResource:()=>kd,getUpdateRecord:()=>jm,handleLocalTimeForGets:()=>$d});function BK(){return kl[0]=kl[0]^64,MK.getFloat64(0)}function kd(e){Ym=!0;try{return e()}finally{Ym=!1}}function $d(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[Fl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Fl]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[Fl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){if(this.timerTracked||(this.timerTracked=!0,qo.push(new WeakRef(this))),!Ym)try{throw new Error("Read transaction used outside of resource")}catch(l){this.readStack=l.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<qo.length;l++){let _=qo[l].deref();(!_||_.isDone||_.isCommitted)&&qo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function jm(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?ec=i?.localTime?km|Jy:Fm:ec=l?i?.localTime?km|16384:zy|16384:Fm,u>0&&(c|=Wm),Gd=c,$m=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ec>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let A=_?.user?.username;if(E&&(xd=e.encoder.encode(E)),f&&i?.localTime){let T=i?.localTime,R=r.get(T);if(R){let U=Ft(R).previousLocalTime;return r.put(T,Fd(o,t,n,U,A,d,xd),{ifVersion:m}),S}}r.put($l,Fd(o,t,n,i?.localTime?1:0,A,d,xd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var jy,Gm,qd,$l,Km,PK,Fl,kl,MK,Fm,zy,UK,Jy,km,Wm,Qm,vK,xd,ec,Gd,$m,Vm,lhe,Ym,qo,tc=Ne(()=>{jy=require("msgpackr");xo();Gm=q(G()),qd=new Uint8Array([1,1,1,1,4,64,0,0]),$l=new Uint8Array([1,1,1,1,1,0,0,0]),Km=new Uint8Array([1,1,1,1,3,64,0,0]),PK=Symbol("local-timestamp"),Fl=Symbol("metadata"),kl=new Uint8Array(8),MK=new DataView(kl.buffer,0,8),Fm=0,zy=0,UK=1,Jy=3,km=4,Wm=16,Qm=1,ec=0,Gd=-1,$m=0,Vm=class extends jy.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(ec||Gd>=0){let i=0,o=ec;o&&(i+=8,ec=0);let c=Gd,l=$m;c>=0&&(i+=2,Gd=-1,l&&(i+=8,$m=0));let _=vK=r.call(this,n,s|2048|i);xd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(qd[4]=o,qd[5]=o>>8,_.set(qd,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(kl,0,c),c+=8;else for(let d=0;d<8;d++)kl[d]=t[c++];l=BK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Wm&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[Fl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(BK,"getTimestamp");lhe=Map.prototype.get;a(kd,"fromResource");a($d,"handleLocalTimeForGets");qo=[];setInterval(()=>{for(let e=0;e<qo.length;e++){let t=qo[e].deref();!t||t.isDone||t.isCommitted?qo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Gm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Gm.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(jm,"getUpdateRecord")});var uI={};$e(uI,{AUDIT_STORE_OPTIONS:()=>cI,createAuditEntry:()=>Fd,openAuditStore:()=>Wd,readAuditEntry:()=>Ft,setAuditRetention:()=>qK,transactionKeyEncoder:()=>aI});function Wd(e){let t=e.auditStore=e.openDB(sI.AUDIT_STORE_NAME,cI);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Vd){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-zm})){if((_[0]&15)===Zm){let u=Ft(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=HK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,zm/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Kd.getWorkerIndex)()===(0,Kd.getWorkerCount)()-1&&s(Vd),t}function qK(e,t=Vd){zm=e,Vd=t}function Fd(e,t,r,n,s,i,o){let c=lI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?rc.setFloat64(0,n):On.set(Km),l=9),f(0),f(t),d(r),rc.setFloat64(l,e),l+=8,s?d(s):On[l++]=0,On[n?8:0]=c;let u=On.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,nc.writeKey)(E,On,l);let m=l-h-1;m>127?m>16383?(tS.error("Key or username was too large for audit entry",E),l=h+1,On[h]=0):(On.copyWithin(h+2,h+1,l),rc.setUint16(h,m|32768),l++):On[h]=m}function f(E){E<128?On[l++]=E:E<16384?(rc.setUint16(l,E|32768),l+=2):E<1056964608?(rc.setUint32(l,E|3221225472),l+=4):(On[l]=255,rc.setUint32(l+1,E),l+=5)}}function Ft(e){try{let t=e.dataView||(e.dataView=new eS(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:lI[n&7],tableId:i,get recordId(){return nI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?nI(e,u,d):void 0},getValue(f,E,h){if(n&Jm||n&Xm&&!E)return f.decoder.decode(e.subarray(t.position));if(n&Xm&&h)return rS(f.getEntry(this.recordId),h,f)}}}catch{return tS.error("Reading audit entry error",e),{}}}function nI(e,t,r){let n=e.subarray(t,r);return(0,nc.readKey)(n,0,r-t)}var nc,Yd,sI,iI,Kd,oI,tS,On,rc,aI,cI,zm,HK,Vd,Jm,Xm,Zy,Zm,eI,tI,rI,lI,eS,xo=Ne(()=>{nc=require("ordered-binary"),Yd=q(J()),sI=q(_t()),iI=q(C()),Kd=q(tt()),oI=q(W());tc();tS=q(G());Qd();(0,Yd.initSync)();On=Buffer.alloc(1024),rc=new DataView(On.buffer,On.byteOffset,1024),aI={writeKey(e,t,r){return e===$l?(t.set($l,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,nc.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,nc.readKey)(e,t,r)}},cI={encoding:"binary",keyEncoder:aI},zm=(0,oI.convertToMS)((0,Yd.get)(iI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,HK=1e3,Vd=1e4;a(Wd,"openAuditStore");a(qK,"setAuditRetention");Jm=16,Xm=32,Zy=1,Zm=2,eI=3,tI=4,rI=5,lI={put:Zy|Jm,[Zy]:"put",delete:Zm,[Zm]:"delete",message:eI|Jm,[eI]:"message",invalidate:tI,[tI]:"invalidate",patch:rI|Xm,[rI]:"patch"};a(Fd,"createAuditEntry");a(Ft,"readAuditEntry");eS=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(nI,"readKeySafely")});var nS={};$e(nS,{add:()=>jd,applyReverse:()=>_I,getRecordAtTime:()=>rS,rebuildUpdateBefore:()=>zd});function jd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function zd(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,jd(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function _I(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=xK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=dI}}function rS(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=Ft(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":_I(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===dI&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=Ft(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var xK,dI,Qd=Ne(()=>{xo();a(jd,"add");jd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};xK={add:jd};a(zd,"rebuildUpdateBefore");a(_I,"applyReverse");dI={};a(rS,"getRecordAtTime")});function Wr(e){return e[Dt]||(e[Dt]=Object.create(null))}function tf(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[be])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a string, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a string, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a number, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new Nn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new Nn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new Nn.ClientError(`${c} must be a number, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Nn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Wr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Wr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Nn.ClientError(`${c} must be an object, attempt to assign ${u}`);Wr(this)[c]=u},"set")}_={get(){let u=this[Dt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[Ee]?.[c];return f.update(E)}return f}let d=this[Ee]?.[c];if(d&&typeof d=="object"){let f=EI(d,o);if(f)return u||(u=this[Dt]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Dt];return l?.[o]!==void 0?l[o]:this[Ee]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Nn.ClientError("Can not add a property to a sealed table schema");Wr(this)[o]=c}),i("deleteProperty",function(o){Wr(this)[o]=void 0}),i("toJSON",function(){let o=this[Dt],c;for(let _ in o){c||(c=Object.assign({},this[Ee]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ee])),Object.assign(c,this)),c||this[Ee]}),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 EI(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=s}},tf(r,t)),new r(e)):new Jd(e);case Array:let n=new Zd(e.length);n[Ee]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=EI(o,t?.elements)),n[s]=o}return n;default:return e}}function rf(e){let t=e[Dt],r;for(let s in t){r||(r=Object.assign({},e[Ee]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=rf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ee])),Object.assign(r,e)),r||e[Ee]}function Fo(e,t=e[Dt]){let r;if(fI.call(e,Ee)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Fo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ee]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=nS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Fo(s);r[n]=s}return r?Object.freeze(r):fI.call(e,Ee)?e[Ee]:e}function Xd(e){let t=e[Ee];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Go]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[Ee]===s){if(Xd(i))return!0}else return!0}}else{let r=e[Dt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[Ee]===i){if(Xd(s))return!0}else return!0}else return!0}}return!1}var Nn,Dt,Jd,fI,Go,Zd,ef,nf=Ne(()=>{Wn();Nn=q(se());Qd();Dt=Symbol("own-data");a(Wr,"getChanges");a(tf,"assignTrackedAccessors");a(EI,"trackObject");Jd=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=t}};tf(Jd,{});a(rf,"collapseData");fI=Object.prototype.hasOwnProperty;a(Fo,"deepFreeze");a(Xd,"hasChanges");Go=Symbol.for("has-array-changes"),Zd=class extends Array{static{a(this,"TrackedArray")}[Go];constructor(t){super(t)}splice(...t){return this[Go]=!0,super.splice(...t)}push(...t){return this[Go]=!0,super.push(...t)}pop(){return this[Go]=!0,super.pop()}unshift(...t){return this[Go]=!0,super.unshift(...t)}shift(){return this[Go]=!0,super.shift()}};Zd.prototype.constructor=Array;ef=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function $K(){kK=setInterval(function(){for(let e of sS)if(e.stale){let t=e[be]?.url;hI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},FK).unref()}var iS,hI,GK,sS,ko,sf,FK,kK,oS=Ne(()=>{iS=q(pr()),hI=q(G());Wn();tc();GK=100,sS=new Set,ko=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===0)return this.readTxnsUsed=1,kd(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),sS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),kd(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(sS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(this.open===2)throw new Error("Can not use a transaction that is no longer open");if(this.open===1){let r=new e;return r.addWrite(t),r.commit({})}else 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,iS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(u){throw this.abort(),u}n||this.doneReadTxn(),this.open=t?.letItLinger?1:2;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<GK>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return s.then(u=>u?(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=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=2,this.writes=[]}},sf=class extends ko{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,iS.getNextMonotonicTime)())}getReadTxn(){}},FK=3e4;a($K,"startMonitoringTxns");$K()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===0&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new ko;e.timestamp&&(n.timestamp=e.timestamp),n[be]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var pI,$o=Ne(()=>{pI=require("../index");Wn();oS();a(Ze,"transaction");(0,pI._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function lS(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let E=1;E<e.length;E++){let h=e[E],m=_(h);d=d.concat(m)}let f=new Set;return d.filter(E=>{let h=E.key??E;return f.has(h)?!1:(f.add(h),!0)})}else{let d=_(l),f=u(e.slice(1),!0,l.estimated_count);return f.length>0?o(d,f):d}function _(d){return d.conditions?lS(d.conditions,d.operator,r,n,s,i,o,c):oc(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,f,E){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",R=u(h.conditions,!T,E);return T?(U,B)=>R.some(v=>v(U,B)):(U,B)=>R.every(v=>v(U,B))}let S=(h.attribute||h[0])===r.primaryKey,A=_S(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=XK(r.primaryStore,h.estimated_count,E)),A}).filter(Boolean)}a(u,"mapConditionsToFilters")}function oc(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],R=ei(n.attributes,T);if(R.relationship){if(o.length<2)throw new Qr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let U=R.definition?.tableClass||R.elements?.definition?.tableClass,B=new Map,v=oc({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,U,s,B);if(R.relationship.to){i[o[0]]=B;let P=!!ei(U.attributes,R.relationship.to)?.elements;v=QK(v,R,U.primaryStore,P,B)}if(R.relationship.from){let P=a(V=>oc({attribute:R.relationship.from,value:V},t,r,n,s,B),"searchEntry");R.elements?(i[o[0]]=B,v=jK(v,R,U.primaryStore,B,P)):v=v.flatMap(P)}return v}else if(o.length===1)o=o[0];else throw new Qr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(uS[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=gs.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"sort":case"contains":case"ends_with":_=!0,E=!0;break;default:throw new Qr.ClientError(`Unknown query comparator "${l}"`)}if(r){let T=_;_=u,u=T,T=!f,f=!d,d=T}let h=o===n.primaryKey||o==null,m=h?n.primaryStore:n.indices[o],S;if(!m||m.isIndexing||E||c===null&&!m.indexNulls){if(s===!1&&!m)throw new Qr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new Qr.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new Qr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new Qr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(S=_S(e),!S)throw new Qr.ClientError(`Unknown search operator ${e.comparator}`)}let A={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=m.getRange(A).map(S?function({key:R,value:U}){return this.isSync?U&&S(U)?R:ki.SKIP:new Promise((B,v)=>setImmediate(()=>{try{B(U&&S(U)?R:ki.SKIP)}catch(P){v(P)}}))}:R=>R.value==null?ki.SKIP:R);return T.hasEntries=!0,T}else return m?m.getRange(A).map(S?function({key:T,value:R}){return this.isSync?S({[o]:T})?R:ki.SKIP:new Promise((U,B)=>setImmediate(()=>{try{U(S({[o]:T})?R:ki.SKIP)}catch(v){B(v)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:R}){return this.isSync?R&&S(R)?T:ki.SKIP:new Promise((U,B)=>setImmediate(()=>{try{U(R&&S(R)?T:ki.SKIP)}catch(v){B(v)}}))})}function ei(e,t){if(Array.isArray(t))if(t.length>1){let r=ei(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ei(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function QK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let f=u;Array.isArray(u)&&(f=Qn(u),o=!0);let E=s.get(f);E?E.push(d):s.set(f,E=[d]),u!==f&&(E.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[l];if(f!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<f.length;E++)_(f[E],u);else _(f,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function jK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let _=Qn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(Qn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(Qn(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function _S(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=ei(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=_S({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},f,r,E?.[u]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let m=t.propertyResolvers?.[u],S,A=a((T,R)=>{let U,B;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let P of h.idFilter.idSet)e={attribute:m.from,value:P};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(A.idFilter=S.idFilter),v}B=m(T,r,R),U=B?.value}else U=T[u];return U?Array.isArray(U)?U.some(h):h(U,B):!1},"recordFilter");return A}}switch(l instanceof Date&&(l=l.getTime()),uS[o]||o){case aS.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,f=l.length;d<f;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,gs.compareKeys)(u,l[0])>=0&&(0,gs.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,gs.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,gs.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,gs.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,gs.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,gs.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Qr.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,f,E){let h;f=f&&!s&&t?.indices[u]&&i>3,f&&(e.estimated_count==null&&af(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function A(T){let R=T[u],U;if(typeof R!="object"||!R||E?U=d(R):Array.isArray(R)?U=R.some(d):R instanceof Date&&(U=d(R.getTime())),f&&(S++,!U&&!A.idFilter&&++m/S*(i-S)>h)){let B=oc(e,r.transaction.getReadTxn(),!1,t).map(Qn),v=new Set(B);A.idFilter=P=>v.has(Qn(P)),A.idFilter.idSet=v}return U}return a(A,"recordFilter"),s&&(A.idFilter=d),A}a(_,"attributeComparator")}function af(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Zs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=uS[n]||n,n===aS.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=ei(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=af(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Zs(e.indices[i.relationship.from])/(Zs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Zs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=KK*Zs(e.primaryStore)+1:n==="between"?r.estimated_count=YK*Zs(e.primaryStore)+1:n==="sort"?r.estimated_count=Zs(e.primaryStore)+1:r.estimated_count=VK*Zs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function cf(e){if(e)if($i=e,sc.lastIndex=0,zK.test(e))try{let t=Vl(new ic,"");if(mr!==$i.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${mr} in '${$i}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Vl(e,t){let r=sc,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec($i);){mr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let f;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=mI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Yl(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=WK[d],l=cS[i]?mI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Yl(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&SI(h,u),of(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Yl(u)),s=void 0;break;case"(":sc.lastIndex=mr;let E=Vl(u?[]:new ic,")");switch(u){case"":of(e,_),e.conditions.push(E);break;case"limit":switch(E.length){case 1:e.limit=+E[0];break;case 2:e.offset=+E[0],e.limit=E[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(E[0])&&E.length===1&&!E[0].name?(e.select=E[0],e.select.asArray=!0):E.length===1?e.select=E[0]:E.length===2&&E[1]===""?e.select=E.slice(0,1):e.select=E;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=TI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}$i[mr]===","?r.lastIndex=++mr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");sc.lastIndex=mr,f=Vl([],"}"),f.name=u,e.push(f),$i[mr]===","?r.lastIndex=++mr:o=!0;break;case"[":sc.lastIndex=mr,u?(f=Vl(new ic,"]"),f.name=u):f=Vl(e.conditions?new ic:[],"]"),e.conditions?(of(e,_),e.conditions.push(f),s=null):e.push(f),$i[mr]===","?r.lastIndex=++mr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&SI(h,u),of(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Yl(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?JK:sc,r.lastIndex=mr),mr===$i.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function of(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Yl(e){return e.indexOf(".")>-1?e.split(".").map(Yl):decodeURIComponent(e)}function mI(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new Qr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function SI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Qr.ClientError("wildcard can only be used at the end of a string")}function TI(e){let t=gI(e[0]);return e.length>1&&(t.next=TI(e.slice(1))),t}function gI(e){if(Array.isArray(e)){let t=gI(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Qn(e){return Array.isArray(e)?e.join("\0"):e}function Zs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function XK(e,t,r){return t*r/Zs(e)}var Qr,aS,gs,ki,VK,YK,KK,WK,cS,uS,zK,sc,JK,mr,$i,ic,lf=Ne(()=>{Qr=q(se()),aS=q(_t()),gs=require("ordered-binary"),ki=require("lmdb"),VK=.3,YK=.1,KK=.05,WK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},cS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(lS,"executeConditions");a(oc,"searchByIndex");a(ei,"findAttribute");a(QK,"joinTo");a(jK,"joinFrom");uS={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(_S,"filterByType");a(af,"estimateCondition");zK=/[()[\]|!<>.]|(=\w*=)/,sc=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,JK=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(cf,"parseQuery");a(Vl,"parseBlock");a(of,"assignOperator");a(Yl,"decodeProperty");a(mI,"typedDecoding");a(SI,"wildcardDecoding");a(TI,"toSortObject");a(gI,"toSortEntry");ic=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 n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Qn,"flattenKey");a(Zs,"estimatedEntryCount");a(XK,"intersectionEstimate")});var ES={};$e(ES,{CONTEXT:()=>be,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>bn,RECORD_PROPERTY:()=>Ee,Resource:()=>Qt,snake_case:()=>eW,transformForSelect:()=>_f});function eW(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function RI(e,t){if(Kl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Kl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new fS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Kl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function jr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[be]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[be]||i):u=i:(u=s,c=u[Me]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[be]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let m=this.parseQuery(c.slice(E+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return Ze(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new uf(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new uf(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function zr(e,t){let r=new NI.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function dS(e,t,r){let n=e[Ee];if(n){let s=e[Dt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function _f(e,t){let r=t?.propertyResolvers,n=t[be],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):dS(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(dS(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(dS(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=_f(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var AI,OI,NI,be,Me,bn,Ee,ZK,Qt,uf,Kl,fS,Wn=Ne(()=>{AI=require("crypto");Gl();OI=require("../index"),NI=q(se());nf();$o();lf();be=Symbol.for("context"),Me=Symbol.for("primary-key"),bn=Symbol("is-collection"),Ee=Symbol("stored-record"),ZK={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[be];this[be]=n!==void 0?n:r||null}static get=jr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let _=_f(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=jr(function(t,r,n,s){if(Array.isArray(s)&&t[bn]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):zr(t,"put")},{hasContent:!0,type:"update"});static patch=jr(function(t,r,n,s){return t.patch?t.patch(s,r):zr(t,"patch")},{hasContent:!0,type:"update"});static delete=jr(function(t,r,n,s){return t.delete?t.delete(r):zr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,AI.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Ze(n,()=>{let i=new this(s,n),o=i.update?i.update(r):zr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=jr(function(t,r,n,s){return t.invalidate?t.invalidate(r):zr(t,"delete")},{hasContent:!1,type:"update"});static post=jr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=jr(function(t,r,n,s){return t.connect?t.connect(s,r):zr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=jr(function(t,r,n,s){return t.subscribe?t.subscribe(r):zr(t,"subscribe")},{type:"read"});static publish=jr(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):zr(t,"publish")},{hasContent:!0,type:"create"});static search=jr(function(t,r,n,s){let i=t.search?t.search(r):zr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=_f(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=jr(function(t,r,n,s){return t.search?t.search(s,r):zr(t,"search")},{hasContent:!0,type:"read"});static copy=jr(function(t,r,n,s){return t.copy?t.copy(s,r):zr(t,"copy")},{type:"create"});static move=jr(function(t,r,n,s){return t.move?t.move(s,r):zr(t,"move")},{type:"delete"});post(t){if(this[bn])return this.constructor.create(this[Me],t,this[be]);zr(this,"post")}static isCollection(t){return t?.[bn]}static coerceId(t){return t}static parseQuery(t){return cf(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&ZK[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:RI(t,this),isCollection:Kl}}let i=RI(t,this);return Kl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[be],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Me],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[bn]=!0),s}subscribe(t){return new Kn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Kn}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[Me]}getContext(){return this[be]}};Qt.prototype[be]=null;(0,OI._assignPackageExport)("Resource",Qt);a(eW,"snake_case");uf=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(RI,"pathToId");fS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(jr,"transactional");a(zr,"missingMethod");a(dS,"selectFromObject");a(_f,"transformForSelect")});var bI={};$e(bI,{Resources:()=>df,keyArrayToString:()=>ac,resetResources:()=>tW,resources:()=>Vi});function tW(){return Vi=new df}function ac(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var df,Vi,Wl=Ne(()=>{$o();df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Ze(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(tW,"resetResources");a(ac,"keyArrayToString")});function II(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;cc||((0,ff.onMessageByType)(yI,u=>{wI(u.path)}),cc=Object.create(null));let o=cc[s]||(cc[s]=[]);o.auditStore=e.auditStore,o.lastTxnTime==null&&(o.lastTxnTime=Date.now());let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ac(t);let l=new pS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function wI(e,t){if(!cc)return;let r=cc[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:r.lastTxnTime,exclusiveStart:!0})){r.lastTxnTime=s;let o=Ft(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=ac(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,hS.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,m)}catch(m){console.error(m),(0,hS.info)(m)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function CI(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,ff.broadcast)({type:yI,path:s}),wI(s,!0)})}}var hS,ff,yI,cc,Khe,pS,LI=Ne(()=>{hS=q(G()),ff=q(tt());Gl();Wl();xo();yI="transaction",Khe=Buffer.alloc(4096);a(II,"addSubscription");pS=class extends Kn{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 n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(wI,"notifyFromTransactionData");a(CI,"listenToCommits")});var PI=g((jhe,DI)=>{"use strict";var mS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};DI.exports=mS});var UI=g((Jhe,MI)=>{"use strict";var SS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};MI.exports=SS});var Ef=g((Zhe,vI)=>{"use strict";var gS=J(),RS=C(),{RecordEncoder:rW}=(tc(),ie(Xy));gS.initSync();var nW=gS.get(RS.CONFIG_PARAMS.STORAGE_COMPRESSION),sW=gS.get(RS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,iW=RS.UPDATES_PROPERTY,TS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=nW&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=sW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:rW},this.alwaysLazyProperty=n=>n===iW)}};vI.exports=TS});var pf=g((tpe,HI)=>{"use strict";var lc=J(),Ql=C();lc.initSync();var oW=lc.get(Ql.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||lc.get(Ql.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||lc.get(Ql.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",BI=lc.get(Ql.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),aW=lc.get(Ql.CONFIG_PARAMS.STORAGE_NOREADAHEAD),hf=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=oW,this.noFSAccess=!0,BI!==void 0&&(this.overlappingSync=BI),this.noReadAhead=aW}};HI.exports=hf;hf.MAX_DBS=1e4});var Ve=g((npe,WI)=>{"use strict";var OS=require("lmdb"),jn=require("fs-extra"),Jr=require("path"),mf=pr(),GI=G(),Sr=Kr().LMDB_ERRORS_ENUM,Sf=UI(),NS=Ef(),FI=pf(),Yi=_t(),qI=C(),{table:cW,resetDatabases:lW}=(Re(),ie(Ge)),xI=J(),zn=Yi.INTERNAL_DBIS_NAME,kI=Yi.DBI_DEFINITION_NAME,uW="data.mdb",_W="lock.mdb",jl=".mdb",dW="-lock",AS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=yn(t,r),this.key_type=this.dbi[Yi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Yi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new OS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Tf(e,t){if(e===void 0)throw new Error(Sr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Sr.ENV_NAME_REQUIRED)}a(Tf,"pathEnvNameValidation");async function bS(e,t,r=!0){try{await jn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Sr.INVALID_BASE_PATH):n}try{let n=Jr.join(e,t+jl);return await jn.access(n,jn.constants.R_OK|jn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await jn.access(Jr.join(e,t,uW),jn.constants.R_OK|jn.constants.F_OK),Jr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Sr.INVALID_ENVIRONMENT)}else throw new Error(Sr.INVALID_ENVIRONMENT);throw n}}a(bS,"validateEnvironmentPath");function gf(e,t){if(mf.validateEnv(e),t===void 0)throw new Error(Sr.DBI_NAME_REQUIRED)}a(gf,"validateEnvDBIName");async function fW(e,t,r=!1,n=!1){Tf(e,t);let s=Jr.basename(e);t=t.toString();let i=xI.get(qI.CONFIG_PARAMS.DATABASES);i||xI.setProperty(qI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await bS(e,t,n),$I(e,t,r)}catch(o){if(o.message===Sr.INVALID_ENVIRONMENT){let c=Jr.join(e,t);await jn.mkdirp(n?c:e);let l=new FI(n?c:c+jl,!1),_=OS.open(l);_.dbis=Object.create(null);let u=new NS(!1);_.openDB(zn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=yS(e,t,r);return _[Yi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(fW,"createEnvironment");async function EW(e,t,r,n=!0){Tf(e,t),t=t.toString();let s=Jr.join(e,t);return cW({table:t,database:Jr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(EW,"copyEnvironment");async function $I(e,t,r=!1){Tf(e,t),t=t.toString();let n=yS(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await bS(e,t),i=Jr.join(e,t+jl),o=s!=i,c=new FI(s,o),l=OS.open(c);l.dbis=Object.create(null);let _=YI(l);for(let u=0;u<_.length;u++)yn(l,_[u]);return l[Yi.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a($I,"openEnvironment");async function hW(e,t,r=!1){Tf(e,t),t=t.toString();let n=Jr.join(e,t+jl),s=await bS(e,t);if(global.lmdb_map!==void 0){let i=yS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await VI(o),delete global.lmdb_map[i]}}await jn.remove(s),await jn.remove(s===n?s+dW:Jr.join(Jr.dirname(s),_W))}a(hW,"deleteEnvironment");async function VI(e){mf.validateEnv(e);let t=e[Yi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(VI,"closeEnvironment");function yS(e,t,r=!1){let s=`${Jr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(yS,"getCachedEnvironmentName");function pW(e){mf.validateEnv(e);let t=Object.create(null),r=yn(e,zn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==zn)try{t[n]=Object.assign(new Sf,s)}catch{GI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(pW,"listDBIDefinitions");function YI(e){mf.validateEnv(e);let t=[],r=yn(e,zn);for(let{key:n}of r.getRange({start:!1}))n!==zn&&t.push(n);return t}a(YI,"listDBIs");function mW(e,t){let n=yn(e,zn).getEntry(t),s=new Sf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{GI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(mW,"getDBIDefinition");function KI(e,t,r,n=!r){if(gf(e,t),t=t.toString(),t===zn)throw new Error(Sr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return yn(e,t)}catch(s){if(s.message===Sr.DBI_DOES_NOT_EXIST){let i=new NS(r,n===!0),o=e.openDB(t,i),c=new Sf(r===!0,n);return o[kI]=c,yn(e,zn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(KI,"createDBI");function yn(e,t){if(gf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==zn?r=mW(e,t):r=new Sf,r===void 0)throw new Error(Sr.DBI_DOES_NOT_EXIST);let n;try{let s=new NS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Sr.DBI_DOES_NOT_EXIST):s}return n[kI]=r,e.dbis[t]=n,n}a(yn,"openDBI");function SW(e,t){gf(e,t),t=t.toString();let r=yn(e,t),n=r.getStats();return r[Yi.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(SW,"statDBI");async function TW(e,t){try{let r=Jr.join(e,t+jl);return(await jn.stat(r)).size}catch{throw new Error(Sr.INVALID_ENVIRONMENT)}}a(TW,"environmentDataSize");function gW(e,t){if(gf(e,t),t=t.toString(),t===zn)throw new Error(Sr.CANNOT_DROP_INTERNAL_DBIS_NAME);yn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],yn(e,zn).removeSync(t)}a(gW,"dropDBI");function RW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{yn(e,i)}catch(o){if(o.message===Sr.DBI_DOES_NOT_EXIST)KI(e,i,i!==t,i===t),n=!0;else throw o}}n&&lW()}a(RW,"initializeDBIs");WI.exports={openDBI:yn,openEnvironment:$I,createEnvironment:fW,listDBIs:YI,listDBIDefinitions:pW,createDBI:KI,dropDBI:gW,statDBI:SW,deleteEnvironment:hW,initializeDBIs:RW,TransactionCursor:AS,environmentDataSize:TW,copyEnvironment:EW,closeEnvironment:VI}});var zI=g((ipe,jI)=>{"use strict";var IS=Ve(),AW=G(),QI=Kr().LMDB_ERRORS_ENUM;jI.exports=OW;async function OW(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 IS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==QI.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await IS.closeEnvironment(global.lmdb_map[n]),await IS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==QI.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){AW.error(t)}}a(OW,"cleanLMDBMap")});var ti=g((ape,NW)=>{NW.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"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var lw=g((lpe,cw)=>{"use strict";var wS=require("recursive-iterator"),bW=require("alasql"),CS=require("clone"),JI=W(),{handleHDBError:XI,hdb_errors:yW}=se(),{HDB_ERROR_MSGS:ZI,HTTP_STATUS_CODES:ew}=yW,{getDatabases:IW}=(Re(),ie(Ge)),wW=["DISTINCT_ARRAY"],tw=Symbol("validateTables"),LS=Symbol("validateTable"),cpe=Symbol("getAllColumns"),rw=Symbol("validateAllColumns"),Rf=Symbol("findColumn"),nw=Symbol("validateOrderBy"),zl=Symbol("validateSegment"),DS=Symbol("validateColumn"),sw=Symbol("setColumnsForTable"),iw=Symbol("checkColumnsForAsterisk"),ow=Symbol("validateGroupBy"),aw=Symbol("hasColumns"),PS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[tw](),this[iw](),this[rw]()}[tw](){if(this[aw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[LS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[LS](t.table)})}}[aw](){let t=!1,r=new wS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[LS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=IW();if(!r[t.databaseid])throw XI(new Error,ZI.SCHEMA_NOT_FOUND(t.databaseid),ew.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XI(new Error,ZI.TABLE_NOT_FOUND(t.databaseid,t.tableid),ew.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=CS(s);i.table=CS(t),this.attributes.push(i)})}[Rf](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)}[iw](){let t=new wS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[sw](r.tableid)}[sw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new bW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[rw](){this[zl](this.statement.columns,!1),this[zl](this.statement.joins,!1),this[zl](this.statement.where,!1),this[ow](this.statement.group,!1),this[zl](this.statement.order,!0)}[zl](t,r){if(!t)return;let n=new wS(t),s=[];for(let{node:i,path:o}of n)!JI.isEmpty(i)&&!JI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[nw](i):s.push(this[DS](i)));return s}[ow](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&wW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=CS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Rf](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Rf](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.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`}[nw](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[DS](t)}[DS](t){let r=this[Rf](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};cw.exports=PS});var _w=g((_pe,uw)=>{"use strict";var MS=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")}};uw.exports=MS});var fw=g((fpe,dw)=>{"use strict";var US=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};dw.exports=US});var hw=g((hpe,Ew)=>{"use strict";var vS=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Ew.exports=vS});var mw=g((mpe,pw)=>{"use strict";var BS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};pw.exports=BS});var Yo=g((Ape,gw)=>{"use strict";var CW=Ve(),LW=fw(),DW=hw(),PW=mw(),Rs=pr(),Jl=Kr().LMDB_ERRORS_ENUM,MW=_t(),ri=C(),UW=W(),vW=require("uuid"),Tpe=require("lmdb"),{handleHDBError:BW,hdb_errors:HW}=se(),{OVERFLOW_MARKER:gpe,MAX_SEARCH_KEY_LENGTH:Rpe}=MW,Sw=J();Sw.initSync();var Af=Sw.get(ri.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),HS=ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Vo=ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function qW(e,t,r,n,s=Rs.getNextMonotonicTime()){FS(e,t,r,n),qS(e,t,r);let i=new LW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Tw(_,!0,s);let u=xW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return xS(o,c,n,i,s)}a(qW,"insertRecords");function xW(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ri.FUNC_VAL],n[o]=c)}let l=Rs.getIndexedValues(c),_=e.dbis[o];if(l){Af&&_.prefetch(l.map(u=>({key:u,value:s})),Of);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}Af&&e.dbis[t].prefetch([s],Of),e.dbis[t].put(s,n,n[Vo])})}a(xW,"insertRecord");function GW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(GW,"removeSkippedRecords");function Tw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Vo]))&&(e[Vo]=r||(r=Rs.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[HS]))&&(e[HS]=r||Rs.getNextMonotonicTime()):delete e[HS]}a(Tw,"setTimestamps");function qS(e,t,r){r.indexOf(ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ri.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ri.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),CW.initializeDBIs(e,t,r)}a(qS,"initializeTransaction");async function FW(e,t,r,n,s=Rs.getNextMonotonicTime()){FS(e,t,r,n),qS(e,t,r);let i=new DW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=GS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return xS(c,l,n,i,s,o)}a(FW,"updateRecords");async function kW(e,t,r,n,s=Rs.getNextMonotonicTime()){try{FS(e,t,r,n)}catch(l){throw BW(l,l.message,HW.HTTP_STATUS_CODES.BAD_REQUEST)}qS(e,t,r);let i=new PW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;UW.isEmpty(_[t])?(u=vW.v4(),_[t]=u):u=_[t];let d=GS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return xS(o,c,n,i,s)}a(kW,"upsertRecords");async function xS(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Rs.getNextMonotonicTime(),GW(r,i),n}a(xS,"finalizeWrite");function GS(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Tw(r,!u,o),Number.isInteger(r[Vo])&&_[Vo]>r[Vo])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof m=="function"){let R=m([[_]]);Array.isArray(R)&&(m=R[0][ri.FUNC_VAL],r[h]=m)}if(m===A)continue;let T=Rs.getIndexedValues(A);if(T){Af&&S.prefetch(T.map(R=>({key:R,value:n})),Of);for(let R=0,U=T.length;R<U;R++)S.remove(T[R],n)}if(T=Rs.getIndexedValues(m),T){Af&&S.prefetch(T.map(R=>({key:R,value:n})),Of);for(let R=0,U=T.length;R<U;R++)S.put(T[R],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Vo])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:GS(e,t,r,n,s,i,o))}a(GS,"updateUpsertRecord");function $W(e,t,r){if(Rs.validateEnv(e),t===void 0)throw new Error(Jl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jl.WRITE_ATTRIBUTES_REQUIRED):new Error(Jl.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a($W,"validateBasic");function FS(e,t,r,n){if($W(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Jl.RECORDS_REQUIRED):new Error(Jl.RECORDS_MUST_BE_ARRAY)}a(FS,"validateWrite");function Of(){}a(Of,"noop");gw.exports={insertRecords:qW,updateRecords:FW,upsertRecords:kW}});var Os=g((Npe,Ow)=>{"use strict";var Aw=W(),Rw=C(),uc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,As=require("joi"),Ki={schema_format:{pattern:uc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},VW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number(),As.array()).required(),YW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number()),KW=As.alternatives(As.string().min(1).max(Ki.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Ki.schema_format.message}),As.number()).required();function WW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ki.schema_length.maximum?`'${e}' maximum of 250 characters`:uc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(WW,"checkValidTable");function QW(e,t){return Aw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(QW,"validateSchemaExists");function jW(e,t){let r=t.state.ancestors[0].schema;return Aw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(jW,"validateTableExists");function zW(e,t){return e.toLowerCase()===Rw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Rw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(zW,"validateSchemaName");Ow.exports={common_validators:Ki,schema_regex:uc,hdb_schema_table:VW,validateSchemaExists:QW,validateTableExists:jW,validateSchemaName:zW,checkValidTable:WW,hdb_database:YW,hdb_table:KW}});var rt=g((ype,Nw)=>{"use strict";var Tr=require("validate.js");Tr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Tr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Tr.validators.type.checks={Object:function(e){return Tr.isObject(e)&&!Tr.isArray(e)},Array:Tr.isArray,Integer:Tr.isInteger,Number:Tr.isNumber,String:Tr.isString,Date:Tr.isDate,Boolean:function(e){return typeof e=="boolean"}};Tr.validators.hasValidFileExt=function(e,t){return Tr.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};Nw.exports={validateObject:JW,validateObjectAsync:XW,validateBySchema:ZW};function JW(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Tr(e,t,{format:"flat"});return r?new Error(r):null}a(JW,"validateObject");async function XW(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Tr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(XW,"validateObjectAsync");function ZW(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(ZW,"validateBySchema")});var Nf=g((wpe,bw)=>{var{common_validators:Ns}=Os(),Zl=rt(),Xl="is required",gt={database:{presence:!1,format:Ns.schema_format,length:Ns.schema_length},schema:{presence:!1,format:Ns.schema_format,length:Ns.schema_length},table:{presence:!0,format:Ns.schema_format,length:Ns.schema_length},attribute:{presence:!0,format:Ns.schema_format,length:Ns.schema_length},hash_attribute:{presence:!0,format:Ns.schema_format,length:Ns.schema_length}};function eu(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(eu,"makeAttributesStrings");function eQ(e){return e=eu(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(eQ,"schema_object");function tQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(tQ,"table_object");function rQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence=!1,Zl.validateObject(e,gt)}a(rQ,"create_table_object");function nQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence={message:Xl},gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(nQ,"attribute_object");function sQ(e){return e=eu(e),gt.table.presence={message:Xl},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,Zl.validateObject(e,gt)}a(sQ,"describe_table");function iQ(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(iQ,"validateTableResidence");bw.exports={schema_object:eQ,create_table_object:rQ,table_object:tQ,attribute_object:nQ,describe_table:sQ,validateTableResidence:iQ}});var Iw=g((Lpe,yw)=>{"use strict";var oQ=require("uuid"),kS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||oQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};yw.exports=kS});var bf=g((Ppe,ww)=>{"use strict";var aQ=Iw(),$S=class extends aQ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};ww.exports=$S});var Lw=g((Upe,Cw)=>{"use strict";Cw.exports=lQ;var cQ="inserted";function lQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===cQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(lQ,"returnObject")});var yf=g((Bpe,vw)=>{"use strict";var uQ=C(),VS=Ve(),_Q=Yo(),{getSystemSchemaPath:dQ,getSchemaPath:fQ}=ze(),EQ=ti(),hQ=Nf(),pQ=bf(),mQ=Lw(),{handleHDBError:Dw,hdb_errors:Mw}=se(),Pw=W(),{HTTP_STATUS_CODES:SQ}=Mw,YS=EQ.hdb_attribute,Uw=[];for(let e=0;e<YS.attributes.length;e++)Uw.push(YS.attributes[e].attribute);var TQ="inserted";vw.exports=gQ;async function gQ(e){let t=hQ.attribute_object(e);if(t)throw Dw(new Error,t.message,Mw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Pw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Dw(new Error,r,SQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Pw.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new pQ(e.schema,e.table,e.attribute,e.id);try{let i=await VS.openEnvironment(fQ(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}`);VS.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await VS.openEnvironment(dQ(),uQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await _Q.insertRecords(o,YS.hash_attribute,Uw,[s]);return mQ(TQ,c,{records:[s]},l)}catch(i){throw i}}a(gQ,"lmdbCreateAttribute")});var WS=g((qpe,Hw)=>{var{hdb_table:RQ,hdb_database:Bw}=Os(),AQ=rt(),KS=require("joi"),OQ={undefined:"undefined",null:"null"},NQ=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||OQ[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),bQ=KS.object({database:Bw,schema:Bw,table:RQ,records:KS.array().items(KS.object().custom(NQ)).required()});Hw.exports=function(e){return AQ.validateBySchema(e,bQ)}});var tu=g((Fpe,xw)=>{"use strict";var ni=W(),qw=G(),Gpe=WS(),{getDatabases:yQ}=(Re(),ie(Ge)),{ClientError:Ko}=se();xw.exports=IQ;function IQ(e){if(ni.isEmpty(e))throw new Ko("invalid update parameters defined.");if(ni.isEmptyOrZeroLength(e.schema))throw new Ko("invalid schema specified.");if(ni.isEmptyOrZeroLength(e.table))throw new Ko("invalid table specified.");if(!Array.isArray(e.records))throw new Ko("records must be an array");let t=yQ()[e.schema]?.[e.table];if(ni.isEmpty(t))throw new Ko(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&ni.isEmptyOrZeroLength(o[r]))throw qw.error("a valid hash attribute must be provided with update record:",o),new Ko("a valid hash attribute must be provided with update record, check log for more info");if(!ni.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw qw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Ko(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ni.isEmpty(o[r])&&o[r]!==""&&n.has(ni.autoCast(o[r]))&&(o.skip=!0),n.add(ni.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(IQ,"insertUpdateValidate")});var ru=g(($pe,Gw)=>{"use strict";var wQ=C().OPERATIONS_ENUM,QS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=wQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Gw.exports=QS});var ou=g((Kpe,Fw)=>{"use strict";var Ype=ru(),If=C(),zS=W(),jS=G(),CQ=require("uuid"),{handleHDBError:nu,hdb_errors:LQ}=se(),{HDB_ERROR_MSGS:su,HTTP_STATUS_CODES:iu}=LQ;Fw.exports=DQ;function DQ(e,t,r){for(let s=0;s<t.length;s++)PQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];MQ(i,r,e.operation)}}a(DQ,"processRows");function PQ(e){if(Buffer.byteLength(String(e))>If.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw nu(new Error,su.ATTR_NAME_LENGTH_ERR(e),iu.BAD_REQUEST,void 0,void 0,!0);if(zS.isEmptyOrZeroLength(e)||zS.isEmpty(e.trim()))throw nu(new Error,su.ATTR_NAME_NULLISH_ERR,iu.BAD_REQUEST,void 0,void 0,!0)}a(PQ,"validateAttribute");function MQ(e,t,r){if(!e.hasOwnProperty(t)||zS.isEmptyOrZeroLength(e[t])){if(r===If.OPERATIONS_ENUM.INSERT||r===If.OPERATIONS_ENUM.UPSERT){e[t]=CQ.v4();return}throw jS.error("Update transaction aborted due to record with no hash value:",e),nu(new Error,su.RECORD_MISSING_HASH_ERR,iu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>If.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw jS.error(e),nu(new Error,su.HASH_VAL_LENGTH_ERR,iu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw jS.error(e),nu(new Error,su.INVALID_FORWARD_SLASH_IN_HASH_ERR,iu.BAD_REQUEST,void 0,void 0,!0)}a(MQ,"validateHash")});var wf=g((Qpe,$w)=>{"use strict";var kw=W(),UQ=C(),vQ=G(),BQ=yf(),HQ=bf(),qQ=si(),{SchemaEventMsg:xQ}=Jn(),GQ="already exists in";$w.exports=FQ;async function FQ(e,t,r){if(kw.isEmptyOrZeroLength(r))return r;let n=[];kw.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await kQ(e,t.schema,t.name,i)})),s}a(FQ,"lmdbCheckForNewAttributes");async function kQ(e,t,r,n){let s=new HQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await $Q(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(GQ))vQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(kQ,"createNewAttribute");async function $Q(e){let t;return t=await BQ(e),qQ.signalSchemaChange(new xQ(process.pid,UQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a($Q,"createAttribute")});var _c=g((zpe,Vw)=>{"use strict";var JS=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Vw.exports=JS});var Kw=g((Xpe,Yw)=>{"use strict";var VQ=_c(),YQ=C().OPERATIONS_ENUM,XS=class extends VQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(YQ.INSERT,r,n,s,i),this.records=t}};Yw.exports=XS});var Qw=g((eme,Ww)=>{"use strict";var KQ=_c(),WQ=C().OPERATIONS_ENUM,ZS=class extends KQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(WQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Ww.exports=ZS});var zw=g((rme,jw)=>{"use strict";var QQ=_c(),jQ=C().OPERATIONS_ENUM,eT=class extends QQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(jQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};jw.exports=eT});var Xw=g((sme,Jw)=>{"use strict";var zQ=_c(),JQ=C().OPERATIONS_ENUM,tT=class extends zQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(JQ.DELETE,n,s,t,i),this.original_records=r}};Jw.exports=tT});var au=g((ame,rC)=>{"use strict";var ome=require("path"),Zw=Ve(),XQ=Kw(),ZQ=Qw(),ej=zw(),tj=Xw(),dc=_t(),eC=W(),{CONFIG_PARAMS:rj}=C(),tC=J();tC.initSync();var Cf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:nj}=ze();rC.exports=sj;async function sj(e,t){if(tC.get(rj.LOGGING_AUDITLOG)===!1)return;let r=nj(e.schema,e.table),n=await Zw.openEnvironment(r,e.table,!0),s=ij(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Zw.initializeDBIs(n,dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,dc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),eC.isEmpty(s.user_name)||n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[dc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(sj,"writeTransaction");function ij(e,t){let r=eC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Cf.INSERT)return new XQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.UPDATE)return new ZQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.UPSERT)return new ej(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Cf.DELETE)return new tj(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(ij,"createTransactionObject")});var rT=g((ume,nC)=>{"use strict";var oj=tu(),lme=ru(),cu=C(),aj=ou(),cj=Yo().insertRecords,lj=Ve(),uj=G(),_j=wf(),{getSchemaPath:dj}=ze(),fj=au();nC.exports=Ej;async function Ej(e){try{let{schema_table:t,attributes:r}=oj(e);aj(e,r,t.hash_attribute),e.schema!==cu.SYSTEM_SCHEMA_NAME&&(r.includes(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await _j(e.hdb_auth_header,t,r),s=dj(e.schema,e.table),i=await lj.openEnvironment(s,e.table),o=await cj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await fj(e,o)}catch(c){uj.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(Ej,"lmdbCreateRecords")});var oC=g((dme,iC)=>{"use strict";var sC=C(),hj=rT(),pj=ru(),mj=require("fs-extra"),{getSchemaPath:Sj}=ze();iC.exports=Tj;async function Tj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new pj(sC.SYSTEM_SCHEMA_NAME,sC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await hj(r),await mj.mkdirp(Sj(e.schema))}a(Tj,"lmdbCreateSchema")});var cC=g((Eme,aC)=>{"use strict";var nT=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};aC.exports=nT});var dC=g((Tme,_C)=>{"use strict";var lC=Ve(),sT=pr(),iT=Kr().LMDB_ERRORS_ENUM,gj=_t(),uC=G(),pme=W(),Rj=require("lmdb"),Aj=cC(),Oj=C(),{OVERFLOW_MARKER:mme,MAX_SEARCH_KEY_LENGTH:Sme}=gj,Nj=Oj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function bj(e,t,r,n){if(sT.validateEnv(e),t===void 0)throw new Error(iT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(iT.IDS_REQUIRED):new Error(iT.IDS_MUST_BE_ITERABLE);try{let s=lC.listDBIs(e);lC.initializeDBIs(e,t,s);let i=new Aj,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[Nj]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,Rj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let T=e.dbis[A],R=h[A];if(R!=null)try{let U=sT.getIndexedValues(R);if(U)for(let B=0,v=U.length;B<v;B++)T.remove(U[B],o)}catch{uC.warn(`cannot delete from attribute: ${A}, ${R}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){uC.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[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=sT.getNextMonotonicTime(),i}catch(s){throw s}}a(bj,"deleteRecords");_C.exports={deleteRecords:bj}});var lu=g((Rme,EC)=>{"use strict";var fc=W(),yj=dC(),Ij=Ve(),{getSchemaPath:wj}=ze(),Cj=au(),Lj=G();EC.exports=Dj;async function Dj(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(fc.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fc.isEmptyOrZeroLength(e.hash_values)&&!fc.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];fc.isEmpty(l)||e.hash_values.push(l)}}if(fc.isEmptyOrZeroLength(e.hash_values))return fC([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fc.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=wj(e.schema,e.table),i=await Ij.openEnvironment(s,e.table),o=await yj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Cj(e,o)}catch(c){Lj.error(`unable to write transaction due to ${c.message}`)}return fC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Dj,"lmdbDeleteRecords");function fC(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(fC,"createDeleteResponse")});var aT=g((Nme,hC)=>{"use strict";var Pj=C(),Ome=pr();function oT(e,t){let r=Object.create(null);if(t.length===1&&Pj.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(oT,"parseRow");function Mj(e,t,r,n){let s=oT(r,e);n.push(s)}a(Mj,"searchAll");function Uj(e,t,r,n){let s=oT(r,e);n[t]=s}a(Uj,"searchAllToMap");function vj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(vj,"iterateDBI");function Wo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Wo,"pushResults");function Bj(e,t,r,n,s,i){t.toString().endsWith(e)&&Wo(t,r,n,s,i)}a(Bj,"endsWith");function Hj(e,t,r,n,s,i){t.toString().includes(e)&&Wo(t,r,n,s,i)}a(Hj,"contains");function qj(e,t,r,n,s,i){t>e&&Wo(t,r,n,s,i)}a(qj,"greaterThanCompare");function xj(e,t,r,n,s,i){t>=e&&Wo(t,r,n,s,i)}a(xj,"greaterThanEqualCompare");function Gj(e,t,r,n,s,i){t<e&&Wo(t,r,n,s,i)}a(Gj,"lessThanCompare");function Fj(e,t,r,n,s,i){t<=e&&Wo(t,r,n,s,i)}a(Fj,"lessThanEqualCompare");hC.exports={parseRow:oT,searchAll:Mj,searchAllToMap:Uj,iterateDBI:vj,endsWith:Bj,contains:Hj,greaterThanCompare:qj,greaterThanEqualCompare:xj,lessThanCompare:Gj,lessThanEqualCompare:Fj,pushResults:Wo}});var Ec=g((Cme,AC)=>{"use strict";var Wi=Ve(),yme=G(),Xr=pr(),Lf=_t(),dt=Kr().LMDB_ERRORS_ENUM,Ime=W(),kj=C(),Df=aT(),{parseRow:$j}=Df,wme=require("lmdb"),{OVERFLOW_MARKER:pC,MAX_SEARCH_KEY_LENGTH:Vj}=Lf;function mC(e,t,r,n=!1,s=void 0,i=void 0){return Qo(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(mC,"iterateFullIndex");function uu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Qo(e,t,r,(u,d,f,E)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(T.values=!1,d.getRange(T).map(R=>({value:R}))):d.getRange(T)})}a(uu,"iterateRangeBetween");function Qo(e,t,r,n){let s=e.database||e,i=Wi.openDBI(s,r);i[Lf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wi.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Qo,"setupTransaction");function SC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(pC)){if(!s)if(r)s=Wi.openDBI(e,r);else{let l=Wi.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Wi.openDBI(e,l[_]),!s[Lf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(SC,"getOverflowCheck");function Yj(e,t,r,n=!1,s=void 0,i=void 0){if(Xr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Qo(e,t,t,(o,c,l)=>(Pf(r),r=_u(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>$j(_.value,r))))}a(Yj,"searchAll");function Kj(e,t,r,n=!1,s=void 0,i=void 0){if(Xr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);Pf(r),r=_u(e.database||e,r);let o=new Map;for(let{key:c,value:l}of mC(e,t,t,n,s,i))o.set(c,Df.parseRow(l,r));return o}a(Kj,"searchAllToMap");function Wj(e,t,r=!1,n=void 0,s=void 0){if(Xr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=mC(e,void 0,t,r,n,s),c=o.transaction,l=SC(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(Wj,"iterateDBI");function Qj(e,t){if(Xr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Wi.statDBI(e,t).entryCount}a(Qj,"countAll");function jj(e,t,r,n,s=!1,i=void 0,o=void 0){return Qi(e,r,n),Qo(e,t,r,(c,l,_,u)=>(n=Xr.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(jj,"equals");function zj(e,t,r){return Qi(e,t,r),Wi.openDBI(e,t).getValuesCount(r)}a(zj,"count");function Jj(e,t,r,n,s=!1,i=void 0,o=void 0){return Qi(e,r,n),Qo(e,null,r,(c,l)=>{n=Xr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(Jj,"startsWith");function Xj(e,t,r,n,s=!1,i=void 0,o=void 0){return TC(e,t,r,n,s,i,o,!0)}a(Xj,"endsWith");function TC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Qi(e,r,n),Qo(e,null,r,(l,_,u,d)=>{let f=SC(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(pC)?_.getValues(E,{transaction:l}).map(m=>{let S=f(E,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[Lf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(TC,"contains");function Zj(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!0,!1)}a(Zj,"greaterThan");function ez(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),uu(e,t,r,n,l,s,i,o,!1,!1)}a(ez,"greaterThanEqual");function tz(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!0)}a(tz,"lessThan");function rz(e,t,r,n,s=!1,i=void 0,o=void 0){Qi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),uu(e,t,r,l,n,s,i,o,!1,!1)}a(rz,"lessThanEqual");function nz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Xr.validateEnv(e),r===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(dt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(dt.END_VALUE_REQUIRED);if(n=Xr.convertKeyValueToWrite(n),s=Xr.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uu(e,t,r,n,s,i,o,c)}a(nz,"between");function sz(e,t,r,n){Xr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(Pf(r),r=_u(s,r),n===void 0)throw new Error(dt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Df.parseRow(c,r)),o}a(sz,"searchByHash");function iz(e,t,r){Xr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(iz,"checkHashExists");function oz(e,t,r,n,s=[]){return RC(e,t,r,n,s),gC(e,t,r,n,s).map(i=>i[1])}a(oz,"batchSearchByHash");function az(e,t,r,n,s=[]){RC(e,t,r,n,s);let i=new Map;for(let[o,c]of gC(e,t,r,n,s))i.set(o,c);return i}a(az,"batchSearchByHashToMap");function gC(e,t,r,n,s=[]){return Qo(e,t,t,(i,o,c)=>{r=_u(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,Df.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(gC,"batchHashSearch");function RC(e,t,r,n,s){if(Xr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(Pf(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(RC,"initializeBatchSearchByHash");function Pf(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Pf,"validateFetchAttributes");function Qi(e,t,r){if(Xr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(dt.SEARCH_VALUE_REQUIRED);if(r?.length>Vj)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(Qi,"validateComparisonFunctions");function _u(e,t){return t.length===1&&kj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wi.listDBIs(e)),t}a(_u,"setGetWholeRowAttributes");AC.exports={searchAll:Yj,searchAllToMap:Kj,count:zj,countAll:Qj,equals:jj,startsWith:Jj,endsWith:Xj,contains:TC,searchByHash:sz,setGetWholeRowAttributes:_u,batchSearchByHash:oz,batchSearchByHashToMap:az,checkHashExists:iz,iterateDBI:Wj,greaterThan:Zj,greaterThanEqual:ez,lessThan:tz,lessThanEqual:rz,between:nz}});var hc=g((Dme,IC)=>{var OC=require("lodash"),NC=rt(),he=require("joi"),cz=W(),{hdb_schema_table:du,checkValidTable:bC,hdb_table:yC,hdb_database:Mf}=Os(),{handleHDBError:lz,hdb_errors:uz}=se(),{getDatabases:_z}=(Re(),ie(Ge)),{HTTP_STATUS_CODES:dz}=uz,fz=he.object({database:Mf,schema:Mf,table:yC,search_attribute:du,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Ez=he.object({database:Mf,schema:Mf,table:yC,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(du,he.object())).optional(),sort:he.object({attribute:he.alternatives(du,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(du,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});IC.exports=function(e,t){let r=null;switch(t){case"value":r=NC.validateBySchema(e,fz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(bC("database",e.schema)),i(bC("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"),s&&(r=new Error(s.trim()));break;case"conditions":r=NC.validateBySchema(e,Ez);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=cz.checkGlobalSchemaTable(e.schema,e.table);if(s)return lz(new Error,s,dz.NOT_FOUND);let o=_z()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=OC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!OC.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var cT=g((Mme,wC)=>{"use strict";var hz=Ve(),pz=hc(),{getSchemaPath:mz}=ze();wC.exports=Sz;function Sz(e){let t=pz(e,"hashes");if(t)throw t;let r=mz(e.schema,e.table);return hz.openEnvironment(r,e.table)}a(Sz,"initialize")});var lT=g((vme,CC)=>{"use strict";var Tz=Ec(),gz=cT();CC.exports=Rz;async function Rz(e){let t=await gz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Tz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Rz,"lmdbGetDataByHash")});var pc=g((Hme,LC)=>{"use strict";var uT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};LC.exports=uT});var PC=g((Gme,DC)=>{"use strict";var xme=pc(),Az=Ec(),Oz=cT();DC.exports=Nz;async function Nz(e){let t=await Oz(e),r=global.hdb_schema[e.schema][e.table];return Az.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Nz,"lmdbSearchByHash")});var Xn=g((kme,MC)=>{"use strict";var _T=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};MC.exports=_T});var Uf=g((Vme,xC)=>{"use strict";var rr=Ec(),bz=Ve(),yz=W(),pe=_t(),jo=C(),Iz=ti(),UC=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:wz}=ze(),ii=jo.SEARCH_WILDCARDS;async function Cz(e,t,r){let n;e.schema===jo.SYSTEM_SCHEMA_NAME?n=Iz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=qC(e,n.hash_attribute,r,t);return BC(e,s,n.hash_attribute,r)}a(Cz,"prepSearch");async function BC(e,t,r,n){let s=wz(e.schema,e.table),i=await bz.openEnvironment(s,e.table),o=HC(i,e,t,r),c=o.transaction||i;if([pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,pe.SEARCH_TYPES.SEARCH_ALL,pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Lz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?vC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?vC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(BC,"executeSearch");function HC(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case pe.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.ENDS_WITH:case pe.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.STARTS_WITH:case pe.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case pe.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,l);case pe.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN:case pe.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.GREATER_THAN_EQUAL:case pe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN:case pe.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case pe.SEARCH_TYPES.LESS_THAN_EQUAL:case pe.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(HC,"searchByType");function vC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(vC,"createMapFromIterable");function Lz(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 n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Lz,"checkToFetchMore");function qC(e,t,r,n){if(yz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ii.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ii[0])<0&&s.indexOf(ii[1])<0)return c===!0?r===!0?pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:pe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:pe.SEARCH_TYPES.EQUALS;if(ii.indexOf(i)>=0&&ii.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(ii.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(ii.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(ii[0])||s.includes(ii[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(UC.UNKNOWN_SEARCH_TYPE)}else switch(n){case jo.VALUE_SEARCH_COMPARATORS.BETWEEN:return pe.SEARCH_TYPES.BETWEEN;case jo.VALUE_SEARCH_COMPARATORS.GREATER:return pe.SEARCH_TYPES.GREATER_THAN;case jo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return pe.SEARCH_TYPES.GREATER_THAN_EQUAL;case jo.VALUE_SEARCH_COMPARATORS.LESS:return pe.SEARCH_TYPES.LESS_THAN;case jo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return pe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(UC.UNKNOWN_SEARCH_TYPE)}}a(qC,"createSearchTypeFromSearchObject");xC.exports={executeSearch:BC,createSearchTypeFromSearchObject:qC,prepSearch:Cz,searchByType:HC}});var FC=g((Wme,GC)=>{"use strict";var Kme=Xn(),Dz=hc(),Pz=W(),Mz=C(),Uz=Uf();GC.exports=vz;function vz(e,t){if(!Pz.isEmpty(t)&&Mz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Dz(e,"value");if(n)throw n;return Uz.prepSearch(e,t,!0)}a(vz,"lmdbGetDataByValue")});var fu=g((zme,kC)=>{"use strict";var jme=Xn(),Bz=hc(),Hz=W(),qz=C(),xz=Uf();kC.exports=Gz;async function Gz(e,t){if(!Hz.isEmpty(t)&&qz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Bz(e,"value");if(n)throw n;return xz.prepSearch(e,t,!1)}a(Gz,"lmdbSearchByValue")});var VC=g((Zme,$C)=>{"use strict";var Xme=_t(),dT=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},fT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},ET=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};$C.exports={SearchByConditionsObject:dT,SearchCondition:fT,SortAttribute:ET}});var jC=g((nSe,QC)=>{"use strict";var tSe=VC().SearchByConditionsObject,Fz=Xn(),kz=hc(),hT=Ec(),vf=_t(),{Resource:rSe}=(Wn(),ie(ES)),WC=Uf(),$z=aT(),Vz=require("lodash"),{getSchemaPath:Yz}=ze(),YC=Ve(),{handleHDBError:Kz,hdb_errors:Wz}=se(),{HTTP_STATUS_CODES:Qz}=Wz,jz=1e8;QC.exports=zz;async function zz(e){let t=kz(e,"conditions");if(t)throw Kz(t,t.message,Qz.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=Yz(e.schema,e.table),n=await YC.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)YC.openDBI(n,_.search_attribute);let i=Vz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===vf.SEARCH_TYPES.EQUALS?_.estimated_count=hT.count(n,_.search_attribute,_.search_value):u===vf.SEARCH_TYPES.CONTAINS||u===vf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=jz}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await KC(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(WC.filterByType),d=u.length,f=hT.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>$z.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await KC(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=hT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(zz,"lmdbSearchByConditions");async function KC(e,t,r,n){let s=new Fz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===vf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,WC.searchByType(e,s,i,n).map(o=>o.value)}a(KC,"executeConditionSearch")});var Eu=g((iSe,zC)=>{"use strict";var Jz=C().OPERATIONS_ENUM,pT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Jz.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};zC.exports=pT});var mT=g((aSe,sL)=>{"use strict";var eL=Xn(),tL=Eu(),rL=fu(),nL=lu(),gr=C(),JC=W(),XC=Ve(),{getTransactionAuditStorePath:Xz,getSchemaPath:Zz}=ze(),ZC=G();sL.exports=eJ;async function eJ(e){try{if(JC.isEmpty(global.hdb_schema[e.schema])||JC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await tJ(e),await rJ(e);let t=Zz(e.schema,e.table);try{await XC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ZC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Xz(e.schema,e.table);await XC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ZC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(eJ,"lmdbDropTable");async function tJ(e){let t=new eL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await rL(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new tL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await nL(s)}a(tJ,"deleteAttributesFromSystem");async function rJ(e){let t=new eL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await rL(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&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new tL(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await nL(s)}catch(i){throw i}}a(rJ,"dropTableFromSystem")});var oL=g((lSe,iL)=>{"use strict";var nJ=require("fs-extra"),sJ=Xn(),iJ=pc(),oJ=Eu(),aJ=mT(),cJ=lu(),lJ=lT(),uJ=fu(),oi=C(),{getSchemaPath:_J}=ze(),{handleHDBError:dJ,hdb_errors:fJ}=se(),{HDB_ERROR_MSGS:EJ,HTTP_STATUS_CODES:hJ}=fJ;iL.exports=pJ;async function pJ(e){let t;try{t=await mJ(e.schema);let r=new sJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await uJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await aJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new oJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await cJ(s);let i=_J(t);await nJ.remove(i)}catch(r){throw r}}a(pJ,"lmdbDropSchema");async function mJ(e){let t=new iJ(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await lJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw dJ(new Error,EJ.SCHEMA_NOT_FOUND(e),hJ.NOT_FOUND,void 0,void 0,!0);return n}a(mJ,"validateDropSchema")});var hu=g((_Se,aL)=>{"use strict";var ST=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};aL.exports=ST});var gT=g((ESe,cL)=>{"use strict";var SJ=require("fs-extra"),Bf=Ve(),{getTransactionAuditStorePath:TJ}=ze(),TT=_t(),fSe=hu();cL.exports=gJ;async function gJ(e){let t;try{let r=TJ(e.schema,e.table);await SJ.mkdirp(r),t=await Bf.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{Bf.createDBI(t,TT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Bf.createDBI(t,TT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Bf.createDBI(t,TT.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(gJ,"createTransactionsAuditEnvironment")});var dL=g((pSe,_L)=>{"use strict";var RT=C(),lL=Ve(),RJ=Yo(),{getSystemSchemaPath:AJ,getSchemaPath:OJ}=ze(),NJ=ti(),bJ=yf(),AT=bf(),yJ=G(),IJ=gT(),NT=NJ.hdb_table,uL=[];for(let e=0;e<NT.attributes.length;e++)uL.push(NT.attributes[e].attribute);_L.exports=wJ;async function wJ(e,t){let r=OJ(t.schema,t.table),n=new AT(t.schema,t.table,RT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new AT(t.schema,t.table,RT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new AT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await lL.createEnvironment(r,t.table),e!==void 0){let o=await lL.openEnvironment(AJ(),RT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await RJ.insertRecords(o,NT.hash_attribute,uL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await OT(n),await OT(s),await OT(i)}await IJ(t)}catch(o){throw o}}a(wJ,"lmdbCreateTable");async function OT(e){try{await bJ(e)}catch(t){yJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(OT,"createAttribute")});var EL=g((SSe,fL)=>{"use strict";var CJ=tu(),LJ=ou(),DJ=wf(),pu=C(),PJ=Yo().updateRecords,MJ=Ve(),{getSchemaPath:UJ}=ze(),vJ=au(),BJ=G();fL.exports=HJ;async function HJ(e){try{let{schema_table:t,attributes:r}=CJ(e);LJ(e,r,t.hash_attribute),e.schema!==pu.SYSTEM_SCHEMA_NAME&&(r.includes(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await DJ(e.hdb_auth_header,t,r),s=UJ(e.schema,e.table),i=await MJ.openEnvironment(s,e.table),o=await PJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vJ(e,o)}catch(c){BJ.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:n,txn_time:o.txn_time}}catch(t){throw t}}a(HJ,"lmdbUpdateRecords")});var pL=g((gSe,hL)=>{"use strict";var qJ=C().OPERATIONS_ENUM,bT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=qJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};hL.exports=bT});var SL=g((OSe,mL)=>{"use strict";var ASe=pL(),xJ=tu(),GJ=ou(),FJ=wf(),mu=C(),kJ=Yo().upsertRecords,$J=Ve(),{getSchemaPath:VJ}=ze(),YJ=au(),KJ=G(),{handleHDBError:WJ,hdb_errors:QJ}=se();mL.exports=jJ;async function jJ(e){let t;try{t=xJ(e)}catch(l){throw WJ(l,l.message,QJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;GJ(e,n,r.hash_attribute),e.schema!==mu.SYSTEM_SCHEMA_NAME&&(n.includes(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(mu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await FJ(e.hdb_auth_header,r,n),i=VJ(e.schema,e.table),o=await $J.openEnvironment(i,e.table),c=await kJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await YJ(e,c)}catch(l){KJ.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(jJ,"lmdbUpsertRecords")});var gL=g((bSe,TL)=>{"use strict";var yT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};TL.exports=yT});var AL=g((ISe,RL)=>{"use strict";var IT=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};RL.exports=IT});var bL=g((LSe,NL)=>{"use strict";var wT=Ve(),{getTransactionAuditStorePath:zJ}=ze(),CSe=gL(),Su=_t(),JJ=W(),OL=AL(),XJ=require("util").promisify,ZJ=XJ(setTimeout),e2=1e4,t2=100;NL.exports=r2;async function r2(e){let t=zJ(e.schema,e.table),r=await wT.openEnvironment(t,e.table,!0),n=wT.listDBIs(r);wT.initializeDBIs(r,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new OL;do s=await n2(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await ZJ(t2);while(s.transactions_deleted>0);return i}a(r2,"deleteAuditLogsBefore");async function n2(e,t){let r=new OL;try{let n=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];JJ.isEmpty(c)||(s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Su.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>e2)break}return await s,r}catch(n){throw n}}a(n2,"deleteTransactions")});var IL=g((PSe,yL)=>{"use strict";var CT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};yL.exports=CT});var CL=g((vSe,wL)=>{"use strict";var s2=Xn(),i2=Eu(),USe=IL(),bs=C(),o2=W(),LT=Ve(),a2=ti(),c2=fu(),l2=lu(),{getSchemaPath:u2}=ze();wL.exports=_2;async function _2(e,t=!0){let r;e.schema===bs.SYSTEM_SCHEMA_NAME?r=a2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await f2(e),s=u2(e.schema,e.table),i=await LT.openEnvironment(s,e.table);return t===!0&&await d2(e,i,r.hash_attribute),LT.dropDBI(i,e.attribute),n}a(_2,"lmdbDropAttribute");async function d2(e,t,r){let n=LT.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(d2,"removeAttributeFromAllObjects");async function f2(e){let t=new s2(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]),n=Array.from(await c2(t)).filter(o=>o[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(o2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new i2(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return l2(i)}a(f2,"dropAttributeFromSystem")});var vL=g((qSe,UL)=>{"use strict";var DT=Ve(),mc=_t(),HSe=pr(),PT=C(),LL=W(),{getTransactionAuditStorePath:E2}=ze(),h2=Ec(),Hf=_c(),p2=G();UL.exports=m2;async function m2(e){let t=E2(e.schema,e.table),r=await DT.openEnvironment(t,e.table,!0),n=DT.listDBIs(r);DT.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case PT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DL(r,e.search_values);case PT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,T2(r,e.search_values,s);case PT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return S2(r,e.search_values);default:return DL(r)}}a(m2,"readAuditLog");function DL(e,t=[0,Date.now()]){LL.isEmpty(t[0])&&(t[0]=0),LL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new Hf,s))}a(DL,"searchTransactionsByTimestamp");function S2(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,ML(e,i))}return Object.fromEntries(r)}a(S2,"searchTransactionsByUsername");function T2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=h2.equals(e,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,mc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=ML(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);PL(l,"records",r,u,o),PL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(T2,"searchTransactionsByHashValues");function PL(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new Hf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Hf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(PL,"loopRecords");function ML(e,t){let r=[];try{let n=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Hf,i);r.push(o)}}catch(i){p2.warn(i)}return r}catch(n){throw n}}a(ML,"batchSearchTransactions")});var HL=g((kSe,BL)=>{"use strict";var{getSchemaPath:GSe}=ze(),FSe=Ve(),{database:g2}=(Re(),ie(Ge));BL.exports={writeTransaction:R2};async function R2(e,t,r){return g2({database:e,table:t}).transaction(r)}a(R2,"writeTransaction")});var FL=g((VSe,GL)=>{"use strict";var{getSchemaPath:qL}=ze(),xL=Ve();GL.exports={flush:A2,resetReadTxn:O2};async function A2(e,t){return(await xL.openEnvironment(qL(e,t),t.toString())).flushed}a(A2,"flush");async function O2(e,t){try{(await xL.openEnvironment(qL(e,t),t.toString())).resetReadTxn()}catch{}}a(O2,"resetReadTxn")});var YL=g((KSe,VL)=>{"use strict";var{Readable:N2}=require("stream"),{getDatabases:b2}=(Re(),ie(Ge)),{readSync:y2,openSync:I2,createReadStream:kL}=require("fs"),{open:w2}=require("lmdb"),$L=Ef(),C2=pf(),{AUDIT_STORE_OPTIONS:L2}=(xo(),ie(uI)),{INTERNAL_DBIS_NAME:D2,AUDIT_STORE_NAME:P2}=_t();VL.exports=U2;var MT=32768,M2=100;async function U2(e){let t=e.database||e.schema||"data",r=b2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=w2({noSync:!0,maxDbs:C2.MAX_DBS}),f,E=d.openDB(D2,new $L(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,R){R.encoding="binary",R.encoder=void 0;let U=d.openDB(T,R),B=u.openDB(T,R);for(let{key:v,version:P,value:V}of B.getRange({transaction:h,versions:B.useVersions}))f=U.put(v,V,P),m++%M2===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of u.getRange({transaction:h,start:!1}))if(s.some(U=>T.startsWith?.(U+"/"))){E.put(T,R);let[,U]=T.split("/"),B=!U,v=new $L(!B,B);await S(T,v)}e.include_audit&&await S(P2,Object.assign({},L2)),await f;let A=kL(d.path);return A.headers=l(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=I2(o.path);return o.transaction(()=>{let _=Buffer.alloc(MT);y2(c,_,0,MT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=kL(null,{fd:c,start:MT}),f=new N2.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(U2,"getBackup")});var QL=g((QSe,WL)=>{"use strict";var v2=G(),{handleHDBError:B2}=se(),H2=_w(),q2=yf(),x2=rT(),G2=oC(),F2=lu(),k2=lT(),$2=PC(),V2=FC(),Y2=fu(),K2=jC(),W2=oL(),Q2=dL(),j2=EL(),z2=SL(),J2=bL(),X2=mT(),Z2=CL(),e4=vL(),t4=HL(),KL=FL(),r4=YL(),UT=class extends H2{static{a(this,"LMDBBridge")}async searchByConditions(t){return K2(t)}async getDataByHash(t){return await k2(t)}async searchByHash(t){return await $2(t)}async getDataByValue(t,r){return await V2(t,r)}async searchByValue(t){return await Y2(t)}async createSchema(t){return await G2(t)}async dropSchema(t){return await W2(t)}async createTable(t,r){return await Q2(t,r)}async dropTable(t){return await X2(t)}async createAttribute(t){return await q2(t)}async createRecords(t){return await x2(t)}async updateRecords(t){return await j2(t)}async upsertRecords(t){try{return await z2(t)}catch(r){throw B2(r,null,null,v2.ERR,r)}}async deleteRecords(t){return await F2(t)}async dropAttribute(t){return await Z2(t)}async deleteAuditLogsBefore(t){return await J2(t)}async readAuditLog(t){return await e4(t)}writeTransaction(t,r,n){return t4.writeTransaction(t,r,n)}flush(t,r){return KL.flush(t,r)}resetReadTxn(t,r){return KL.resetReadTxn(t,r)}getBackup(t){return r4(t)}};WL.exports=UT});var nD={};$e(nD,{ResourceBridge:()=>HT});function qT({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 zL(e,t){let r=ys(e),n=qT(e,r);if(!r)throw new Zn.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Ze(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&rf(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ys(e){let t=e.database||e.schema||s4,r=es()[t];if(!r)throw(0,Zn.handleHDBError)(new Error,n4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JL(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*XL(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var ZL,qf,Zn,eD,tD,ts,vT,BT,rD,n4,s4,i4,o4,jL,HT,sD=Ne(()=>{"use strict";ZL=q(QL()),qf=q(hc()),Zn=q(se());Re();eD=q(tu()),tD=q(ou()),ts=q(C()),vT=q(si()),BT=q(Jn()),rD=q(W());$o();nf();({HDB_ERROR_MSGS:n4}=Zn.hdb_errors),s4="data",i4=1e4,o4=10,HT=class extends ZL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),jL=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,qf.default)(t,"conditions");if(r)throw(0,Zn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ys(t);if(!n)throw new Zn.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:qT(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Zn.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ft({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ys(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ys(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ys(t).dropTable()}createSchema(t){return Tu({database:t.schema,table:null}),vT.signalSchemaChange(new BT.SchemaEventMsg(process.pid,ts.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xT(t.schema),vT.signalSchemaChange(new BT.SchemaEventMsg(process.pid,ts.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,jL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,eD.default)(t);(0,tD.default)(t,n,r.primaryKey);let s,i=es()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ze(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=rf(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=es()[t.schema][t.table],n={user:t.hdb_user};return Ze(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return JL(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=es()[t.schema][t.table];if(!r.createdTimeProperty)throw new Zn.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ts.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,rD.async_set_timeout)(o4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%i4===0&&await _();return l.length>0&&await _(),s?JL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,qf.default)(t,"hashes");if(r)throw r;return zL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zL(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ts.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,qf.default)(t,"value");if(n)throw n;let s=ys(t);if(!s)throw new Zn.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===ts.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:qT(t,s)})}async getDataByValue(t,r){let n=new Map,s=ys(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){ys({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ys(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ys(t),n={};switch(t.search_type){case ts.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[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 n;case ts.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of XL(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return XL(r,t.search_values?.[0],t.search_values?.[1])}}};a(qT,"getSelect");a(zL,"getRecords");a(ys,"getTable");a(JL,"createDeleteResponse");a(XL,"groupRecordsInHistory")});var In=g((eTe,iD)=>{"use strict";var{ResourceBridge:a4}=(sD(),ie(nD)),c4=J();c4.initSync();var xf;function l4(){return xf||(xf=new a4,xf)}a(l4,"getBridge");iD.exports=l4()});var lD=g((rTe,cD)=>{"use strict";var oD=require("lodash"),gu=require("mathjs"),u4=require("jsonata"),aD=W();cD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?oD.uniqWith(e,oD.isEqual):e,searchJSON:_4,mad:Ru.bind(null,gu.mad),mean:Ru.bind(null,gu.mean),mode:Ru.bind(null,gu.mode),prod:Ru.bind(null,gu.prod),median:Ru.bind(null,gu.median)};function Ru(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ru,"aggregateFunction");function _4(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(aD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),aD.isEmpty(this.__ala__.res[r])){let n=u4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(_4,"searchJSON")});var _D=g((sTe,uD)=>{"use strict";var Rt=require("moment"),GT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;uD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(GT),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(GT),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(GT)}});var hD=g((iTe,ED)=>{"use strict";var d4=require("@turf/area"),f4=require("@turf/length"),E4=require("@turf/circle"),h4=require("@turf/difference"),p4=require("@turf/distance"),m4=require("@turf/boolean-contains"),S4=require("@turf/boolean-equal"),T4=require("@turf/boolean-disjoint"),g4=require("@turf/helpers"),dD=C(),Te=W(),ai=G();ED.exports={geoArea:R4,geoLength:A4,geoCircle:O4,geoDifference:N4,geoDistance:fD,geoNear:b4,geoContains:y4,geoEqual:I4,geoCrosses:w4,geoConvert:C4};function R4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return d4.default(e)}catch(t){return ai.trace(t,e),NaN}}a(R4,"geoArea");function A4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return f4.default(e,{units:t||"kilometers"})}catch(r){return ai.trace(r,e),NaN}}a(A4,"geoLength");function O4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return E4.default(e,t,{units:r||"kilometers"})}catch(n){return ai.trace(n,e,t),NaN}}a(O4,"geoCircle");function N4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return h4(e,t)}catch(r){return ai.trace(r,e,t),NaN}}a(N4,"geoDifference");function fD(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return p4.default(e,t,{units:r||"kilometers"})}catch(n){return ai.trace(n,e,t),NaN}}a(fD,"geoDistance");function b4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return fD(e,t,n)<=r}catch(s){return ai.trace(s,e,t),!1}}a(b4,"geoNear");function y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return m4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(y4,"geoContains");function I4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return S4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(I4,"geoEqual");function w4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!T4.default(e,t)}catch(r){return ai.trace(r,e,t),!1}}a(w4,"geoCrosses");function C4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(dD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(dD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),g4[t](e,r)}a(C4,"geoConvert")});var Gf=g((aTe,pD)=>{var zo=lD(),Zr=_D(),Is=hD();pD.exports=e=>{e.aggr.mad=e.aggr.MAD=zo.mad,e.aggr.mean=e.aggr.MEAN=zo.mean,e.aggr.mode=e.aggr.MODE=zo.mode,e.aggr.prod=e.aggr.PROD=zo.prod,e.aggr.median=e.aggr.MEDIAN=zo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=zo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=zo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Zr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Zr.current_time,e.fn.extract=e.fn.EXTRACT=Zr.extract,e.fn.date=e.fn.DATE=Zr.date,e.fn.date_format=e.fn.DATE_FORMAT=Zr.date_format,e.fn.date_add=e.fn.DATE_ADD=Zr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Zr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Zr.date_diff,e.fn.now=e.fn.NOW=Zr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Zr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Zr.get_server_time,e.fn.getdate=e.fn.GETDATE=Zr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Zr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Is.geoNear}});var gD=g((cTe,TD)=>{"use strict";var Au=require("lodash"),Rr=require("alasql");Rr.options.cache=!1;var L4=Gf(),mD=require("clone"),Ff=require("recursive-iterator"),fe=G(),De=W(),Sc=In(),D4=C(),{hdb_errors:P4}=se(),{getDatabases:SD}=(Re(),ie(Ge)),M4="IS NULL",rs="There was a problem performing this search. Please check the logs and try again.";L4(Rr);var FT=class{static{a(this,"SQLSearch")}constructor(t,r){if(De.isEmpty(t))throw fe.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(),De.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!De.isEmptyOrZeroLength(n))return fe.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw fe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),fe.error(n),new Error(rs)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw fe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),fe.error(n),new Error(rs)}if(Object.keys(this.data).length===0)return fe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw fe.error("Error thrown from processJoins in SQLSearch class method search."),fe.error(n),new Error(rs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw fe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),fe.error(n),new Error(rs)}try{return t=await this._finalSQL(),t}catch(n){throw fe.error("Error thrown from finalSQL in SQLSearch class method search."),fe.error(n),new Error(rs)}}_getColumns(){let t=new Ff(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(mD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Au.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=SD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(De.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ff(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!De.isEmpty(r)&&r.right)if(De.isNotEmptyAndHasValue(r.right.value)){let n=De.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Rr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=De.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Rr.yy.LogicValue({value:i}):n instanceof Rr.yy.StringValue&&De.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Rr.yy.NumValue({value:i}))});if(t){fe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ff(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!De.isEmpty(D4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(De.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(De.isEmptyOrZeroLength(r.left.columnid)||De.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(De.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"=":!De.isEmpty(r.right.value)||!De.isEmpty(r.left.value)?n.add(De.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].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,...n])}}}_setAliasesForColumns(){if(De.isEmptyOrZeroLength(this.all_table_attributes)&&De.isEmptyOrZeroLength(this.statement.from)&&De.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Au.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(De.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);De.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(De.isEmptyOrZeroLength(this.all_table_attributes)&&!De.isEmptyOrZeroLength(this.columns.columns))return t;if(De.isEmptyOrZeroLength(this.all_table_attributes)&&De.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Rr.promise(r)}catch(r){throw fe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),fe.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(mD(n))})}_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,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(De.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(M4)>-1&&this.tables.forEach(s=>{let i={columnid:SD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Au.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!De.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!De.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await Sc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(u),new Error(rs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await Sc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(u),new Error(rs)}else if(!De.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!De.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Sc.getDataByValue(c,E.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(u),new Error(rs)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await Sc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(u),new Error(rs)}}}_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 Rr.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(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.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 n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Rr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Rr.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 s=t.is_func?new Rr.yy.FuncValue:new Rr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.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={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${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 "${m}.${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 l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";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 u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=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(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Rr.promise(h,t),t=null}catch(E){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.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 m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Au.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=m.length;S<A;S++){let T=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Ff(this.columns);for(let{node:i}of s)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)&&n.push(o)}}n=Au.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw fe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),fe.error(i),new Error(rs)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Sc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let m=s.columns[h],S=E[m]===void 0?null:E[m];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),fe.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(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();fe.trace(`Final SQL: ${s}`),n=await Rr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),fe.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw fe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),fe.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return fe.error(P4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),fe.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${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 l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Sc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(rs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};TD.exports=FT});var Ar=g((uTe,RD)=>{"use strict";var U4=lw();RD.exports={searchByConditions:B4,searchByHash:H4,searchByValue:q4,search:x4};var kT=In(),{transformReq:$T}=W(),v4=gD();async function B4(e){return $T(e),kT.searchByConditions(e)}a(B4,"searchByConditions");async function H4(e){$T(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of kT.searchByHash(e))r&&t.push(r);return t}a(H4,"searchByHash");async function q4(e){$T(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of kT.searchByValue(e))t.push(r);return t}a(q4,"searchByValue");function x4(e,t){try{let r=new U4(e);r.validate(),new v4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(x4,"search")});var ci=g((dTe,bD)=>{"use strict";var Ou=require("crypto"),G4=J(),{CONFIG_PARAMS:F4}=C(),OD="aes-256-cbc",k4=32,$4=16,VT=64,ND=32,V4=VT+ND,AD=new Map;bD.exports={encrypt:Y4,decrypt:K4,createNatsTableStreamName:W4};function Y4(e){let t=Ou.randomBytes(k4),r=Ou.randomBytes($4),n=Ou.createCipheriv(OD,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(Y4,"encrypt");function K4(e){let t=e.substr(0,VT),r=e.substr(VT,ND),n=e.substr(V4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Ou.createDecipheriv(OD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(K4,"decrypt");function W4(e,t){let r=G4.get(F4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=AD.get(r);return n||(n=Ou.createHash("md5").update(r).digest("hex"),AD.set(r,n)),n}a(W4,"createNatsTableStreamName")});var ji=g((hTe,ID)=>{"use strict";var ETe=Ar(),kf=G(),yD=Nf(),Q4=ci(),$f=W(),{handleHDBError:Vf,hdb_errors:j4}=se(),{HDB_ERROR_MSGS:Yf,HTTP_STATUS_CODES:YT}=j4,z4=J();z4.initSync();var{getDatabases:KT}=(Re(),ie(Ge));ID.exports={describeAll:J4,describeTable:Kf,describeSchema:X4};async function J4(e){try{let t=$f.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=KT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await Kf({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await Kf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){kf.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return kf.error("Got an error in describeAll"),kf.error(t),Vf(new Error,Yf.DESCRIBE_ALL_ERR)}}a(J4,"describeAll");async function Kf(e,t){$f.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(s=e.hdb_user.role.permission[r].tables[n].attribute_permissions);let i=yD.describe_table(e);if(i)throw i;let c=KT()[r];if(!c)throw Vf(new Error,Yf.SCHEMA_NOT_FOUND(e.schema),YT.NOT_FOUND);let l=c[n];if(!l)throw Vf(new Error,Yf.TABLE_NOT_FOUND(e.schema,e.table),YT.NOT_FOUND);function _(f){u.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 u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=Q4.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){kf.warn(`unable to stat table dbi due to ${f}`)}return d}a(Kf,"descTable");async function X4(e){$f.transformReq(e);let t=yD.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 n=e.schema.toString(),i=KT()[n];if(!i)throw Vf(new Error,Yf.SCHEMA_NOT_FOUND(e.schema),YT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),$f.isEmpty(l)||l.describe){let _=await Kf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(X4,"describeSchema")});var wn=g((TTe,PD)=>{var Z4=ti(),{callbackify:CD,promisify:e3}=require("util"),{getDatabases:LD}=(Re(),ie(Ge));PD.exports={setSchemaDataToGlobal:wD,getTableSchema:t3,getSystemSchema:r3,setSchemaDataToGlobalAsync:e3(wD)};var DD=ji(),mTe=CD(DD.describeAll),STe=CD(DD.describeTable);function wD(e){global.hdb_schema=LD(),e&&e()}a(wD,"setSchemaDataToGlobal");function t3(e,t,r){let n=LD()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(t3,"getTableSchema");function r3(){return Z4}a(r3,"getSystemSchema")});var Or=g((RTe,BD)=>{"use strict";var Qf=WS(),jt=W(),n3=require("util"),jf=In(),s3=wn(),MD=G(),{handleHDBError:Jo,hdb_errors:i3}=se(),{HTTP_STATUS_CODES:Xo}=i3,o3=n3.promisify(s3.getTableSchema),a3="updated",UD="inserted",vD="upserted";BD.exports={insert:l3,update:u3,upsert:_3,validation:c3,flush:d3};async function c3(e){if(jt.isEmpty(e))throw new Error("invalid update parameters defined.");if(jt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(jt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await o3(e.schema,e.table),r=Qf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&jt.isEmptyOrZeroLength(c[n]))throw MD.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(!jt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw MD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!jt.isEmpty(c[n])&&c[n]!==""&&s.has(jt.autoCast(c[n]))&&(c.skip=!0),s.add(jt.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(c3,"validation");async function l3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Qf(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);jt.transformReq(e);let r=jt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await jf.createRecords(e);return Wf(UD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(l3,"insertData");async function u3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Qf(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);jt.transformReq(e);let r=jt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await jf.updateRecords(e);return jt.isEmpty(n.existing_rows)?Wf(a3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Wf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(u3,"updateData");async function _3(e){if(e.operation!=="upsert")throw Jo(new Error,"invalid operation, must be upsert",Xo.INTERNAL_SERVER_ERROR);let t=Qf(e);if(t)throw Jo(new Error,t.message,Xo.BAD_REQUEST);jt.transformReq(e);let r=jt.checkSchemaTableExist(e.schema,e.table);if(r)throw Jo(new Error,r,Xo.BAD_REQUEST);let n=await jf.upsertRecords(e);return Wf(vD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(_3,"upsertData");function Wf(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===UD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===vD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Wf,"returnObject");function d3(e){return jt.transformReq(e),jf.flush(e.schema,e.table)}a(d3,"flush")});var QT=g((OTe,xD)=>{var f3=rt(),WT=require("joi"),{hdb_table:E3,hdb_database:HD}=Os(),qD={schema:HD,database:HD,table:E3},h3={date:WT.date().iso().required()},p3={timestamp:WT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};xD.exports=function(e,t){let r=t==="timestamp"?{...qD,...p3}:{...qD,...h3},n=WT.object(r);return f3.validateBySchema(e,n)}});var kD=g((NTe,FD)=>{var m3=rt(),jT=require("joi"),{hdb_table:S3,hdb_database:GD}=Os(),T3=jT.object({schema:GD,database:GD,table:S3,hash_values:jT.array().required(),ids:jT.array()});FD.exports=function(e){return m3.validateBySchema(e,T3)}});var ZT=g((bTe,$D)=>{"use strict";var zT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},JT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},XT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};$D.exports={InsertObject:zT,NoSQLSeachObject:JT,DeleteResponseObject:XT}});var ta=g((ITe,QD)=>{"use strict";var YD=QT(),g3=kD(),Zo=W(),VD=require("moment"),KD=G(),{promisify:R3,callbackify:A3}=require("util"),ea=C(),O3=wn(),eg=R3(O3.getTableSchema),tg=In(),{DeleteResponseObject:N3}=ZT(),{handleHDBError:zi,hdb_errors:b3}=se(),{HDB_ERROR_MSGS:zf,HTTP_STATUS_CODES:Ji}=b3,y3="records successfully deleted",I3=A3(WD);QD.exports={delete:I3,deleteRecord:WD,deleteFilesBefore:w3,deleteAuditLogsBefore:C3};async function w3(e){let t=YD(e,"date");if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),!VD(e.date,VD.ISO_8601).isValid())throw zi(new Error,zf.INVALID_DATE,Ji.BAD_REQUEST,ea.LOG_LEVELS.ERROR,zf.INVALID_DATE,!0);let n=Zo.checkSchemaTableExist(e.schema,e.table);if(n)throw zi(new Error,n,Ji.NOT_FOUND,ea.LOG_LEVELS.ERROR,n,!0);let s=await tg.deleteRecordsBefore(e);if(await eg(e.schema,e.table),KD.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(w3,"deleteFilesBefore");async function C3(e){let t=YD(e,"timestamp");if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);if(Zo.transformReq(e),isNaN(e.timestamp))throw zi(new Error,zf.INVALID_VALUE("Timestamp"),Ji.BAD_REQUEST,ea.LOG_LEVELS.ERROR,zf.INVALID_VALUE("Timestamp"),!0);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);let n=await tg.deleteAuditLogsBefore(e);return await eg(e.schema,e.table),KD.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(C3,"deleteAuditLogsBefore");async function WD(e){e.ids&&(e.hash_values=e.ids);let t=g3(e);if(t)throw zi(t,t.message,Ji.BAD_REQUEST,void 0,void 0,!0);Zo.transformReq(e);let r=Zo.checkSchemaTableExist(e.schema,e.table);if(r)throw zi(new Error,r,Ji.NOT_FOUND,ea.LOG_LEVELS.ERROR,r,!0);try{await eg(e.schema,e.table);let n=await tg.deleteRecords(e);return Zo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${y3}`),n}catch(n){if(n.message===ea.SEARCH_NOT_FOUND_MESSAGE){let s=new N3;return s.message=ea.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(WD,"deleteRecord")});var Jf=g((CTe,JD)=>{var L3=require("crypto"),jD=9;function D3(e){let t=M3(jD),r=zD(e+t);return t+r}a(D3,"createHash");function P3(e,t){let r=e?.substr(0,jD),n=r+zD(t+r);return e===n}a(P3,"validateHash");function M3(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(M3,"generateSalt");function zD(e){return L3.createHash("md5").update(e).digest("hex")}a(zD,"md5");JD.exports={hash:D3,validate:P3}});var ZD=g((DTe,XD)=>{var rg=rt(),nr={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 U3(e){return nr.password.presence=!0,nr.username.presence=!0,nr.role.presence=!0,nr.active.presence=!0,rg.validateObject(e,nr)}a(U3,"addUserValidation");function v3(e){return nr.password.presence=!1,nr.username.presence=!0,nr.role.presence=!1,nr.active.presence=!1,rg.validateObject(e,nr)}a(v3,"alterUserValidation");function B3(e){return nr.password.presence=!1,nr.username.presence=!0,nr.role.presence=!1,nr.active.presence=!1,rg.validateObject(e,nr)}a(B3,"dropUserValidation");XD.exports={addUserValidation:U3,alterUserValidation:v3,dropUserValidation:B3}});var et=g((UTe,tP)=>{"use strict";var{platform:MTe}=require("os"),H3="nats-server.zip",ng="nats-server",q3=process.platform==="win32"?`${ng}.exe`:ng,sg="HDB",x3=/^[^\s.,*>]+$/,eP="__request__",G3=a(e=>`${e}.${eP}`,"REQUEST_SUBJECT"),F3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},k3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},$3={HUB:"hub.pid",LEAF:"leaf.pid"},V3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Y3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:sg,deliver_subject:"__HDB__.WORKQUEUE"},K3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:sg,deliver_subject:"HDB.SCHEMAQUEUE"},W3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:sg,deliver_subject:"HDB.USERQUEUE"},Q3={SUCCESS:"success",ERROR:"error"},j3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},z3={TXN:"txn",MSGID:"msgid"},Tc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},J3={[Tc.ERR]:1,[Tc.WRN]:2,[Tc.INF]:3,[Tc.DBG]:4,[Tc.TRC]:5},X3={debug:"-D",trace:"-DVV"};tP.exports={NATS_SERVER_ZIP:H3,NATS_SERVER_NAME:ng,NATS_BINARY_NAME:q3,PID_FILES:$3,NATS_CONFIG_FILES:k3,SERVER_SUFFIX:V3,WORK_QUEUE_CONSUMER_NAMES:Y3,SCHEMA_QUEUE_CONSUMER_NAMES:K3,USER_QUEUE_CONSUMER_NAMES:W3,NATS_TERM_CONSTRAINTS_RX:x3,REQUEST_SUFFIX:eP,UPDATE_REMOTE_RESPONSE_STATUSES:Q3,CLUSTER_STATUS_STATUSES:j3,REQUEST_SUBJECT:G3,SUBJECT_PREFIXES:z3,MSG_HEADERS:F3,LOG_LEVELS:Tc,LOG_LEVEL_FLAGS:X3,LOG_LEVEL_HIERARCHY:J3}});var ig=g((BTe,rP)=>{"use strict";var Z3={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
6
6
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
7
|
-
`)},Z3="certificate.pem",eX="privateKey.pem",tX="ca.pem";nP.exports={CERTIFICATE_VALUES:X3,CERTIFICATE_PEM_NAME:Z3,PRIVATEKEY_PEM_NAME:eX,CA_PEM_NAME:tX}});var og=g((qTe,cP)=>{"use strict";var aP=require("fs-extra"),le=require("joi"),rX=require("os"),{boolean:De,string:Xr,number:Gt,array:ig}=le.types(),{totalmem:sP}=require("os"),ra=require("path"),nX=G(),Xf=W(),HTe=sg(),iP=w(),sX=rt(),oP="log",iX="components",oX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",aX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",cX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",lX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",uX="rootPath config parameter is undefined",_X="clustering.enabled config parameter is undefined",na=Gt.min(0).required(),Zf=ig.items({host:Xr.required(),port:na}).empty(null),ws;cP.exports={configValidator:dX,routesValidator:SX,route_constraints:Zf};function dX(e){if(ws=e.rootPath,Xf.isEmpty(ws))throw uX;let t=De.required(),r=Gt.min(0).max(1e3).empty(null).default(mX),n=Xr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Nu),s=Xr.optional().empty(null),i=Xr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=le.string().empty(null).default(Nu),c=le.custom(EX).empty(null).default(Nu),l=e.clustering?.enabled;if(Xf.isEmpty(l))throw _X;let _;return l===!0?_=le.object({enabled:t,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:na,routes:Zf}).required()}).required(),leafNodes:le.object({network:le.object({port:na}).required()}).required(),network:le.object({port:na}).required()}).required(),leafServer:le.object({network:le.object({port:na,routes:Zf}).required(),streams:le.object({maxAge:Gt.min(120).allow(null).optional(),maxBytes:Gt.min(1).allow(null).optional(),maxMsgs:Gt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:De.optional(),databaseLevel:De.optional(),tls:le.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required(),verify:De.optional()}),user:Xr.optional().empty(null)}).required():_=le.object({enabled:t,tls:le.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:De.required()})}).required(),le.object({authentication:le.object({authorizeLocal:De,cacheTTL:Gt.required(),enableSessions:De}),analytics:le.object({aggregatePeriod:Gt}),componentsRoot:n.optional(),clustering:_,localStudio:le.object({enabled:t}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:De,logSuccessful:De}),file:De.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:De.optional(),compress:De.optional(),interval:Xr.custom(pX).optional().empty(null),maxSize:Xr.custom(hX).optional().empty(null),path:Xr.optional().empty(null).default(Nu)}).required(),root:n,stdStreams:De.required(),auditLog:De.required()}).required(),operationsApi:le.object({network:le.object({cors:De.optional(),corsAccessList:ig.optional(),headersTimeout:Gt.min(1).optional(),keepAliveTimeout:Gt.min(1).optional(),port:Gt.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Nu),securePort:Gt.optional().empty(null),timeout:Gt.min(1).optional()}).optional(),tls:le.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Xr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:na,securePort:na,mtls:le.alternatives([De.optional(),le.object({user:Xr.optional(),certificateAuthority:s,required:De.optional()})])}).required(),webSocket:De.optional(),requireAuthentication:De.optional()}),http:le.object({compressionThreshold:Gt.optional(),cors:De.optional(),corsAccessList:ig.optional(),headersTimeout:Gt.min(1).optional(),port:Gt.min(0).optional().empty(null),securePort:Gt.min(0).optional().empty(null),mtls:le.alternatives([De.optional(),le.object({user:Xr.optional(),certificateAuthority:s,required:De.optional()})])}).required(),threads:le.alternatives(r.optional(),le.object({count:r.optional(),debug:De.optional()})),maxHeapMemory:Gt.min(0).optional(),storage:le.object({writeAsync:De.required(),overlappingSync:De.optional(),caching:De.optional(),compression:De.optional(),noReadAhead:De.optional(),path:c,prefetchWrites:De.optional()}).required(),ignoreScripts:De.optional(),tls:le.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Xr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(dX,"configValidator");function fX(e){return aP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(fX,"doesPathExist");function EX(e,t){le.assert(e,Xr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=fX(e);if(r)return t.message(r)}a(EX,"validatePath");function hX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(oX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(cX):e}a(hX,"validateRotationMaxSize");function pX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(aX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(lX):e}a(pX,"validateRotationInterval");function mX(e,t){let r=t.state.path.join("."),n=rX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||sP();return i=Math.round(Math.min(i,sP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),nX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(mX,"setDefaultThreads");function Nu(e,t){let r=t.state.path.join(".");if(!Xf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Xf.isEmpty(ws))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ra.join(ws,iX);case"logging.root":return ra.join(ws,oP);case"clustering.leafServer.streams.path":return ra.join(ws,"clustering","leaf");case"storage.path":let n=ra.join(ws,iP.LEGACY_DATABASES_DIR_NAME);return aP.existsSync(n)?n:ra.join(ws,iP.DATABASES_DIR_NAME);case"logging.rotation.path":return ra.join(ws,oP);case"operationsApi.network.domainSocket":return r==null?null:ra.join(ws,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Nu,"setDefaultRoot");function SX(e){let t=le.object({routes:Zf});return sX.validateBySchema({routes:e},t)}a(SX,"routesValidator")});var Et=g((FTe,mP)=>{"use strict";var en=w(),Ft=W(),Dt=G(),{configValidator:TX,routesValidator:lP}=og(),Or=require("fs-extra"),gX=require("yaml"),ns=require("path"),RX=require("is-number"),_P=require("properties-reader"),AX=require("lodash"),{handleHDBError:OX}=se(),{HTTP_STATUS_CODES:NX,HDB_ERROR_MSGS:eE}=Vr(),GTe=require("minimist"),{server:bX}=(fr(),ie(Ho)),{DATABASES_PARAM_CONFIG:bu,CONFIG_PARAMS:Zr,CONFIG_PARAM_MAP:ss}=en,yX="Unable to get config value because config is uninitialized",IX="Config successfully initialized",wX="Error backing up config file",CX="Empty parameter sent to getConfigValue",dP=ns.join(en.PACKAGE_ROOT,"config","yaml",en.HDB_DEFAULT_CONFIG_FILE),LX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",uP={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"},tE,Pt,rE;mP.exports={createConfigFile:DX,getDefaultConfig:PX,getConfigValue:EP,initConfig:cg,flattenConfig:gc,updateConfigValue:hP,updateConfigObject:UX,getConfiguration:HX,setConfiguration:qX,readConfigFile:ug,getClusteringRoutes:xX,initOldConfig:pP,getConfigFromFile:GX,getConfigFilePath:sa,addConfig:FX,deleteConfigFromFile:kX,getConfigObj:$X};function DX(e){let t=Xi(dP);tE=gc(t.toJSON());let r;for(let o in e){let c=ss[o.toLowerCase()];if(c===Zr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=ag(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Dt.error(u)}}}r&&fP(t,r),lg(t);let n=t.toJSON();Pt=gc(n);let s=t.getIn(["rootPath"]),i=ns.join(s,en.HDB_CONFIG_FILE);Or.createFileSync(i),Or.writeFileSync(i,String(t)),Dt.trace(`Config file written to ${i}`)}a(DX,"createConfigFile");function fP(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ft.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(bu.TABLES))for(let i in n[s][bu.TABLES])for(let o in n[s][bu.TABLES][i]){let c=n[s][bu.TABLES][i][o],l=[Zr.DATABASES,s,bu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Zr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Dt.error("Error parsing schemas CLI/env config arguments",n)}}a(fP,"setSchemasConfig");function PX(e){if(tE===void 0){let r=Xi(dP);tE=gc(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return tE[t.toLowerCase()]}a(PX,"getDefaultConfig");function EP(e){if(e==null){Dt.error(CX);return}if(Pt===void 0){Dt.trace(yX);return}let t=ss[e.toLowerCase()];if(t!==void 0)return Pt[t.toLowerCase()]}a(EP,"getConfigValue");function sa(e=Ft.getPropsFilePath()){let t=Ft.getEnvCliRootPath();return t?ns.join(t,en.HDB_CONFIG_FILE):_P(e).get(en.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(sa,"getConfigFilePath");function cg(e=!1){if(Pt===void 0||e){let t;if(!Ft.noBootFile()){t=Ft.getPropsFilePath();try{Or.accessSync(t,Or.constants.F_OK|Or.constants.R_OK)}catch(i){throw Dt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=sa(t),n;if(r.includes("config/settings.js"))try{pP(r);return}catch(i){if(i.code!==en.NODE_ERROR_CODES.ENOENT)throw i}try{n=Xi(r)}catch(i){if(i.code===en.NODE_ERROR_CODES.ENOENT){Dt.trace(`HarperDB config file not found at ${r}.
|
|
8
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Dt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}MX(n,r),lg(n);let s=n.toJSON();if(bX.config=s,Pt=gc(s),Pt.logging_rotation_rotate)for(let i in uP)Pt[i]&&Dt.error(`Config ${uP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Dt.trace(IX)}}a(cg,"initConfig");function MX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Dt.trace("Updating config file with missing config params"),Or.writeFileSync(t,String(e)))}a(MX,"checkForUpdatedConfig");function lg(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=TX(t);if(r.error)throw eE.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):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),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(lg,"validateConfig");function UX(e,t){Pt===void 0&&(Pt={});let r=ss[e.toLowerCase()];if(r===void 0){Dt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Pt[r.toLowerCase()]=t}a(UX,"updateConfigObject");function hP(e,t,r=void 0,n=!1,s=!1,i=!1){Pt===void 0&&cg();let o=EP(ss.hdb_root),c=ns.join(o,en.HDB_CONFIG_FILE),l=Xi(c),_;if(r===void 0&&e.toLowerCase()===Zr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=ag(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===Zr.HTTP_SECUREPORT&&r[f]===Pt[Zr.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===Zr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Pt[Zr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===Zr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=en.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=ag(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(A){Dt.error(A)}}}_&&fP(l,_),lg(l);let u=l.getIn(["rootPath"]),d=ns.join(u,en.HDB_CONFIG_FILE);n===!0&&vX(c,u),Or.writeFileSync(d,String(l)),s&&(Pt=gc(l.toJSON())),Dt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(hP,"updateConfigValue");function vX(e,t){try{let r=ns.join(t,"backup",`${en.HDB_CONFIG_FILE}.bak`);Or.copySync(e,r),Dt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Dt.error(wX),Dt.error(r)}}a(vX,"backupConfigFile");var BX=["databases"];function gc(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)),rE=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!BX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Zr[l.toUpperCase()]&&ss[l]&&(s[ss[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(gc,"flattenConfig");function ag(e,t){if(e===Zr.CLUSTERING_NODENAME||e===Zr.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(RX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ft.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 Ft.autoCast(t)}a(ag,"castConfigValue");function HX(){let e=Ft.getPropsFilePath(),t=sa(e);return Xi(t).toJSON()}a(HX,"getConfiguration");async function qX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return hP(void 0,void 0,s,!0),LX}catch(i){throw typeof i=="string"||i instanceof String?OX(i,i,NX.BAD_REQUEST,void 0,void 0,!0):i}}a(qX,"setConfiguration");function ug(){let e=Ft.getPropsFilePath();try{Or.accessSync(e,Or.constants.F_OK|Or.constants.R_OK)}catch(n){if(!Ft.noBootFile())throw Dt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sa(e);return Xi(t).toJSON()}a(ug,"readConfigFile");function Xi(e){return gX.parseDocument(Or.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xi,"parseYamlDoc");function xX(){let e=ug(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ft.isEmptyOrZeroLength(t)?[]:t;let r=lP(t);if(r)throw eE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ft.isEmptyOrZeroLength(n)?[]:n;let s=lP(n);if(s)throw eE.CONFIG_VALIDATION(s.message);if(!Ft.isEmptyOrZeroLength(n)&&!Ft.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Ft.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw eE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(xX,"getClusteringRoutes");function pP(e){let t=_P(e);Pt={};for(let r in ss){let n=t.get(r.toUpperCase());if(Ft.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ss[r].toLowerCase();s===Zr.LOGGING_ROOT?Pt[s]=ns.dirname(n):Pt[s]=n}return Pt}a(pP,"initOldConfig");function GX(e){let t=ug();return AX.get(t,e.replaceAll("_","."))}a(GX,"getConfigFromFile");async function FX(e,t){let r=Xi(sa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Or.writeFile(sa(),String(r))}a(FX,"addConfig");function kX(e){let t=sa(Ft.getPropsFilePath()),r=Xi(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,en.HDB_CONFIG_FILE);Or.writeFileSync(s,String(r))}a(kX,"deleteConfigFromFile");function $X(){return rE||(cg(),rE)}a($X,"getConfigObj")});var TP=g(($Te,SP)=>{"use strict";var nE=w(),sE=class{static{a(this,"BaseLicense")}constructor(t=0,r=nE.RAM_ALLOCATION_ENUM.DEFAULT,n=nE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_g=class extends sE{static{a(this,"ExtendedLicense")}constructor(t=0,r=nE.RAM_ALLOCATION_ENUM.DEFAULT,n=nE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};SP.exports={BaseLicense:sE,ExtendedLicense:_g}});var ia=g((YTe,bP)=>{"use strict";var Ac=require("fs-extra"),RP=Jf(),AP=require("crypto"),VX=require("moment"),YX=require("uuid").v4,nr=G(),fg=require("path"),KX=W(),Zi=w(),{totalmem:gP}=require("os"),WX=TP().ExtendedLicense,Rc="invalid license key format",QX="061183",jX="mofi25",zX="aes-256-cbc",JX=16,XX=32,OP=J();OP.initSync();var dg;bP.exports={validateLicense:NP,generateFingerPrint:eZ,licenseSearch:pg,getLicense:nZ,checkMemoryLimit:sZ};function Eg(){return fg.join(OP.getHdbBasePath(),Zi.LICENSE_KEY_DIR_NAME,Zi.LICENSE_FILE_NAME)}a(Eg,"getLicenseDirPath");function ZX(){let e=Eg();return fg.join(e,Zi.LICENSE_FILE_NAME)}a(ZX,"getLicenseFilePath");function hg(){let e=Eg();return fg.join(e,Zi.REG_KEY_FILE_NAME)}a(hg,"getFingerPrintFilePath");async function eZ(){let e=hg();try{return await Ac.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await tZ();throw nr.error(`Error writing fingerprint file to ${e}`),nr.error(t),new Error("There was an error generating the fingerprint")}}a(eZ,"generateFingerPrint");async function tZ(){let e=YX(),t=RP.hash(e),r=hg();try{await Ac.mkdirp(Eg()),await Ac.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw nr.error(`Error writing fingerprint file to ${r}`),nr.error(n),new Error("There was an error generating the fingerprint")}return t}a(tZ,"writeFingerprint");function NP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zi.RAM_ALLOCATION_ENUM.DEFAULT,version:Zi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return nr.error("empty license key passed to validate."),r;let n=hg(),s=!1;try{s=Ac.statSync(n)}catch(i){nr.error(i)}if(s){let i;try{i=Ac.readFileSync(n,"utf8")}catch{nr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(jX),c=o[1];c=Buffer.concat([Buffer.from(c)],JX);let l=Buffer.concat([Buffer.from(i)],XX),_=AP.createDecipheriv(zX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=rZ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Rc),nr.error(Rc),new Error(Rc)}let d;if(isNaN(u))try{d=JSON.parse(u),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(Rc),nr.error(Rc),new Error(Rc)}else r.exp_date=u;r.exp_date<VX().valueOf()&&(r.valid_date=!1),RP.validate(o[1],`${QX}${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||nr.error("Invalid licence"),r}a(NP,"validateLicense");function rZ(e,t){try{let r=AP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{nr.warn("Check old license failed")}}a(rZ,"checkOldLicense");function pg(){let e=new WX,t=[];try{t=Ac.readFileSync(ZX(),"utf-8").split(Zi.NEW_LINE)}catch(r){r.code==="ENOENT"?nr.info("no license file found"):nr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(KX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=NP(s.license_key,s.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(s){nr.error("There was an error parsing the license string."),nr.error(s),e.ram_allocation=Zi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dg=e,e}a(pg,"licenseSearch");async function nZ(){return dg||await pg(),dg}a(nZ,"getLicense");function sZ(){let e=pg().ram_allocation,t=process.constrainedMemory?.()||gP();if(t=Math.round(Math.min(t,gP())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(sZ,"checkMemoryLimit")});var Nr=g((zTe,FP)=>{"use strict";var CP="username is required",LP="nothing to update, must supply active, role or password to update",DP="password cannot be an empty string",PP="If role is specified, it cannot be empty.",MP="active must be true or false";FP.exports={addUser:fZ,alterUser:EZ,dropUser:pZ,getSuperUser:gZ,userInfo:mZ,listUsers:oE,listUsersExternal:SZ,setUsersToGlobal:Nc,findAndValidateUser:xP,getClusterUser:RZ,USERNAME_REQUIRED:CP,ALTERUSER_NOTHING_TO_UPDATE:LP,EMPTY_PASSWORD:DP,EMPTY_ROLE:PP,ACTIVE_BOOLEAN:MP};var UP=Ar(),iZ=ta(),Tg=Jf(),vP=eP(),BP=Rr(),gg=si(),tn=W(),HP=require("validate.js"),Ae=G(),{promisify:oZ}=require("util"),Rg=ci(),yP=w(),IP=et(),aZ=Et(),WTe=J(),QTe=ia(),cZ=ti(),{table:jTe}=(Re(),ie(Ge)),{handleHDBError:Cs,hdb_errors:lZ}=se(),{HTTP_STATUS_CODES:Ls,AUTHENTICATION_ERROR_MSGS:mg,HDB_ERROR_MSGS:Oc}=lZ,{UserEventMsg:Ag}=Jn(),Sg=require("lodash"),{server:Og}=(fr(),ie(Ho)),uZ=G();Og.getUser=(e,t)=>xP(e,t,t!=null);var qP={username:!0,active:!0,role:!0,password:!0},wP=new Map,iE=BP.searchByValue,_Z=BP.searchByHash,dZ=oZ(iZ.delete);async function fZ(e){let t=HP.cleanAttributes(e,qP),r=vP.addUserValidation(t);if(r)throw Cs(new Error,r.message,Ls.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await iE(n),s=s&&Array.from(s)}catch(l){throw Ae.error("There was an error searching for a role in add user"),Ae.error(l),l}if(!s||s.length<1)throw Cs(new Error,Oc.ROLE_NAME_NOT_FOUND(t.role),Ls.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Cs(new Error,Oc.DUP_ROLES_FOUND(t.role),Ls.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rg.encrypt(t.password)),t.password=Tg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await UP.insert(i)}catch(l){throw Ae.error("There was an error searching for a user."),Ae.error(l),l}Ae.debug(o);try{await Nc()}catch(l){throw Ae.error("Got an error setting users to global"),Ae.error(l),l}if(o.skipped_hashes.length===1)throw Cs(new Error,Oc.USER_ALREADY_EXISTS(t.username),Ls.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gg.signalUserChange(new Ag(process.pid)),`${c.username} successfully added`}a(fZ,"addUser");async function EZ(e){let t=HP.cleanAttributes(e,qP);if(tn.isEmptyOrZeroLength(t.username))throw new Error(CP);if(tn.isEmptyOrZeroLength(t.password)&&tn.isEmptyOrZeroLength(t.role)&&tn.isEmptyOrZeroLength(t.active))throw new Error(LP);if(!tn.isEmpty(t.password)&&tn.isEmptyOrZeroLength(t.password.trim()))throw new Error(DP);if(!tn.isEmpty(t.active)&&!tn.isBoolean(t.active))throw new Error(MP);let r=hZ(t.username);if(!tn.isEmpty(t.password)&&!tn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rg.encrypt(t.password)),t.password=Tg.hash(t.password)),t.role==="")throw new Error(PP);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 iE(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=Oc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),Cs(new Error,c,Ls.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Oc.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),Cs(new Error,c,Ls.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await UP.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await Nc()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return gg.signalUserChange(new Ag(process.pid)),s}a(EZ,"alterUser");function hZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(hZ,"isClusterUser");async function pZ(e){try{let t=vP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(tn.isEmpty(global.hdb_users.get(e.username)))throw Cs(new Error,Oc.USER_NOT_EXIST(e.username),Ls.NOT_FOUND,void 0,void 0,!0);let n;try{n=await dZ(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await Nc()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return gg.signalUserChange(new Ag(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(pZ,"dropUser");async function mZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await _Z(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(mZ,"userInfo");async function SZ(){let e;try{e=await oE()}catch(t){throw Ae.error("Got an error listing users."),Ae.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(SZ,"listUsersExternal");async function oE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await iE(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=Sg.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await iE(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=Sg.cloneDeep(o),o.role=r[o.role],TZ(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),tn.errorizeMessage(e)}return null}a(oE,"listUsers");function TZ(e){try{if(!e){Ae.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(cZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(TZ,"appendSystemTablesToRole");async function Nc(){try{let e=await oE();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a(Nc,"setUsersToGlobal");async function xP(e,t,r=!0){global.hdb_users||await Nc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Cs(new Error,mg.GENERIC_AUTH_FAIL,Ls.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Cs(new Error,mg.USER_INACTIVE,Ls.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(wP.get(t)===n.password)return s;if(Tg.validate(n.password,t))wP.set(t,n.password);else throw Cs(new Error,mg.GENERIC_AUTH_FAIL,Ls.UNAUTHORIZED,void 0,void 0,!0)}return s}a(xP,"findAndValidateUser");async function gZ(){global.hdb_users||await Nc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(gZ,"getSuperUser");async function RZ(){let e=await oE(),t=aZ.getConfigFromFile(yP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!tn.isEmpty(r)&&r?.role?.role===yP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+IP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+IP.SERVER_SUFFIX.ADMIN,r}a(RZ,"getClusterUser");var GP=[];Og.invalidateUser=function(e){for(let t of GP)try{t(e)}catch(r){uZ.error("Error invalidating user",r)}};Og.onInvalidatedUser=function(e){GP.push(e)}});var Iu=g((ege,YP)=>{"use strict";var oa=G(),rn=w(),AZ=JI(),XTe=wn(),ZTe=ji(),OZ=Nr(),{validateEvent:kP}=Jn(),yu=In(),NZ=require("process"),{resetDatabases:bZ}=(Re(),ie(Ge)),yZ={[rn.ITC_EVENT_TYPES.SCHEMA]:IZ,[rn.ITC_EVENT_TYPES.USER]:VP};async function IZ(e){let t=kP(e);if(t){oa.error(t);return}oa.trace("ITC schemaHandler received schema event:",e),await AZ(e.message),await wZ(e.message)}a(IZ,"schemaHandler");async function wZ(e){try{yu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),yu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),yu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=bZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){oa.error(t)}}a(wZ,"syncSchemaMetadata");var $P=[];async function VP(e){try{try{yu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),yu.resetReadTxn(rn.SYSTEM_SCHEMA_NAME,rn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){oa.warn(r)}let t=kP(e);if(t){oa.error(t);return}oa.trace(`ITC userHandler ${rn.HDB_ITC_CLIENT_PREFIX}${NZ.pid} received user event:`,e),await OZ.setUsersToGlobal();for(let r of $P)r()}catch(t){oa.error(t)}}a(VP,"userHandler");VP.addListener=function(e){$P.push(e)};YP.exports=yZ});var Jn=g((oge,WP)=>{"use strict";var rge=G(),Ng=W(),CZ=w(),{ITC_ERRORS:wu}=Vr(),{parentPort:nge,threadId:LZ,isMainThread:DZ,workerData:sge}=require("worker_threads"),{onMessageFromWorkers:PZ,broadcast:ige,broadcastWithAcknowledgement:MZ}=tt();WP.exports={sendItcEvent:UZ,validateEvent:KP,SchemaEventMsg:vZ,UserEventMsg:BZ};var aE;PZ(async(e,t)=>{aE=aE||Iu(),KP(e),aE[e.type]&&await aE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function UZ(e){return!DZ&&e.message&&(e.message.originator=LZ),MZ(e)}a(UZ,"sendItcEvent");function KP(e){if(typeof e!="object")return wu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ng.isEmpty(e.type))return wu.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ng.isEmpty(e.message))return wu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ng.isEmpty(e.message.originator))return wu.MISSING_ORIGIN;if(CZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wu.INVALID_EVENT(e.type)}a(KP,"validateEvent");function vZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(vZ,"SchemaEventMsg");function BZ(e){this.originator=e}a(BZ,"UserEventMsg")});var si=g((lge,JP)=>{"use strict";var QP=w(),cge=W(),cE=G(),jP=MI(),bc,{sendItcEvent:zP}=Jn();function HZ(e){try{cE.trace("signalSchemaChange called with message:",e),bc=bc||Iu();let t=new jP(QP.ITC_EVENT_TYPES.SCHEMA,e);return bc.schema(t),zP(t)}catch(t){cE.error(t)}}a(HZ,"signalSchemaChange");function qZ(e){try{cE.trace("signalUserChange called with message:",e),bc=bc||Iu();let t=new jP(QP.ITC_EVENT_TYPES.USER,e);return bc.user(t),zP(t)}catch(t){cE.error(t)}}a(qZ,"signalUserChange");JP.exports={signalSchemaChange:HZ,signalUserChange:qZ}});var Pu={};$e(Pu,{addAnalyticsListener:()=>Du,recordAction:()=>nn,recordActionBinary:()=>Cn,setAnalyticsEnabled:()=>xZ});function xZ(e){aM=e}function nn(e,t,r,n,s){if(!aM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=_E.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=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:n,type:s},_E.set(i,o)}lE||GZ()}function Cn(e,t,r,n,s){nn(!!e,t,r,n,s)}function Du(e){uM.push(e)}function GZ(){lE=performance.now(),setTimeout(async()=>{let e=performance.now()-lE;lE=0;let t=[],r={time:Date.now(),period:e,threadId:aa.threadId,metrics:t};for(let[s,i]of _E){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of _M){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=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 dM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:aa.threadId,byThread:!0,...n});for(let s of uM)s(t);_E=new Map,aa.parentPort?aa.parentPort.postMessage({type:lM,report:r}):hM({report:r})},cM).unref()}async function FZ(e,t=6e4){let r=Ig(),n=fM(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,l=[],_;for(let{key:h,value:m}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=m;for(let T of S||[]){let{path:R,method:U,type:B,metric:v,count:P,total:V,distribution:Y,threads:z,...oe}=T;P||(P=1);let Se=v+(R?"-"+R:"");U!==void 0&&(Se+="-"+U),B!==void 0&&(Se+="-"+B);let ue=o.get(Se);if(ue){if(ue.threads){let de=ue.threads[A];if(de)ue=de;else{ue.threads[A]=Object.assign({},oe);continue}}ue.count||(ue.count=1);let Fe=ue.count;for(let de in oe){let qt=oe[de];typeof qt=="number"&&(ue[de]=(ue[de]*Fe+qt*P)/(Fe+P))}ue.count+=P,V>=0&&(ue.total+=V,ue.ratio=ue.total/ue.count)}else ue=Object.assign({period:t},T),delete ue.distribution,o.set(Se,ue),ue.byThread&&(ue.threads=[],ue.threads[A]=Object.assign({},oe),l.push(ue));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let Fe=c.get(Se);Fe?Fe.push(...Y):c.set(Se,Y)}}await dM()}for(let h of l){let{path:m,method:S,type:A,metric:T,count:R,total:U,distribution:B,threads:v,...P}=h;v=v.filter(V=>V);for(let V in P){if(typeof h[V]!="number")continue;let Y=0;for(let z of v){let oe=z[V];typeof oe=="number"&&(Y+=oe)}h[V]=Y}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,m]of c){let S=o.get(h);m.sort((de,qt)=>de.value>qt.value?1:-1);let A=S.count-1,T=[],R=0,U=0,B;for(let de of _M){let qt=A*de;for(;R<qt;)B=m[U++],R+=B.count,U===1&&R--;let Rd=m[U>1?U-2:0];B||(B=m[0]),T.push(B.value-(B.value-Rd.value)*(R-qt)/B.count)}let[v,P,V,Y,z,oe,Se,ue,Fe]=T;Object.assign(S,{p1:v,p10:P,p25:V,median:Y,p75:z,p90:oe,p95:Se,p99:ue,p999:Fe})}let u;for(let[h,m]of o)m.id=(0,uE.getNextMonotonicTime)(),m.time=_,n.primaryStore.put(m.id,m,{append:!0}).then(S=>{S||n.primaryStore.put(m.id,m)}),u=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(u||E*10>f){let h=(0,uE.getNextMonotonicTime)(),m={id:h,metric:"main-thread-utilization",idle:f-XP,active:E-ZP,time:d,...process.memoryUsage()};n.primaryStore.put(h,m,{append:!0}).then(S=>{S||n.primaryStore.put(h,m)})}XP=f,ZP=E}async function eM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Ig(){return tM||(tM=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function fM(){return rM||(rM=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function VZ(){EM=!0;let e=(0,Lu.get)(yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await FZ(cM,e),await eM(Ig(),kZ),await eM(fM(),$Z)},Math.min(e/2,2147483647)).unref()}function hM(e,t){let r=e.report;r.threadId=t?.threadId||aa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(nM+=n.mean*n.count);r.totalBytesProcessed=nM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(sM.get(t))}),sM.set(t,t.performance.eventLoopUtilization())),r.id=(0,uE.getNextMonotonicTime)(),Ig().primaryStore.put(r.id,r),EM||VZ(),YZ&&(pM=WZ(r))}async function WZ(e){if(await pM,!eo){let r=(0,Cu.dirname)((0,oM.getLogFilePath)());try{eo=await(0,bg.open)((0,Cu.join)(r,"analytics.log"),"r+")}catch{eo=await(0,bg.open)((0,Cu.join)(r,"analytics.log"),"w+")}}let t=(await eo.stat()).size;if(t>KZ){let r=Buffer.alloc(t);await eo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await eo.write(r,{position:0}),await eo.truncate(r.length),t=r.length}await eo.write(JSON.stringify(e)+`
|
|
9
|
-
`,t)}var aa,iM,oM,Cu,bg,uE,Lu,yg,_E,aM,lE,cM,lM,uM,_M,XP,ZP,dM,kZ,$Z,tM,rM,EM,nM,sM,YZ,pM,eo,KZ,li=Ne(()=>{aa=require("worker_threads"),iM=q(tt());Re();oM=q(G()),Cu=require("path"),bg=require("fs/promises"),uE=q(hr()),Lu=q(J()),yg=q(w());fr();(0,Lu.initSync)();_E=new Map,aM=(0,Lu.get)(yg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(xZ,"setAnalyticsEnabled");a(nn,"recordAction");it.recordAnalytics=nn;a(Cn,"recordActionBinary");lE=0,cM=1e3,lM="analytics-report",uM=[];a(Du,"addAnalyticsListener");_M=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(GZ,"sendAnalytics");a(FZ,"aggregation");XP=0,ZP=0,dM=a(()=>new Promise(setImmediate),"rest");a(eM,"cleanup");kZ=36e5,$Z=31536e6;a(Ig,"getRawAnalyticsTable");a(fM,"getAnalyticsTable");(0,iM.setChildListenerByType)(lM,hM);a(VZ,"startScheduledTasks");nM=0,sM=new Map,YZ=!1;a(hM,"recordAnalytics");KZ=1e6;a(WZ,"logAnalytics")});var mM={};$e(mM,{Headers:()=>to,appendHeader:()=>wg});function wg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var to,Mu=Ne(()=>{to=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 n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(wg,"appendHeader")});var Pg={};$e(Pg,{coerceType:()=>dE,makeTable:()=>hE,setServerUtilities:()=>r5,updateResource:()=>fE});function hE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:m}=e;m||(m=[]),LI(i,l);let S=Qm(i,n,l),A=0,T,R,U={},B=Promise.resolve(),v,P,V;for(let Q of m)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(v=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(P=Q),Q.expiresAt&&(V=Q),Q.isPrimaryKey&&(U=Q);let Y,z=[],oe=[],Se=1,ue=2,Fe={},de={},qt=864e5,Rd,Ad,vi,Bb=!1,mm,Z$=i.getRange({start:!1,end:!1}).constructor,eV=10,tV=6;E&&xb();class Xe extends Wt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=m;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=P;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),R=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),y.length>0)if(y.length===1){let M=y[0];return(k,L,H)=>{if(k?.source!==M)return M[D](L,H,k)}}else return(M,k,L)=>{let H=[];for(let F of y){if(M?.source===F)break;H.push(F[D](k,L,M))}return Promise.all(H)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],N=a(D=>{if(b[D]&&(!b[D].reliesOnPrototype||b.prototype[D]))return(y,M,k)=>{if(!y?.source)return b[D](M,k,y)}},"getApplyToCanonicalSource");return Fe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},de={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,y=a(async(M,k)=>{let L=M.value,H=M.table?ot[c][M.table]:Xe;if(c===os.SYSTEM_SCHEMA_NAME&&(M.table===os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=L[H.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let F=await H.getResource(M.id,k,yc);switch(M.type){case"put":return F._writeUpdate(L,!0,yc);case"patch":return F._writeUpdate(L,!1,yc);case"delete":return F._writeDelete(yc);case"publish":return F._writePublish(L,yc);case"invalidate":return F.invalidate(yc);default:nt.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&h==null&&(h=!0);let k=p.subscribeOnThisThread?p.subscribeOnThisThread((0,la.getWorkerIndex)()):(0,la.getWorkerIndex)()===0,L=M&&k&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L){let H;for await(let F of L)try{if(!(F.type==="transaction"?F.writes[0]:F)){nt.error("Bad subscription event",F);continue}if(F.source=p,H)if(F.beginTxn)H.resolve();else{y(F,H);continue}if(F.type==="end_txn")continue;let ye=Ze(F,()=>{if(F.type==="transaction"){let ee=[];for(let Ue of F.writes)try{ee.push(y(Ue,F))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(F),ce}return Promise.all(ee)}else if(F.type==="define_schema"){let ee=this.attributes.slice(0),Ue;for(let ce of F.attributes)ee.find(ke=>ke.name===ce.name)||(ee.push(ce),Ue=!0);Ue&&(ft({table:s,database:c,attributes:ee,origin:"cluster"}),Gu.signalSchemaChange(new Fu.SchemaEventMsg(process.pid,os.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return F.beginTxn?(H=F,y(F,F),new Promise(ee=>{H.resolve=ee})):y(F,F)});D&&(await ye,Gu.signalUserChange(new Fu.UserEventMsg(process.pid))),F.onCommit&&(ye?.then?ye.then(F.onCommit):F.onCommit())}catch(ae){nt.error("error in subscription handler",ae)}}}catch(M){nt.error(M)}})(),this}static getResource(p,O,I){let b=super.getResource(p,O,I);if(p!=null){bl(p);try{if(b.hasOwnProperty(Ee))return b;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let N=!I?.async||i.cache?.get(p),D=Vn(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Sm(p,O,{transaction:y},N,M=>{if(M?fE(b,M):b[Ee]=null,O.onlyIfCached&&O.noCacheStore){if(!b.doesExist())throw new Ln.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let k=Tm(p,M,O,b);if(k)return D?.disregardReadTxn(),b[Cg]=!0,Dg(k,L=>(fE(b,L),b))}return b})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(p)),N}}return b}ensureLoaded(){let p=Tm(this[Pe],this[sn],this[be]);if(p)return this[Cg]=!0,Dg(p,O=>{this[sn]=O,this[Ee]=O.value,this[qu]=O.version})}static setTTLExpiration(p){if(typeof p=="number")d=p*1e3,f||(f=0);else if(p&&typeof p=="object")d=p.expiration*1e3,f=(p.eviction||0)*1e3,qt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");qt=qt||(d+f)/4,Rm()}static enableAuditing(p=!0){E=p,p&&xb(),Xe.audit=p}static coerceId(p){return p===""?null:dE(p,U)}static async dropTable(){if(delete ot[c][s],c===o){for(let p of m)u.remove(Xe.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Xe.tableName+"/"),i.drop(),await u.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));Gu.signalSchemaChange(new Fu.SchemaEventMsg(process.pid,os.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[bn])return this.search(p);if(this[Pe]===null){if(p?.conditions)return this.search(p);let O=Xe.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:m}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(p,O){let I=Nd(p);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,N=O?.select;if(b?.length>0||Bb&&N){if(O||(O={}),N){let D=b?.length>0&&Lg(b,"read");O.select=N.map(y=>{let M=y.name||y;if(!D||D[M]){let k=vi[M]?.definition?.tableClass;if(k){if(y.name||(y={name:y}),!k.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=b.filter(D=>D.read&&!vi[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=Nd(p);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let N=Lg(b,"update");for(let D in O)if(!N[D])return!1;for(let D of b){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(p,O){if(this[bn]){let I=Nd(p);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let N=Lg(b,"insert");for(let D in O)if(!N[D])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Nd(p)?.delete}update(p,O){if(!Vn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[Ee]={},this[Lt]=p):(b=this[Lt],b&&(p=Object.assign(b,p)),this[Lt]=b=p)),this._writeUpdate(this[Lt],O),this}addTo(p,O){if(typeof O=="number")this[Uu]===TM?this.set(p,(+this.getProperty(p)||0)+O):(this[Uu]||this.update(),this.set(p,new ef(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let O=this[be],I=this[Pe];bl(I),Vn(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[sn],nodeName:this[be]?.nodeName,before:Fe.invalidate?.bind(this,O,I),beforeIntermediate:de.invalidate?.bind(this,O,I),commit:(N,D)=>{if(D?.version>N)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);S(I,y,this[sn],N,vu,E,this[be],0,"invalidate")}})}static evict(p,O,I){let b=this.Source,N;if(!((R||E)&&(!O||(N=i.getEntry(p),!N||!O)||N.version!==I))){if(R){if(i.hasLock(p,N.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return S(p,D,N,I,Bu,null,null,0,null,!0)}return i.ifVersion(I,()=>{Od(p,O,null)}),E?S(p,null,N,I,Bu,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,bM.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let b=this[be],N=Vn(b),D=this[Pe];bl(D);let y=this[sn];this[Uu]=O?TM:ZZ;let M={key:D,store:i,entry:y,nodeName:b?.nodeName,validate:k=>{p||(p=this[Lt]),O||p&&Xd(p)?(this.validate(p,!O),b?.source||(P&&(p[P.name]=P.type==="Date"?new Date(k):P.type==="String"?new Date(k).toISOString():k),O&&(t&&p[t]!==D&&(p[t]=D),v&&(y?.value?p[v.name]=y?.value[v.name]:p[v.name]=v.type==="Date"?new Date(k):v.type==="String"?new Date(k).toISOString():k),p=Fo(p)))):N.removeWrite(M)},before:O?Fe.put?()=>Fe.put(b,D,p):null:Fe.patch?()=>Fe.patch(b,D,p):Fe.put?()=>Fe.put(b,D,Fo(this)):null,beforeIntermediate:O?de.put?()=>de.put(b,D,p):null:de.patch?()=>de.patch(b,D,p):de.put?()=>de.put(b,D,Fo(this)):null,commit:(k,L,H)=>{if(H){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this[sn]=L,L?.value?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");O||(this[Ee]=L?.value??null)}this[Lt]=p,this[qu]=k;let F=L?.value,ae=p;if(this[Uu]=0,L?.version>=k)if(E){let ce=L.localTime,ke=L.version;for(;ae&&(ce>k||ke>=k&&ce>0);){let re=l.get(ce),X=xt(re);if(ke=X.version,ke>k){if(X.type==="patch"){let Oe=X.getValue(i);ae=zd(ae,Oe)}else if(X.type==="put"||X.type==="delete")return}else if(ke===k)return;ce=X.previousLocalTime}}else{if(O)return;ae=zd(ae,F)}let ye;if(O?ye=ae:(this[Ee]=F,ye=O?ae:Fo(this,ae)),this[Ee]=ye,ye?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");let ee;O||(ee=p),Od(D,F,ye);let Ue=O?"put":"patch";S(D,ye,L,k,0,E,b,b.expiresAt||(d?d+Date.now():0),Ue,!1,ee)}};N.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[bn]){for await(let O of this.search(p))(await Xe.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[Ee]?this._writeDelete(p):!1}_writeDelete(p){let O=Vn(this[be]),I=this[Pe];bl(I);let b=this[be];return O.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:Fe.delete?.bind(this,b,I),beforeIntermediate:de.delete?.bind(this,b,I),commit:(N,D,y)=>{let M=D?.value;y&&(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),fE(this,D)),!(D?.version>N)&&(Od(this[Pe],M),nt.trace("Write delete entry",I,N),E||h?(S(I,null,this[sn],N,0,E,this[be],0,"delete"),E||Rm()):i.remove(this[Pe]))}}),!0}search(p){let O=this[be],I=Vn(O);if(!p)throw new Error("No query provided");let b=p.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Pe]&&(b=[{attribute:null,comparator:"prefix",value:this[Pe]}].concat(b));let N,D={};function y(X,Oe){let He;switch(Oe){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}let ms=He&&{},Bi;for(let je of X){if(je.conditions){je.conditions=y(je.conditions,je.operator);continue}let Yt=je[0]??je.attribute,Rn=Yt==null?U:ei(m,Yt);if(Rn){if(He){let Ss=Qn(Yt),Kt=ms[Ss];Kt?(Kt.push(je),Bi=!0):ms[Ss]=[je]}(Rn.type||aS[je.comparator])&&(je[1]===void 0?je.value=k(je.value,Rn):je[1]=k(je[1],Rn))}else if(Yt!=null)throw(0,Ln.handleHDBError)(new Error,`${Yt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return X;if(Bi)for(let je in ms){let Yt=ms[je],Rn=Yt.length;if(Rn>1)for(let Ss=0;Ss<Rn;Ss++){let Kt=Yt[Ss];if(Kt.comparator==="ge"||Kt.comparator==="greater_than_equal")for(let Hi=0;Hi<Rn;Hi++){let za=Yt[Hi];(za.comparator==="le"||za.comparator==="less_than_equal")&&(Kt.comparator="between",Kt.value=[Kt.value,za.value],X.splice(X.indexOf(za),1))}if(Kt.comparator==="equals"||!Kt.comparator){for(let Hi=0;Hi<Rn;Hi++)if(Hi!==Ss){let za=Yt[Hi];X.splice(X.indexOf(za),1)}break}}}return X}a(y,"prepareConditions");function M(X,Oe){if(p.enforceExecutionOrder)return X;for(let He of X)He.conditions&&(He.conditions=M(He.conditions,He.operator));return X.length>1&&Oe!=="or"?(0,NM.sortBy)(X,af(Xe)):X}a(M,"orderConditions");function k(X,Oe){return Array.isArray(X)?X.map(He=>dE(He,Oe)):dE(X,Oe)}a(k,"coerceTypedValues");let L=p.operator;(b.length>0||L)&&(b=y(b,L));let H=typeof p.sort=="object"&&p.sort,F;if(H&&L!=="or"){let X=H.attribute;if(N=b.find(Oe=>Qn(Oe.attribute)===Qn(X)),!N){if(!ei(m,X))throw(0,Ln.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);N={attribute:X,comparator:"sort"},b.push(N)}N.descending=!!H.descending}b=M(b,L),H&&(b[0]===N?H.next&&(F={dbOrderedAttribute:H.attribute,attribute:H.next.attribute,descending:H.next.descending,next:H.next.next}):(N&&b.splice(b.indexOf(N),1),F=H));let ae=p.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:b,operator:L,postOrdering:F,selectApplied:!!ae};let ye=I.useReadTxn(),ee=cS(b,L,Xe,ye,p,O,(X,Oe)=>Hb(X,ae,O,ye,Oe),D),Ue=p.ensureLoaded!==!1;F||(ee=re(ee));let ce=Xe.transformEntryForSelect(ae,O,ye,D,Ue,!0),ke=Xe.transformToOrderedSelect(ee,ae,F,ye,O,ce);function re(X){return p.offset||p.limit!==void 0?X.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):X}return a(re,"applyOffset"),F&&(ke=re(ke)),ke.onDone=()=>{ke.onDone=null,I.doneReadTxn()},ke.selectApplied=!0,ke.getColumns=()=>{if(ae){let X=[];for(let Oe of ae)Oe==="*"?X.push(...m.map(He=>He.name)):X.push(Oe.name||Oe);return X}return m.map(X=>X.name)},ke}static transformToOrderedSelect(p,O,I,b,N,D){let y=new Z$;if(I){p=Hb(p,O,b,N,null);let M;y.iterate=function(){let L,H=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),F,ae=I.dbOrderedAttribute,ye,ee,Ue=!0;function ce(re){let X=re.next&&ce(re.next),Oe=re.descending;return(He,ms)=>{let Bi=gm(He,re.attribute,b),je=gm(ms,re.attribute,b),Yt=Oe?(0,ua.compareKeys)(je,Bi):(0,ua.compareKeys)(Bi,je);return Yt===0?X?.(He,ms)||0:Yt}}a(ce,"createComparator");let ke=ce(I);return{async next(){let re;if(L)if(re=L.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};M=[],ye&&M.push(ye);do if(re=await H.next(),re.done){if(F=!0,M.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),ae){let Oe=gm(X,ae,b);if(Ue)Ue=!1,ee=Oe;else if(Oe!==ee){ee=Oe,ye=X;break}}M.push(X)}while(!0);return I.isGrouped,M.sort(ke),L=M[Symbol.iterator](),re=L.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),H.return()},throw(){y.onDone&&y.onDone(),H.throw()}}};let k=a(L=>{if(typeof O=="object"&&Array.isArray(L.attribute))for(let H=0;H<O.length;H++){let F=O[H],ae;if(F.name===L.attribute[0]){for(ae=F.sort||(F.sort={});ae.next;)ae=ae.next;ae.attribute=L.attribute.slice(1),ae.descending=L.descending}else F===L.attribute[0]&&(O[H]=ae={name:F,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&k(L.next)},"applySortingOnSelect");k(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(D);return y}static transformEntryForSelect(p,O,I,b,N,D){if(p&&(p===t||p?.length===1&&p[0]===t)){let L=a(H=>H?.key??H,"transform");return p===t?L:p.asArray?H=>[L(H)]:H=>({[t]:L(H)})}let y;N&&R&&!p?.every(L=>{let H;return typeof L=="object"?H=L.name:H=L,r[H]||H===t})&&(y=!0);let M,k=a(function(L){let H;if(L!=null){if(mm=L,H=L.value||L.deref?.(),!H&&(L.key===void 0||L.deref)){if(L=Sm(L.key??L,O,{transaction:I,lazy:p?.length<4},this.isSync,F=>F),L?.then)return L.then(k.bind(this));H=L?.value}if(y&&(L.metadataFlags&(vu|Bu)||L.expiresAt&&L.expiresAt<Date.now())){let F=Tm(L.key??L,L,O);if(F?.then)return F.then(k)}}if(H==null)return D?ca.SKIP:H;if(p&&!(p[0]==="*"&&p.length===1)){let F,ae=a((ee,Ue)=>{let ce;typeof ee=="object"?ce=ee.name:ce=ee;let ke=vi?.[ce],re;if(ke){let X=b?.[ce];if(X)if(X.hasMappings){let He=ke.from?H[ke.from]:Qn(L.key);re=X.get(He),re||(re=[])}else re=X.fromRecord?.(H);else re=ke(H,O,L);let Oe=a(He=>{if(He&&typeof He=="object"){let ms=ke.definition?.tableClass||Xe;M||(M={});let Bi=M[ce]||(M[ce]=ms.transformEntryForSelect(ce===ee?null:ee.select||(Array.isArray(ee)?ee:null),O,I,X,N));if(Array.isArray(He)){let je=[],Yt=ms.transformToOrderedSelect(He,ee.select,typeof ee.sort=="object"&&ee.sort,O,I,Bi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Rn=a(Kt=>{for(;!Kt.done;){if(Kt?.then)return Kt.then(Rn);je.push(Kt.value),Kt=Yt.next()}Ue(je,ce)},"nextValue"),Ss=Rn(Yt.next());Ss&&(F||(F=[]),F.push(Ss));return}else if(He=Bi.call(this,He),He?.then){F||(F=[]),F.push(He.then(je=>Ue(je,ce)));return}}Ue(He,ce)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(Oe))):Oe(re);return}else re=H[ce],re&&typeof re=="object"&&ce!==ee&&(re=Xe.transformEntryForSelect(ee.select||ee,O,I,null)({value:re}));Ue(re,ce)},"selectAttribute"),ye;if(typeof p=="string")ae(p,ee=>{ye=ee});else if(Array.isArray(p))if(p.asArray)ye=[],p.forEach((ee,Ue)=>{ee==="*"?p[Ue]=H:ae(ee,ce=>ye[Ue]=ce)});else{ye={};let ee=p.forceNulls;for(let Ue of p)if(Ue==="*")for(let ce in H)ye[ce]=H[ce];else ae(Ue,(ce,ke)=>{ce===void 0&&ee&&(ce=null),ye[ke]=ce})}else throw new Ln.ClientError("Invalid select"+p);return F?Promise.all(F).then(()=>ye):ye}return H},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");E||ft({table:s,database:c,schemaDefined:_,attributes:m,audit:!0}),p||(p={});let O=!p.rawEvents,I=wI(Xe,this[Pe]??null,function(y,M,k,L){try{let H=M.getValue?.(i,O);if(!H&&M.type==="patch"&&O){let F=i.getEntry(y);F?.version===M.version?H=F.value:H=M.getValue?.(i,!0,k),M.type="put"}this.send({id:y,timestamp:k,value:H,version:M.version,type:M.type,beginTxn:L})}catch(H){nt.error(H)}},p.startTime||0,this[bn]);this[bn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Pe],N=p.previousCount;N>1e3&&(N=1e3);let D=p.startTime;if(this[bn]){if(D){if(N)throw new Ln.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:D,exclusiveStart:!0})){let k=xt(M);if(k.tableId!==n)continue;let L=k.recordId;(b==null||AM(b,L))&&I.send({id:L,timestamp:y,...k}),I.startTime=y}}else if(N){let y=[];for(let{key:M,value:k}of l.getRange({start:"z",end:!1,reverse:!0}))try{let L=xt(k);if(L.tableId!==n)continue;let H=L.recordId;if(b==null||AM(b,H)){let F=L.getValue(i,O,M);if(y.push({id:H,timestamp:M,value:F,version:L.version,type:L.type}),--N<=0)break}}catch(L){nt.error("Error getting history entry",M,L)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:k,localTime:L}of i.getRange({start:b??!1,end:b==null?void 0:[b,ua.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,version:k,timestamp:L,value:M})}else{N&&!D&&(D=0);let y=this[sn]?.localTime;if(y===Wm&&(i.cache?.delete(b),this[sn]=i.getEntry(b),nt.trace("re-retrieved record",y,this[sn]?.localTime),y=this[sn]?.localTime),nt.trace("Subscription from",D,"from",b,y),D<y){let M=[],k=y;do{let L=l.get(k);if(L){p.omitCurrent=!0;let H=xt(L),F=H.getValue(i,O,k);O&&(H.type="put"),M.push({id:b,value:F,timestamp:k,...H}),k=H.previousLocalTime}else break;N&&N--}while(k>D&&N!==0);for(let L=M.length;L>0;)I.send(M[--L]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:b,version:this[qu],timestamp:y,value:this})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[Ee]||this[Uu])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Vn(this[be]),b=this[Pe]||null;bl(b);let N=this[be];I.addWrite({key:b,store:i,entry:this[sn],nodeName:N?.nodeName,validate:()=>{this.validate(p)},before:Fe.publish?.bind(this,N,b,p),beforeIntermediate:de.publish?.bind(this,N,b,p),commit:(D,y,M)=>{y===void 0&&h&&!E&&Rm(),S(b,y?.value??null,y,y?.version||D,0,!0,N,y?.expiresAt,"message",!1,p)}})}validate(p,O){let I,b=a((N,D,y)=>{if(D.type&&N!=null)if(O&&N.__op__&&(N=N.value),D.properties){typeof N!="object"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let k=0,L=M.length;k<L;k++){let H=M[k],F=b(N[H.name],H,y+"."+H.name);F&&(N[H.name]=F)}}else switch(D.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(D.elements)for(let M=0,k=N.length;M<k;M++){let L=N[M],H=b(L,D.elements,y+"[*]");H&&(N[M]=H)}}else(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,D=m.length;N<D;N++){let y=m[N];if(!y.relationship&&(!O||y.name in p)){let M=b(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(I)throw new Ln.ClientError(I.join(". "))}getUpdatedTime(){return this[qu]}wasLoadedFromSource(){return R?!!this[Cg]:void 0}static async addAttributes(p){let O=m.slice(0);for(let I of p){if(!I.name)throw new Ln.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Ln.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return ft({table:s,database:c,schemaDefined:_,attributes:O}),Xe.indexingOperation}static async removeAttributes(p){let O=m.filter(I=>!p.includes(I.name));return ft({table:s,database:c,schemaDefined:_,attributes:O}),Xe.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,I=5e3,b=1e3,N;O>I&&!p?.exactCount&&(N=b);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&D++;if(N){let y=D;D=0;for(let{value:Ue}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))Ue!=null&&D++;let M=N*2,k=(D+y)/M,L=Math.pow((D-y+1)/N/2,2)+k*(1-k)/M,H=Math.max(Math.sqrt(L)*O,1),F=Math.round(k*O),ae=Math.max(F-1.96*H,0),ye=Math.min(F+1.96*H,O),ee=Math.pow(10,Math.round(Math.log10(H)));return ee>F&&(ee=ee/10),D=Math.round(F/ee)*ee,{recordCount:D,estimatedRange:[Math.round(ae),Math.round(ye)]}}return{recordCount:D}}static updatedAttributes(){vi=this.propertyResolvers={$id:(p,O,I)=>({value:I.key}),$updatedtime:(p,O,I)=>I.version,$record:(p,O,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Bb=!0,O.to)p.elements?.definition?(vi[p.name]=p.resolve=(I,b,N)=>{let D=I[O.from?O.from:t],y=p.elements.definition.tableClass;return N?oc({attribute:O.to,value:D},Vn(b).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let I=p.definition||p.elements?.definition;I?(vi[p.name]=p.resolve=(b,N,D)=>{let y=b[O.from];if(y!==void 0){if(p.elements){let M,k=y.map(L=>{let H=D?I.tableClass.primaryStore.getEntry(L,{transaction:Vn(N).getReadTxn()}):I.tableClass.get(L,N);return H?.then&&(M=!0),H});return O.filterMissing?M?Promise.all(k).then(L=>L.filter(OM)):k.filter(OM):M?Promise.all(k):k}return D?I.tableClass.primaryStore.getEntry(y,{transaction:Vn(N).getReadTxn()}):I.tableClass.get(y,N)}},p.set=(b,N)=>{if(Array.isArray(N)){let D=N.map(y=>y[Pe]||y[I.tableClass.primaryKey]);b[O.from]=D}else{let D=N[Pe]||N[I.tableClass.primaryKey];b[O.from]=D}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}tf(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:b}of l.getRange({start:0,end:p}))await Hu(),xt(b).tableId===n&&(O=l.remove(I));await O}static async*getHistory(p=0,O=1/0){for(let{key:I,value:b}of l.getRange({start:p,end:O})){await Hu();let N=xt(b);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return O;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let N=0;do{await Hu();let D=l.get(b);if(D){let y=xt(D);O.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(N<1e3&&b);return O.reverse()}static cleanup(){Y?.remove()}}Xe.updatedAttributes();let rV=Xe.prototype;return rV[XZ]=!0,d&&Xe.setTTLExpiration(d/1e3),V&&nV(),Xe;function Od(Q,p,O){let I;for(let b in r){let N=r[b],D=N.isIndexing,y=O?.[b],M=p?.[b];if(y===M&&!D)continue;I=!0;let k=N.indexNulls,L=(0,xu.getIndexedValues)(M,k);if(L){SM&&N.prefetch(L.map(H=>({key:H,value:Q})),RM);for(let H=0,F=L.length;H<F;H++)N.remove(L[H],Q)}if(L=(0,xu.getIndexedValues)(y,k),L){SM&&N.prefetch(L.map(H=>({key:H,value:Q})),RM);for(let H=0,F=L.length;H<F;H++)N.put(L[H],Q)}}return I}a(Od,"updateIndices");function bl(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>gM)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;case"bigint":if(Q<2n**64n&&Q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,ua.writeKey)(Q,e5,0)>gM)throw new Error("Primary key size is too large: "+Q.length);return!0}a(bl,"checkValidId");function Sm(Q,p,O,I,b){let N=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return b(null,Q);let D=i.getEntry(Q,O);return D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),b(D,Q)},"whenPrefetched");return I?N():Se>0?(Se--,N()):new Promise((D,y)=>{Se===0?(Se--,i.prefetch([Q],()=>{M(),k()})):(z.push(Q),oe.push(k),z.length>tV&&(Se--,M()));function M(){if(z.length>0){let L=oe;i.prefetch(z,()=>{Se===-1?M():Se++;for(let H of L)H()}),z=[],oe=[],ue>2&&ue--}else Se=ue,ue<eV&&ue++}a(M,"prefetch");function k(){try{D(N())}catch(L){y(L)}}a(k,"load")})}a(Sm,"loadLocalRecord");function Nd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return t5;let O=p[c],I,b=O?.tables;if(b)return b[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Nd,"getTablePermissions");function Tm(Q,p,O,I){if(R){let b;if(O.noCache?b=!0:(p?(!p.value||p.metadataFlags&(vu|Bu)||p.expiresAt&&p.expiresAt<Date.now())&&(b=!0):b=!0,Cn(!b,"cache-hit",s)),b){let N=qb(Q,p,O).then(D=>(D?.value?.[Ee]&&nt.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,Q)){if(N.catch(D=>nt.warn(D)),O?.onlyIfCached&&!I.doesExist())throw new Ln.ServerError("Entry is not cached",504);return}else return N}}}a(Tm,"ensureLoadedFromSource");function Vn(Q){let p=Q?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new ko,p.lmdbDb=i,p;p=O}while(!0)}else return new sf}a(Vn,"txnForContext");function gm(Q,p,O){if(!Q)return;mm=Q;let I=Q.value||Q.deref?.()||(mm=i.getEntry(Q.key))?.value;if(typeof p=="object"){let N=vi,D=I;for(let y=0,M=p.length;y<M;y++){let k=p[y],L=N?.[k];D=L&&D?L(D,O,!0)?.value:D?.[k],N=L?.definition?.tableClass?.propertyResolvers}return D}let b=vi[p];return b?b(I,O):I[p]}a(gm,"getAttributeValue");function Hb(Q,p,O,I,b){let N=b?.length,D={transaction:I,lazy:N>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M(k,L){let H=k?.value;if(!H)return ca.SKIP;for(let F=0;F<N;F++)if(!y?.includes(F)&&!b[F](H,k))return ca.SKIP;return L!==void 0&&(k.key=L),k}if(a(M,"processEntry"),N>0||!Q.hasEntries){let k=Q.map(L=>{if(y=null,typeof L=="object"&&L.key!==void 0)return N>0?M(L):L;if(L==null)return ca.SKIP;for(let H=0;H<N;H++){let ae=b[H].idFilter;if(ae){if(!ae(L))return ca.SKIP;y||(y=[]),y.push(H)}}return Sm(L,O,D,!1,M)});return Array.isArray(Q)&&(k=k.filter(L=>L!==ca.SKIP)),k.hasEntries=!0,k}return Q}a(Hb,"transformToEntries");async function qb(Q,p,O){let I=p?.metadataFlags,b=p?.version,N,D;if(!i.attemptLock(Q,b,()=>{clearTimeout(D);let L=i.getEntry(Q);!L||!L.value||L.metadataFlags&(vu|Bu)?N(qb(Q,i.getEntry(Q),O)):N(L)}))return new Promise(L=>{N=L,D=setTimeout(()=>{i.unlock(Q,b)},JZ)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:b,source:null,resourceCache:O?.resourceCache},k=O?.responseHeaders;return new Promise((L,H)=>{let F;Dg(Ze(M,async ae=>{let ye=performance.now(),ee,Ue,ce;try{for(let Oe of Xe.sources)if(Oe.get&&(!Oe.get.reliesOnPrototype||Oe.prototype.get)&&(M.source=Oe,ee=await Oe.get(Q,M),ee))break;ce=I&vu;let re=M.lastModified||ce&&b;Ue=ce||re>b||!y,re||(re=(0,xu.getNextMonotonicTime)());let X=performance.now()-ye;if(nn(X,"cache-resolution",s),k&&wg(k,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),ae.timestamp=re,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==Q&&(ee[t]=Q)}F=!0,L({version:re,value:ee})}catch(re){re.message+=` while resolving record ${Q} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(L({version:b,value:y}),nt.trace(re.message,"(returned stale record)")):H(re),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Vn(M).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:(re,X)=>{if(X?.version!==b)return;let Oe=Od(Q,y,ee);ee?(de.put?.(M,Q,ee),S(Q,ee,X,re,0,E&&Ue||null,M,M.expiresAt,"put",!!ce)):(de.delete?.(M,Q),E||h?S(Q,null,X,re,0,E&&Ue||null,M,0,"delete",!!ce):i.remove(Q,b))}})}),()=>{i.unlock(Q,b)},ae=>{i.unlock(Q,b),F&&nt.error("Error committing cache update",ae)})})}a(qb,"getFromSource");function Rm(){if(qt!==Rd&&(Rd=qt,(0,la.getWorkerIndex)()===(0,la.getWorkerCount)()-1)){if(Ad&&clearTimeout(Ad),!qt)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/qt)*qt+Q.getTime(),O=a(I=>{nt.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Ad=setTimeout(()=>B=B.then(async()=>{if(O(Math.max(I+qt,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ad);return}let b=50,N=new Array(b),D=0;nt.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:k,version:L,expiresAt:H}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;k===null&&!E&&L+zZ<Date.now()?F=i.remove(M,L):H&&H+f<Date.now()&&(F=Xe.evict(M,k,L),y++),F&&(await N[D],N[D]=F.catch(ae=>{nt.error("Cleanup error",ae)}),++D>=b&&(D=0)),await Hu()}nt.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){nt.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(Rm,"scheduleCleanup");function xb(){Y=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(xb,"addDeleteRemoval");function nV(){(0,la.getWorkerIndex)()===0&&setInterval(async()=>{try{let Q=V.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${V} must be indexed`);for(let{value:O}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(O);I?.value?.[Q]<Date.now()&&Xe.evict(O,I.value,I.version),await Hu()}}catch(Q){nt.error("Error in evicting old records",Q)}},jZ).unref()}a(nV,"runRecordExpirationEviction")}function Lg(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function RM(){}function r5(e){bM=e}function dE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!n5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,EE.autoCast)(e):e}function AM(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Dg(e,t,r){return e?.then?e.then(t,r):t(e)}function fE(e,t){e[sn]=t,e[Ee]=t?.value??null,e[qu]=t?.version}function OM(e){return e!=null}function is(e){try{return JSON.stringify(e)}catch{return e}}var os,ca,xu,NM,ku,Ln,Gu,Fu,nt,ua,la,EE,QZ,bM,jZ,zZ,SM,JZ,qu,XZ,sn,Uu,TM,ZZ,Cg,yc,vu,Bu,e5,gM,t5,Bge,n5,Hu,pE=Ne(()=>{os=q(w()),ca=require("lmdb"),xu=q(hr()),NM=require("lodash");Wn();iS();ku=q(J());DI();Ln=q(se()),Gu=q(si()),Fu=q(Jn());Re();lf();nt=q(G());nf();$o();ua=require("ordered-binary"),la=q(tt());xo();EE=q(W());tc();li();Qd();Mu();QZ=new Uint8Array(9);QZ[8]=192;jZ=6e4,zZ=864e5;ku.initSync();SM=ku.get(os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),JZ=1e4,qu=Symbol.for("version"),XZ=Symbol.for("incremental-update"),sn=Symbol("entry"),Uu=Symbol("is-saving"),TM=1,ZZ=2,Cg=Symbol("loaded-from-source"),yc={isNotification:!0,ensureLoaded:!1},vu=1,Bu=8,e5=Buffer.allocUnsafeSlow(8192),gM=1978,t5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Bge=(0,EE.convertToMS)(ku.get(os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(hE,"makeTable");a(Lg,"attributesAsObject");a(RM,"noop");a(r5,"setServerUtilities");n5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(dE,"coerceType");a(AM,"isDescendantId");Hu=a(()=>new Promise(setImmediate),"rest");a(Dg,"when");a(fE,"updateResource");a(OM,"exists");a(is,"stringify")});var Ge={};$e(Ge,{database:()=>Tu,databases:()=>ot,dropDatabase:()=>qT,dropTableMeta:()=>l5,getDatabases:()=>es,getTables:()=>s5,onUpdatedTable:()=>Hg,readMetaDb:()=>$u,resetDatabases:()=>i5,table:()=>ft,tables:()=>an});function s5(){return RE||es(),an||{}}function es(){if(RE)return ot;RE=!0,Cc=new Map;let e=(0,sr.getHdbBasePath)()&&(0,st.join)((0,sr.getHdbBasePath)(),cn.DATABASES_DIR_NAME),t=(0,sr.get)(cn.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,sr.get)(cn.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,on.existsSync)(e)?e:(0,st.join)((0,sr.getHdbBasePath)(),cn.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,on.existsSync)(e))for(let r of(0,on.readdirSync)(e,{withFileTypes:!0})){let n=(0,st.basename)(r.name,".mdb");r.isFile()&&(0,st.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&$u((0,st.join)(e,r.name),null,n)}if((0,on.existsSync)((0,wc.getBaseSchemaPath)())){for(let r of(0,on.readdirSync)((0,wc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,st.join)((0,wc.getBaseSchemaPath)(),r.name),s=(0,st.join)((0,wc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,on.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,st.extname)(i.name).toLowerCase()===".mdb"){let o=(0,st.join)(s,i.name);$u((0,st.join)(n,i.name),(0,st.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,on.existsSync)(s))for(let o of(0,on.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,st.extname)(o.name).toLowerCase()===".mdb"&&$u((0,st.join)(s,o.name),(0,st.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,st.join)(c.path,(0,st.basename)(o+".mdb"));(0,on.existsSync)(l)&&$u(l,o,r,null,!0)}}for(let r in ot){let n=Cc.get(r);if(n){let s=ot[r];r.includes("delete")&&Dn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Dn.trace(`delete table class ${i}`),delete s[i])}else if(delete ot[r],r==="data"){for(let s in an)delete an[s];delete an[AE]}}return Cc=null,ot}}function i5(){RE=!1;for(let[,e]of ro)e.needsDeletion=!0;es();for(let[e,t]of ro)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ro.delete(e));return ot}function $u(e,t,r=vg,n,s){let i=new Mg.default(e,!1);try{let o=ro.get(e);o?o.needsDeletion=!1:(o=(0,SE.open)(i),ro.set(e,o));let c=new _a.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(mE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,on.existsSync)(n)&&(i.path=n,_=(0,SE.open)(i),_.isLegacy=!0):_=Wd(o));let u=CM(r),d=u[AE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let A=f.get(m);A||f.set(m,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let z of m)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){Dn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let A=u[E],T={},R=[],U,B,v=typeof S.audit=="boolean"?S.audit:(0,sr.get)(cn.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,V=S.expiration,Y=S.eviction;if(A)T=A.indices,R=A.attributes,A.schemaVersion++;else{U=S.tableId,U?U>=(l.get(Ic)||0)&&l.putSync(Ic,U+1):(S.tableId=U=l.get(Ic),U||(U=1),l.putSync(Ic,U+1),l.putSync(S.key,S));let z=new _a.default(!S.is_hash_attribute,S.is_hash_attribute);B=$d(o.openDB(S.key,z)),B.rootStore=o,B.tableId=U}for(let z of m){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!T[z.name]){let Se=new _a.default(!z.is_hash_attribute,z.is_hash_attribute);T[z.name]=o.openDB(z.key,Se),T[z.name].indexNulls=z.indexNulls}let oe=R.find(Se=>Se.name===z.name);oe?R.splice(R.indexOf(oe),1,z):R.push(z)}}catch(oe){Dn.error("Error trying to update attribute",z,R,T,oe)}}if(!A){A=LM(u,E,hE({primaryStore:B,auditStore:_,audit:v,expirationMS:V&&V*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:U,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let z of Bg)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function CM(e){let t=ot[e];if(t||(e==="data"?t=ot[e]=an:e==="system"?Object.defineProperty(ot,"system",{value:t=Object.create(null),configurable:!0}):t=ot[e]=Object.create(null)),Cc&&!Cc.has(e)){let r=new Set;t[AE]=r,Cc.set(e,r)}return t}function LM(e,t,r){return e[t]=r,r}function Tu({database:e,table:t}){e||(e=vg),es();let r=CM(e),n=(0,st.join)((0,sr.getHdbBasePath)(),cn.DATABASES_DIR_NAME),s=(0,sr.get)(cn.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,sr.get)(cn.CONFIG_PARAMS.STORAGE_PATH)||((0,on.existsSync)(n)?n:(0,st.join)((0,sr.getHdbBasePath)(),cn.LEGACY_DATABASES_DIR_NAME));let o=(0,st.join)(n,(i?t:e)+".mdb"),c=ro.get(o);if(!c){let l=new Mg.default(o,!1);c=(0,SE.open)(l),ro.set(o,c)}return c}async function qT(e){if(!ot[e])throw new Error("Schema does not exist");let t=ot[e];for(let r in t){let s=t[r].primaryStore.rootStore;ro.delete(s.path),s.status==="open"&&(await s.close(),await yM.remove(s.path))}if(e==="data"){for(let r in an)delete an[r];delete an[AE]}delete ot[e]}function ft({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:l,origin:_}){t||(t=vg);let u=Tu({database:t,table:e}),d=ot[t],f=d?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,m,S;l==null&&(l=!0);let A=new _a.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let T,R;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 P=u.auditStore;P||(P=Wd(u)),h=i.find(oe=>oe.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=l,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,sr.get)(cn.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Dn.trace(`${e} table loading, opening primary store`);let V=new _a.default(!1,!0),Y=e+"/",z=$d(u.openDB(Y,V));z.rootStore=u,S=u.dbisDb=u.openDB(mE.INTERNAL_DBIS_NAME,A),z.tableId=S.get(Ic),z.tableId||(z.tableId=1),S.putSync(Ic,z.tableId+1),h.tableId=z.tableId,f=LM(d,e,hE({primaryStore:z,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:l,dbisDB:S})),f.schemaVersion=1,T=!0,v(),S.put(Y,h)}m=f.indices,S=S||(u.dbisDb=u.openDB(mE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let U=[];for(let{key:P,value:V}of S.getRange({start:!0})){let[Y,z]=P.toString().split("/");if(z===""&&(z=V.name),z){if(Y!==e)continue}else z=Y;if(!i.find(Se=>Se.name===z)?.indexed&&V.indexed&&!V.isPrimaryKey){v(),T=!0,S.remove(P);let Se=f.indices[Y];Se&&U.push(Se)}}let B=[];try{for(let P of i||[]){if(P.relationship)continue;let V=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:V,configurable:!0});let Y=S.get(V);if(P.isPrimaryKey){if(Y=Y||S.get(V=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let oe=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),T=!0,v(),S.put(V,oe)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==P.type||Y.indexed!==P.indexed||Y.nullable!==P.nullable||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let oe=new _a.default(!0,!1),Se=u.openDB(V,oe);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Vu.workerData?.restartNumber)&&(T=!0,v(),Y=S.get(V),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Vu.workerData?.restartNumber)&&(T=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Se}),P.indexNulls===void 0&&(P.indexNulls=!0),B.push(P)),S.put(V,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Se.indexNulls=P.indexNulls,m[P.name]=Se}else z&&(T=!0,v(),S.put(V,P))}}finally{R&&R()}if(T&&(f.schemaVersion++,f.updatedAttributes()),Dn.trace(`${e} table loading, running index`),B.length>0||U.length>0?f.indexingOperation=c5(f,B,U):T&&TE.signalSchemaChange(new gE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,T)for(let P of Bg)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Dn.trace(`${e} table loaded`),f;function v(){R||u.transactionSync(()=>({then(P){R=P}}))}a(v,"startTxn")}async function c5(e,t,r){try{let n=e.schemaVersion;await TE.signalSchemaChange(new gE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,IM.getIndexedValues)(u[h]);if(m)for(let S=0,A=m.length;S<A;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Dn.error(f)}),Vu.workerData&&Vu.workerData.restartNumber!==wM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>o5?await s:l>a5&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await TE.signalSchemaChange(new gE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Dn.error("Error in indexing",n)}}function l5({table:e,database:t}){let r=Tu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Hg(e){Bg.push(e)}var sr,mE,SE,st,on,wc,_a,Mg,cn,yM,Ug,IM,TE,gE,Vu,Dn,wM,vg,AE,an,ot,Ic,Bg,RE,ro,Cc,o5,a5,Re=Ne(()=>{sr=q(J()),mE=q(_t()),SE=require("lmdb"),st=require("path"),on=require("fs"),wc=q(ze());pE();_a=q(Ef()),Mg=q(pf()),cn=q(w()),yM=q(require("fs-extra")),Ug=require("../index"),IM=q(hr()),TE=q(si()),gE=q(Jn()),Vu=require("worker_threads"),Dn=q(G()),wM=q(tt());xo();tc();vg="data",AE=Symbol("defined-tables");(0,sr.initSync)();an=Object.create(null),ot=Object.create(null);(0,Ug._assignPackageExport)("databases",ot);(0,Ug._assignPackageExport)("tables",an);Ic=Symbol.for("next-table-id"),Bg=[],ro=new Map;a(s5,"getTables");a(es,"getDatabases");a(i5,"resetDatabases");a($u,"readMetaDb");a(CM,"ensureDB");a(LM,"setTable");a(Tu,"database");a(qT,"dropDatabase");a(ft,"table");o5=1e3,a5=10;a(c5,"runIndexing");a(l5,"dropTableMeta");a(Hg,"onUpdatedTable")});var W=g((Yge,VM)=>{"use strict";var no=require("path"),vM=require("fs-extra"),br=G(),DM=require("fs-extra"),OE=require("os"),u5=require("net"),_5=require("recursive-iterator"),at=w(),d5=vm(),PM=require("papaparse"),NE=require("moment"),{inspect:f5}=require("util"),MM=require("is-number"),Vge=require("lodash"),E5=require("minimist"),h5=require("https"),p5=require("http"),{hdb_errors:bE}=se(),m5=/^((\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)))$/,BM=require("util").promisify(setTimeout),S5=100,T5=5,g5="",R5=4,UM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};VM.exports={isEmpty:ln,isEmptyOrZeroLength:Ds,arrayHasEmptyValues:N5,arrayHasEmptyOrZeroLengthValues:b5,buildFolderPath:y5,isBoolean:HM,errorizeMessage:A5,stripFileExtension:w5,autoCast:C5,autoCastJSON:qM,autoCastJSONDeep:xg,removeDir:L5,compareVersions:D5,isCompatibleDataVersion:P5,escapeRawValue:M5,unescapeValue:U5,stringifyProps:v5,timeoutPromise:H5,isClusterOperation:x5,getClusterUser:F5,checkGlobalSchemaTable:G5,getHomeDir:GM,getPropsFilePath:B5,promisifyPapaParse:k5,removeBOM:FM,createEventPromise:$5,checkProcessRunning:V5,checkSchemaTableExist:Y5,checkSchemaExists:kM,checkTableExists:$M,getStartOfTomorrowInSeconds:K5,getLimitKey:W5,isObject:I5,isNotEmptyAndHasValue:O5,autoCasterIsNumberCheck:xM,backtickASTSchemaItems:Q5,isPortTaken:q5,createForkArgs:j5,autoCastBoolean:z5,async_set_timeout:BM,getTableHashAttribute:J5,doesSchemaExist:X5,doesTableExist:Z5,stringifyObj:e8,ms_to_time:t8,changeExtension:r8,getEnvCliRootPath:Gg,noBootFile:n8,httpRequest:s8,transformReq:i8,convertToMS:o8,PACKAGE_ROOT:at.PACKAGE_ROOT};function A5(e){return e instanceof Error?e:new Error(e)}a(A5,"errorizeMessage");function ln(e){return e==null}a(ln,"isEmpty");function O5(e){return!ln(e)&&(e||e===0||e===""||HM(e))}a(O5,"isNotEmptyAndHasValue");function Ds(e){return ln(e)||e.length===0||e.size===0}a(Ds,"isEmptyOrZeroLength");function N5(e){if(ln(e))return!0;for(let t=0;t<e.length;t++)if(ln(e[t]))return!0;return!1}a(N5,"arrayHasEmptyValues");function b5(e){if(Ds(e))return!0;for(let t=0;t<e.length;t++)if(Ds(e[t]))return!0;return!1}a(b5,"arrayHasEmptyOrZeroLengthValues");function y5(...e){try{return e.join(no.sep)}catch{console.error(e)}}a(y5,"buildFolderPath");function HM(e){return ln(e)?!1:e===!0||e===!1}a(HM,"isBoolean");function I5(e){return ln(e)?!1:typeof e=="object"}a(I5,"isObject");function w5(e){return Ds(e)?g5:e.slice(0,-R5)}a(w5,"stripFileExtension");function C5(e){return ln(e)||e===""||typeof e!="string"?e:UM[e]!==void 0?UM[e]:xM(e)===!0?Number(e):m5.test(e)?new Date(e):e}a(C5,"autoCast");function qM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(qM,"autoCastJSON");function xg(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=xg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=xg(r);n!==r&&(e[t]=n)}return e}else return qM(e)}a(xg,"autoCastJSONDeep");function xM(e){if(e.startsWith("0.")&&MM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&MM(e))}a(xM,"autoCasterIsNumberCheck");async function L5(e){if(Ds(e))throw new Error(`Directory path: ${e} does not exist`);try{await DM.emptyDir(e),await DM.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(L5,"removeDir");function D5(e,t){if(Ds(e)){br.info("Invalid current version sent as parameter.");return}if(Ds(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(D5,"compareVersions");function P5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(P5,"isCompatibleDataVersion");function M5(e){if(ln(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(M5,"escapeRawValue");function U5(e){if(ln(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(U5,"unescapeValue");function v5(e,t){if(ln(e))return br.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+OE.EOL}!Ds(n)&&n[0]===";"?r+=" "+n+s+OE.EOL:Ds(n)||(r+=n+"="+s+OE.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(v5,"stringifyProps");function GM(){let e;try{e=OE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(GM,"getHomeDir");function B5(){let e=no.join(GM(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return vM.existsSync(e)||(e=no.join(__dirname,"../","hdb_boot_properties.file")),e}a(B5,"getPropsFilePath");function H5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(H5,"timeoutPromise");async function q5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=u5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(q5,"isPortTaken");function x5(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(x5,"isClusterOperation");function G5(e,t){let r=(Re(),ie(Ge)).getDatabases();if(!r[e])return bE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return bE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(G5,"checkGlobalSchemaTable");function F5(e,t){if(ln(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ln(e)||Ds(e)){br.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(F5,"getClusterUser");function k5(){PM.parsePromise=function(e,t,r){return new Promise(function(n,s){PM.parse(e,{header:!0,transformHeader:FM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(k5,"promisifyPapaParse");function FM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(FM,"removeBOM");function $5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${f5(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a($5,"createEventPromise");async function V5(e){let t=!0,r=0;do await BM(S5*r++),(await d5.findPs(e)).length>0&&(t=!1);while(t&&r<T5);if(t)throw new Error(`process ${e} was not started`)}a(V5,"checkProcessRunning");function Y5(e,t){let r=kM(e);if(r)return r;let n=$M(e,t);if(n)return n}a(Y5,"checkSchemaTableExist");function kM(e){let{getDatabases:t}=(Re(),ie(Ge));if(!t()[e])return bE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kM,"checkSchemaExists");function $M(e,t){let{getDatabases:r}=(Re(),ie(Ge));if(!r()[e][t])return bE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($M,"checkTableExists");function K5(){let e=NE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=NE().utc().unix();return e-t}a(K5,"getStartOfTomorrowInSeconds");function W5(){return NE().utc().format("DD-MM-YYYY")}a(W5,"getLimitKey");function Q5(e){try{let t=new _5(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){br.error("Got an error back ticking items."),br.error(t)}}a(Q5,"backtickASTSchemaItems");function j5(e){return[e]}a(j5,"createForkArgs");function z5(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(z5,"autoCastBoolean");function J5(e,t){let{getDatabases:r}=(Re(),ie(Ge)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(J5,"getTableHashAttribute");function X5(e){let{getDatabases:t}=(Re(),ie(Ge));return t()[e]!==void 0}a(X5,"doesSchemaExist");function Z5(e,t){let{getDatabases:r}=(Re(),ie(Ge));return r()[e]?.[t]!==void 0}a(Z5,"doesTableExist");function e8(e){try{return JSON.stringify(e)}catch{return e}}a(e8,"stringifyObj");function t8(e){let t=NE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(t8,"ms_to_time");function r8(e,t){let r=no.basename(e,no.extname(e));return no.join(no.dirname(e),r+t)}a(r8,"changeExtension");function Gg(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=E5(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Gg,"getEnvCliRootPath");var qg;function n8(){if(qg)return qg;let e=Gg();Gg()&&vM.pathExistsSync(no.join(e,at.HDB_CONFIG_FILE))&&(qg=!0)}a(n8,"noBootFile");function s8(e,t){let r;return e.protocol==="http:"?r=p5:r=h5,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(s8,"httpRequest");function i8(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(i8,"transformReq");function o8(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(o8,"convertToMS")});var J=g((Wge,QM)=>{"use strict";var Fg=require("fs-extra"),da=require("path"),YM=require("os"),a8=require("properties-reader"),Ku=G(),Yu=W(),_e=w(),yE=Et(),c8="Error initializing environment manager",IE="BOOT_PROPS_FILE_PATH",KM=!1,l8={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ui={};QM.exports={BOOT_PROPS_FILE_PATH:IE,getHdbBasePath:u8,setHdbBasePath:_8,get:WM,initSync:f8,setProperty:Me,initTestEnvironment:E8};function u8(){return ui[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(u8,"getHdbBasePath");function _8(e){ui[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(_8,"setHdbBasePath");function WM(e){let t=yE.getConfigValue(e);return t===void 0?ui[e]:t}a(WM,"get");function Me(e,t){l8[e]&&(ui[e]=t),yE.updateConfigObject(e,t)}a(Me,"setProperty");function d8(){let e;try{e=Yu.getPropsFilePath(),Fg.accessSync(e,Fg.constants.F_OK|Fg.constants.R_OK),KM=!0;let t=a8(e);return ui[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),ui[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ui[IE]=e,!0}catch{return Ku.trace(`Environment manager found no properties file at ${e}`),!1}}a(d8,"doesPropFileExist");function f8(e=!1){try{(KM||d8()||Yu.noBootFile())&&(yE.initConfig(e),ui[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=yE.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ku.error(c8),Ku.error(t),console.error(t),process.exit(1)}}a(f8,"initSync");function E8(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=da.join(__dirname,"../../","unitTests");ui[IE]=da.join(l,"hdb_boot_properties.file"),Me(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,da.join(l,"settings.test")),Me(_e.HDB_SETTINGS_NAMES.INSTALL_USER,YM.userInfo()?YM.userInfo().username:void 0),Me(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Me(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,da.join(l,"envDir","log")),Me(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Me(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Me(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Me(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,da.join(l,"envDir")),Me(_e.CONFIG_PARAMS.STORAGE_PATH,da.join(l,"envDir")),s&&(Me(_e.CONFIG_PARAMS.HTTP_SECUREPORT,WM(_e.CONFIG_PARAMS.HTTP_PORT)),Me(_e.CONFIG_PARAMS.HTTP_PORT,null)),Me(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Me(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Me(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yu.isEmpty(i)?!1:i),Me(_e.CONFIG_PARAMS.HTTP_CORS,Yu.isEmpty(i)?!1:i),Me(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Me(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Me(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,da.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Me(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yu.isEmpty(c)?!1:c),o&&(Me("CORS_ACCESSLIST",o),Me(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Me(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Me(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Me(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Me(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${IE}. Please check your boot props and settings files`;Ku.fatal(r),Ku.error(t)}}a(E8,"initTestEnvironment")});var Vg={};$e(Vg,{loadGQLSchema:()=>m8,start:()=>$g,startOnMainThread:()=>p8});function $g({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let B=function(v){if(v.kind==="NonNullType"){let Y=B(v.type);return Y.nullable=!1,Y}if(v.kind==="ListType")return{type:"array",elements:B(v.type)};let V={type:v.name?.value};return Object.defineProperty(V,"location",{value:v.loc.startToken}),V};a(B,"getProperty");let A=S.name.value,T=[],R={table:null,database:null,properties:T};f.set(A,R);for(let v of S.directives){if(v.name.value==="table"){for(let P of v.arguments)R[P.name.value]=P.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=A),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(v.name.value==="sealed"&&(R.sealed=!0),v.name.value==="export"){R.export=!0;for(let P of v.arguments)P.name.value==="name"&&(R.export={name:P.value.value})}}let U=!1;for(let v of S.fields){let P=B(v.type);P.name=v.name.value,T.push(P);for(let V of v.directives)if(V.name.value==="primaryKey")U?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,U=!0);else if(V.name.value==="indexed")P.indexed=!0;else if(V.name.value==="relationship"){let Y={};for(let z of V.arguments)Y[z.name.value]=z.value.value;P.relationship=Y}else if(V.name.value==="createdTime")P.assignCreatedTime=!0;else if(V.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(V.name.value==="expiresAt")P.expiresAt=!0;else if(V.name.value==="allow"){let Y=P.authorizedRoles=[];for(let z of V.arguments)z.name.value==="role"&&Y.push(z.value.value)}}R.type=A,A==="Query"&&(h=R)}function m(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?m(S.elements):h8.includes(S.type)||(0,jM.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let A of S.properties)m(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,kg.dirname)(n),S.tableClass):i.set((0,kg.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var kg,jM,h8,p8,m8,zM=Ne(()=>{kg=require("path");Re();jM=q(tt()),h8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a($g,"start");p8=$g,m8=$g({ensureTable:ft}).handleFile});async function wE(e){return S8?(Wu||(Wu=T8(R8)),(await(await Wu).import(e)).namespace):import(e)}async function T8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Wu=new Compartment({console,Math,Date,fetch:g8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,XM.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Wt,tables:an,databases:ot})}};let n=await(0,JM.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Wu}function g8(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 R8(){return{Resource:Wt,tables:an}}var JM,XM,S8,Wu,Yg=Ne(()=>{Wn();Re();JM=require("fs/promises"),XM=require("path"),S8=!1;a(wE,"secureImport");a(T8,"getCompartment");a(g8,"secureOnlyFetch");a(R8,"getGlobalVars")});var Wg={};$e(Wg,{handleFile:()=>A8});async function A8(e,t,r,n){let s=new Map,i=(0,ZM.pathToFileURL)(r).toString(),o=await wE(i);l(o.default)&&n.set((0,Kg.dirname)(t),o.default),c(o,(0,Kg.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var ZM,Kg,eU=Ne(()=>{ZM=require("url");Yg();Kg=require("path");a(A8,"handleFile")});var jg={};$e(jg,{start:()=>O8});function O8({resources:e}){e.set("login",Qg),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Qg,tU=Ne(()=>{Wn();a(O8,"start");Qg=class extends Wt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var cU={};$e(cU,{parse:()=>Jg,streamAsJSON:()=>Qu,stringify:()=>fa});function Qu(e){return new zg({value:e})}function rU(e){return console.error(e),JSON.stringify(e.toString())}function nU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function fa(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===oU)return aU(e);if(t.resolution)return t.resolution.then(()=>fa(e));throw t}}function aU(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=aU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+fa(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Jg(e){return y8.test(e)?N8.parse(e):JSON.parse(e)}var sU,iU,N8,b8,oU,zg,y8,Xg=Ne(()=>{sU=require("stream"),iU=q(require("json-bigint-fixes")),N8=(0,iU.default)({useNativeBigInt:!0}),b8=1e4,oU={};BigInt.prototype.toJSON=function(){throw oU};a(Qu,"streamAsJSON");zg=class extends sU.Readable{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],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(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 s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),rU)}catch(s){yield rU(s)}else yield fa(t)}else yield fa(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);nU(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>b8?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 nU(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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 n of this.activeIterators)t?n.throw(t):n.return();r()}};a(rU,"handleError");a(nU,"when");a(fa,"stringify");a(aU,"jsStringify");y8=/-?\d{16,}/;a(Jg,"parse")});var CE=g((oRe,lU)=>{"use strict";var I8=In();lU.exports={writeTransaction:w8};function w8(e,t,r){return I8.writeTransaction(e,t,r)}a(w8,"writeTransaction")});var fU=g((lRe,dU)=>{"use strict";var C8=Rr(),L8=wn(),uU=G(),D8=Ar(),cRe=CE(),P8=require("clone"),eR=require("alasql"),M8=Gf(),_U=require("util"),U8=_U.promisify(L8.getTableSchema),v8=_U.promisify(C8.search),B8=w(),Zg=W();M8(eR);dU.exports={update:q8};var H8="There was a problem performing this update. Please check the logs and try again.";async function q8({statement:e,hdb_user:t}){let r=await U8(e.table.databaseid,e.table.tableid),n=x8(e.columns);Zg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=P8(s),c=Zg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=eR.parse(l).statements[0],u=await v8(_),d=G8(n,u);return F8(o,d,t)}a(q8,"update");function x8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=eR.compile(`SELECT ${r.expression.toString()} AS [${B8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw uU.error(t),new Error(H8)}}a(x8,"createUpdateRecord");function G8(e,t){return Zg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(G8,"buildUpdateRecords");async function F8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await D8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){uU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(F8,"updateRecords")});var hU=g((fRe,EU)=>{var k8=require("alasql"),$8=Rr(),V8=G(),Y8=In(),rR=require("util"),tR=W(),K8=w(),W8=wn(),_Re=CE(),dRe=Ar(),Q8="record",j8="successfully deleted",z8=rR.callbackify(e6),J8=rR.promisify($8.search),X8=rR.promisify(W8.getTableSchema);EU.exports={convertDelete:z8};function Z8(e){return`${e.deleted_hashes.length} ${Q8}${e.deleted_hashes.length===1?"":"s"} ${j8}`}a(Z8,"generateReturnMessage");async function e6({statement:e,hdb_user:t}){let r=await X8(e.table.databaseid,e.table.tableid);tR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=tR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=k8.parse(o).statements[0],l={operation:K8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await J8(c);let _=await Y8.deleteRecords(l);return tR.isEmptyOrZeroLength(_.message)&&(_.message=Z8(_)),delete _.txn_time,_}catch(_){throw V8.error(_),_.hdb_code?_.message:_}}a(e6,"convertDelete")});var gU=g((hRe,TU)=>{"use strict";var t6=ji(),{hdb_errors:pU}=se(),{getDatabases:mU}=(Re(),ie(Ge));TU.exports={checkSchemaExists:SU,checkSchemaTableExists:r6,schema_describe:t6};async function SU(e){if(!mU()[e])return pU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(SU,"checkSchemaExists");async function r6(e,t){let r=await SU(e);if(r)return r;if(!mU()[e][t])return pU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(r6,"checkSchemaTableExists")});var ht=g((RRe,GU)=>{"use strict";var jt=J();jt.initSync();var n6=require("fs-extra"),s6=require("semver"),Ju=require("path"),{monotonicFactory:i6}=require("ulidx"),AU=i6(),o6=require("util"),OU=require("child_process"),a6=o6.promisify(OU.exec),c6=OU.spawn,Ie=et(),ve=w(),oR=W(),un=G(),LE=ci(),l6=CE(),ju=Et(),{onMessageByType:u6}=tt(),{isMainThread:_6}=require("worker_threads"),{Encoder:d6,decode:aR}=require("msgpackr"),NU=new d6,{isEmpty:ma}=oR,bU=Nr(),f6=48*36e11,E6=5e9;_6&&u6(ve.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,pa=void 0});var{connect:h6,StorageType:yU,RetentionPolicy:IU,AckPolicy:DE,DeliverPolicy:PE,DiscardPolicy:p6,NatsConnection:mRe,JetStreamManager:SRe,JetStreamClient:TRe,StringCodec:gRe,JSONCodec:m6,createInbox:cR,headers:S6,ErrorCode:RU}=require("nats"),{PACKAGE_ROOT:T6}=w(),g6=Bo(),{recordAction:R6}=(li(),ie(Pu)),wU=m6(),A6="clustering",O6=g6.engines[Ie.NATS_SERVER_NAME],N6=Ju.join(T6,"dependencies"),iR=Ju.join(N6,`${process.platform}-${process.arch}`,Ie.NATS_BINARY_NAME),nR,sR,zu,Ea,ha;GU.exports={runCommand:CU,checkNATSServerInstalled:b6,createConnection:lR,getConnection:ME,getJetStreamManager:Xu,getJetStream:DU,getNATSReferences:yr,getServerList:I6,createLocalStream:uR,listStreams:PU,deleteLocalStream:w6,getServerConfig:Zu,listRemoteStreams:C6,viewStream:L6,viewStreamIterator:D6,publishToStream:P6,createWorkQueueStream:M6,addSourceToWorkStream:UU,request:v6,removeSourceFromWorkStream:BU,reloadNATS:_R,reloadNATSHub:B6,reloadNATSLeaf:H6,extractServerName:vU,requestErrorHandler:q6,updateWorkStream:x6,createLocalTableStream:qU,createTableStreams:G6,purgeTableStream:xU,purgeSchemaTableStreams:F6,getStreamInfo:k6,updateLocalStreams:V6,closeConnection:y6,getJsmServerName:e_,addNatsMsgHeader:MU,updateIngestStreamConsumer:U6,clearClientCache:LU};async function CU(e,t=void 0){let{stdout:r,stderr:n}=await a6(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
7
|
+
`)},eX="certificate.pem",tX="privateKey.pem",rX="ca.pem";rP.exports={CERTIFICATE_VALUES:Z3,CERTIFICATE_PEM_NAME:eX,PRIVATEKEY_PEM_NAME:tX,CA_PEM_NAME:rX}});var ag=g((qTe,aP)=>{"use strict";var oP=require("fs-extra"),ae=require("joi"),nX=require("os"),{boolean:Ie,string:Nr,number:Pt,array:og}=ae.types(),{totalmem:nP}=require("os"),ra=require("path"),sX=G(),Xf=W(),HTe=ig(),sP=C(),iX=rt(),iP="log",oX="components",aX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",cX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",lX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",uX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",_X="rootPath config parameter is undefined",dX="clustering.enabled config parameter is undefined",na=Pt.min(0).required(),Zf=og.items({host:Nr.required(),port:na}).empty(null),ws;aP.exports={configValidator:fX,routesValidator:TX,route_constraints:Zf};function fX(e){if(ws=e.rootPath,Xf.isEmpty(ws))throw _X;let t=Ie.required(),r=Pt.min(0).max(1e3).empty(null).default(SX),n=Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Nu),s=Nr.optional().empty(null),i=Nr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ae.string().empty(null).default(Nu),c=ae.custom(hX).empty(null).default(Nu),l=e.clustering?.enabled;if(Xf.isEmpty(l))throw dX;let _;return l===!0?_=ae.object({enabled:t,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:na,routes:Zf}).required()}).required(),leafNodes:ae.object({network:ae.object({port:na}).required()}).required(),network:ae.object({port:na}).required()}).required(),leafServer:ae.object({network:ae.object({port:na,routes:Zf}).required(),streams:ae.object({maxAge:Pt.min(120).allow(null).optional(),maxBytes:Pt.min(1).allow(null).optional(),maxMsgs:Pt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required(),verify:Ie.optional()}),user:Nr.optional().empty(null)}).required():_=ae.object({enabled:t,tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Ie.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:Ie,cacheTTL:Pt.required(),enableSessions:Ie}),analytics:ae.object({aggregatePeriod:Pt}),componentsRoot:n.optional(),clustering:_,localStudio:ae.object({enabled:t}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Nr.custom(mX).optional().empty(null),maxSize:Nr.custom(pX).optional().empty(null),path:Nr.optional().empty(null).default(Nu)}).required(),root:n,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ae.object({network:ae.object({cors:Ie.optional(),corsAccessList:og.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(Nu),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:na,securePort:na,mtls:ae.alternatives([Ie.optional(),ae.object({user:Nr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ae.object({compressionThreshold:Pt.optional(),cors:Ie.optional(),corsAccessList:og.optional(),headersTimeout:Pt.min(1).optional(),port:Pt.min(0).optional().empty(null),securePort:Pt.min(0).optional().empty(null),mtls:ae.alternatives([Ie.optional(),ae.object({user:Nr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),threads:ae.alternatives(r.optional(),ae.object({count:r.optional(),debug:ae.alternatives(Ie.optional(),ae.object({startingPort:Pt.min(1).optional(),host:Nr.optional(),waitForDebugger:Ie.optional()})),maxHeapMemory:Pt.min(0).optional()})),storage:ae.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ae.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Nr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fX,"configValidator");function EX(e){return oP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(EX,"doesPathExist");function hX(e,t){ae.assert(e,Nr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=EX(e);if(r)return t.message(r)}a(hX,"validatePath");function pX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(aX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(lX):e}a(pX,"validateRotationMaxSize");function mX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(cX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(uX):e}a(mX,"validateRotationInterval");function SX(e,t){let r=t.state.path.join("."),n=nX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||nP();return i=Math.round(Math.min(i,nP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),sX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(SX,"setDefaultThreads");function Nu(e,t){let r=t.state.path.join(".");if(!Xf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Xf.isEmpty(ws))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ra.join(ws,oX);case"logging.root":return ra.join(ws,iP);case"clustering.leafServer.streams.path":return ra.join(ws,"clustering","leaf");case"storage.path":let n=ra.join(ws,sP.LEGACY_DATABASES_DIR_NAME);return oP.existsSync(n)?n:ra.join(ws,sP.DATABASES_DIR_NAME);case"logging.rotation.path":return ra.join(ws,iP);case"operationsApi.network.domainSocket":return r==null?null:ra.join(ws,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Nu,"setDefaultRoot");function TX(e){let t=ae.object({routes:Zf});return iX.validateBySchema({routes:e},t)}a(TX,"routesValidator")});var Et=g((FTe,pP)=>{"use strict";var tn=C(),kt=W(),Mt=G(),{configValidator:gX,routesValidator:cP}=ag(),br=require("fs-extra"),RX=require("yaml"),ns=require("path"),AX=require("is-number"),uP=require("properties-reader"),OX=require("lodash"),{handleHDBError:NX}=se(),{HTTP_STATUS_CODES:bX,HDB_ERROR_MSGS:eE}=Kr(),GTe=require("minimist"),{server:yX}=(Er(),ie(Ho)),{DATABASES_PARAM_CONFIG:bu,CONFIG_PARAMS:en,CONFIG_PARAM_MAP:ss}=tn,IX="Unable to get config value because config is uninitialized",wX="Config successfully initialized",CX="Error backing up config file",LX="Empty parameter sent to getConfigValue",_P=ns.join(tn.PACKAGE_ROOT,"config","yaml",tn.HDB_DEFAULT_CONFIG_FILE),DX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",lP={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"},tE,Ut,rE;pP.exports={createConfigFile:PX,getDefaultConfig:MX,getConfigValue:fP,initConfig:lg,flattenConfig:gc,updateConfigValue:EP,updateConfigObject:vX,getConfiguration:qX,setConfiguration:xX,readConfigFile:_g,getClusteringRoutes:GX,initOldConfig:hP,getConfigFromFile:FX,getConfigFilePath:sa,addConfig:kX,deleteConfigFromFile:$X,getConfigObj:VX};function PX(e){let t=Xi(_P);tE=gc(t.toJSON());let r;for(let o in e){let c=ss[o.toLowerCase()];if(c===en.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=cg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Mt.error(u)}}}r&&dP(t,r),ug(t);let n=t.toJSON();Ut=gc(n);let s=t.getIn(["rootPath"]),i=ns.join(s,tn.HDB_CONFIG_FILE);br.createFileSync(i),br.writeFileSync(i,String(t)),Mt.trace(`Config file written to ${i}`)}a(PX,"createConfigFile");function dP(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!kt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(bu.TABLES))for(let i in n[s][bu.TABLES])for(let o in n[s][bu.TABLES][i]){let c=n[s][bu.TABLES][i][o],l=[en.DATABASES,s,bu.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[en.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Mt.error("Error parsing schemas CLI/env config arguments",n)}}a(dP,"setSchemasConfig");function MX(e){if(tE===void 0){let r=Xi(_P);tE=gc(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return tE[t.toLowerCase()]}a(MX,"getDefaultConfig");function fP(e){if(e==null){Mt.error(LX);return}if(Ut===void 0){Mt.trace(IX);return}let t=ss[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(fP,"getConfigValue");function sa(e=kt.getPropsFilePath()){let t=kt.getEnvCliRootPath();return t?ns.join(t,tn.HDB_CONFIG_FILE):uP(e).get(tn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(sa,"getConfigFilePath");function lg(e=!1){if(Ut===void 0||e){let t;if(!kt.noBootFile()){t=kt.getPropsFilePath();try{br.accessSync(t,br.constants.F_OK|br.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=sa(t),n;if(r.includes("config/settings.js"))try{hP(r);return}catch(i){if(i.code!==tn.NODE_ERROR_CODES.ENOENT)throw i}try{n=Xi(r)}catch(i){if(i.code===tn.NODE_ERROR_CODES.ENOENT){Mt.trace(`HarperDB config file not found at ${r}.
|
|
8
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Mt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}UX(n,r),ug(n);let s=n.toJSON();if(yX.config=s,Ut=gc(s),Ut.logging_rotation_rotate)for(let i in lP)Ut[i]&&Mt.error(`Config ${lP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(wX)}}a(lg,"initConfig");function UX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ns.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ns.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ns.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Mt.trace("Updating config file with missing config params"),br.writeFileSync(t,String(e)))}a(UX,"checkForUpdatedConfig");function ug(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=gX(t);if(r.error)throw eE.CONFIG_VALIDATION(r.error.message);typeof r.value.threads=="object"?e.setIn(["threads","count"],r.value.threads.count):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),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(ug,"validateConfig");function vX(e,t){Ut===void 0&&(Ut={});let r=ss[e.toLowerCase()];if(r===void 0){Mt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a(vX,"updateConfigObject");function EP(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&lg();let o=fP(ss.hdb_root),c=ns.join(o,tn.HDB_CONFIG_FILE),l=Xi(c),_;if(r===void 0&&e.toLowerCase()===en.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=cg(f,t);l.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===en.HTTP_SECUREPORT&&r[f]===Ut[en.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===en.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[en.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===en.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=tn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=cg(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(A){Mt.error(A)}}}_&&dP(l,_),ug(l);let u=l.getIn(["rootPath"]),d=ns.join(u,tn.HDB_CONFIG_FILE);n===!0&&BX(c,u),br.writeFileSync(d,String(l)),s&&(Ut=gc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(EP,"updateConfigValue");function BX(e,t){try{let r=ns.join(t,"backup",`${tn.HDB_CONFIG_FILE}.bak`);br.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(CX),Mt.error(r)}}a(BX,"backupConfigFile");var HX=["databases"];function gc(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)),rE=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!HX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!en[l.toUpperCase()]&&ss[l]&&(s[ss[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(gc,"flattenConfig");function cg(e,t){if(e===en.CLUSTERING_NODENAME||e===en.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(AX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||kt.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 kt.autoCast(t)}a(cg,"castConfigValue");function qX(){let e=kt.getPropsFilePath(),t=sa(e);return Xi(t).toJSON()}a(qX,"getConfiguration");async function xX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return EP(void 0,void 0,s,!0),DX}catch(i){throw typeof i=="string"||i instanceof String?NX(i,i,bX.BAD_REQUEST,void 0,void 0,!0):i}}a(xX,"setConfiguration");function _g(){let e=kt.getPropsFilePath();try{br.accessSync(e,br.constants.F_OK|br.constants.R_OK)}catch(n){if(!kt.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=sa(e);return Xi(t).toJSON()}a(_g,"readConfigFile");function Xi(e){return RX.parseDocument(br.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xi,"parseYamlDoc");function GX(){let e=_g(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=kt.isEmptyOrZeroLength(t)?[]:t;let r=cP(t);if(r)throw eE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=kt.isEmptyOrZeroLength(n)?[]:n;let s=cP(n);if(s)throw eE.CONFIG_VALIDATION(s.message);if(!kt.isEmptyOrZeroLength(n)&&!kt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!kt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw eE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(GX,"getClusteringRoutes");function hP(e){let t=uP(e);Ut={};for(let r in ss){let n=t.get(r.toUpperCase());if(kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ss[r].toLowerCase();s===en.LOGGING_ROOT?Ut[s]=ns.dirname(n):Ut[s]=n}return Ut}a(hP,"initOldConfig");function FX(e){let t=_g();return OX.get(t,e.replaceAll("_","."))}a(FX,"getConfigFromFile");async function kX(e,t){let r=Xi(sa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await br.writeFile(sa(),String(r))}a(kX,"addConfig");function $X(e){let t=sa(kt.getPropsFilePath()),r=Xi(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ns.join(n,tn.HDB_CONFIG_FILE);br.writeFileSync(s,String(r))}a($X,"deleteConfigFromFile");function VX(){return rE||(lg(),rE)}a(VX,"getConfigObj")});var SP=g(($Te,mP)=>{"use strict";var nE=C(),sE=class{static{a(this,"BaseLicense")}constructor(t=0,r=nE.RAM_ALLOCATION_ENUM.DEFAULT,n=nE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},dg=class extends sE{static{a(this,"ExtendedLicense")}constructor(t=0,r=nE.RAM_ALLOCATION_ENUM.DEFAULT,n=nE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};mP.exports={BaseLicense:sE,ExtendedLicense:dg}});var ia=g((YTe,NP)=>{"use strict";var Ac=require("fs-extra"),gP=Jf(),RP=require("crypto"),YX=require("moment"),KX=require("uuid").v4,sr=G(),Eg=require("path"),WX=W(),Zi=C(),{totalmem:TP}=require("os"),QX=SP().ExtendedLicense,Rc="invalid license key format",jX="061183",zX="mofi25",JX="aes-256-cbc",XX=16,ZX=32,AP=J();AP.initSync();var fg;NP.exports={validateLicense:OP,generateFingerPrint:tZ,licenseSearch:mg,getLicense:sZ,checkMemoryLimit:iZ};function hg(){return Eg.join(AP.getHdbBasePath(),Zi.LICENSE_KEY_DIR_NAME,Zi.LICENSE_FILE_NAME)}a(hg,"getLicenseDirPath");function eZ(){let e=hg();return Eg.join(e,Zi.LICENSE_FILE_NAME)}a(eZ,"getLicenseFilePath");function pg(){let e=hg();return Eg.join(e,Zi.REG_KEY_FILE_NAME)}a(pg,"getFingerPrintFilePath");async function tZ(){let e=pg();try{return await Ac.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await rZ();throw sr.error(`Error writing fingerprint file to ${e}`),sr.error(t),new Error("There was an error generating the fingerprint")}}a(tZ,"generateFingerPrint");async function rZ(){let e=KX(),t=gP.hash(e),r=pg();try{await Ac.mkdirp(hg()),await Ac.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw sr.error(`Error writing fingerprint file to ${r}`),sr.error(n),new Error("There was an error generating the fingerprint")}return t}a(rZ,"writeFingerprint");function OP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Zi.RAM_ALLOCATION_ENUM.DEFAULT,version:Zi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return sr.error("empty license key passed to validate."),r;let n=pg(),s=!1;try{s=Ac.statSync(n)}catch(i){sr.error(i)}if(s){let i;try{i=Ac.readFileSync(n,"utf8")}catch{sr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(zX),c=o[1];c=Buffer.concat([Buffer.from(c)],XX);let l=Buffer.concat([Buffer.from(i)],ZX),_=RP.createDecipheriv(JX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=nZ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Rc),sr.error(Rc),new Error(Rc)}let d;if(isNaN(u))try{d=JSON.parse(u),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(Rc),sr.error(Rc),new Error(Rc)}else r.exp_date=u;r.exp_date<YX().valueOf()&&(r.valid_date=!1),gP.validate(o[1],`${jX}${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||sr.error("Invalid licence"),r}a(OP,"validateLicense");function nZ(e,t){try{let r=RP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{sr.warn("Check old license failed")}}a(nZ,"checkOldLicense");function mg(){let e=new QX,t=[];try{t=Ac.readFileSync(eZ(),"utf-8").split(Zi.NEW_LINE)}catch(r){r.code==="ENOENT"?sr.info("no license file found"):sr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(WX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=OP(s.license_key,s.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(s){sr.error("There was an error parsing the license string."),sr.error(s),e.ram_allocation=Zi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return fg=e,e}a(mg,"licenseSearch");async function sZ(){return fg||await mg(),fg}a(sZ,"getLicense");function iZ(){let e=mg().ram_allocation,t=process.constrainedMemory?.()||TP();if(t=Math.round(Math.min(t,TP())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(iZ,"checkMemoryLimit")});var yr=g((zTe,GP)=>{"use strict";var wP="username is required",CP="nothing to update, must supply active, role or password to update",LP="password cannot be an empty string",DP="If role is specified, it cannot be empty.",PP="active must be true or false";GP.exports={addUser:EZ,alterUser:hZ,dropUser:mZ,getSuperUser:RZ,userInfo:SZ,listUsers:oE,listUsersExternal:TZ,setUsersToGlobal:Nc,findAndValidateUser:qP,getClusterUser:AZ,USERNAME_REQUIRED:wP,ALTERUSER_NOTHING_TO_UPDATE:CP,EMPTY_PASSWORD:LP,EMPTY_ROLE:DP,ACTIVE_BOOLEAN:PP};var MP=Or(),oZ=ta(),gg=Jf(),UP=ZD(),vP=Ar(),Rg=si(),rn=W(),BP=require("validate.js"),Ae=G(),{promisify:aZ}=require("util"),Ag=ci(),bP=C(),yP=et(),cZ=Et(),WTe=J(),QTe=ia(),lZ=ti(),{table:jTe}=(Re(),ie(Ge)),{handleHDBError:Cs,hdb_errors:uZ}=se(),{HTTP_STATUS_CODES:Ls,AUTHENTICATION_ERROR_MSGS:Sg,HDB_ERROR_MSGS:Oc}=uZ,{UserEventMsg:Og}=Jn(),Tg=require("lodash"),{server:Ng}=(Er(),ie(Ho)),_Z=G();Ng.getUser=(e,t)=>qP(e,t,t!=null);var HP={username:!0,active:!0,role:!0,password:!0},IP=new Map,iE=vP.searchByValue,dZ=vP.searchByHash,fZ=aZ(oZ.delete);async function EZ(e){let t=BP.cleanAttributes(e,HP),r=UP.addUserValidation(t);if(r)throw Cs(new Error,r.message,Ls.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await iE(n),s=s&&Array.from(s)}catch(l){throw Ae.error("There was an error searching for a role in add user"),Ae.error(l),l}if(!s||s.length<1)throw Cs(new Error,Oc.ROLE_NAME_NOT_FOUND(t.role),Ls.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Cs(new Error,Oc.DUP_ROLES_FOUND(t.role),Ls.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Ag.encrypt(t.password)),t.password=gg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await MP.insert(i)}catch(l){throw Ae.error("There was an error searching for a user."),Ae.error(l),l}Ae.debug(o);try{await Nc()}catch(l){throw Ae.error("Got an error setting users to global"),Ae.error(l),l}if(o.skipped_hashes.length===1)throw Cs(new Error,Oc.USER_ALREADY_EXISTS(t.username),Ls.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Rg.signalUserChange(new Og(process.pid)),`${c.username} successfully added`}a(EZ,"addUser");async function hZ(e){let t=BP.cleanAttributes(e,HP);if(rn.isEmptyOrZeroLength(t.username))throw new Error(wP);if(rn.isEmptyOrZeroLength(t.password)&&rn.isEmptyOrZeroLength(t.role)&&rn.isEmptyOrZeroLength(t.active))throw new Error(CP);if(!rn.isEmpty(t.password)&&rn.isEmptyOrZeroLength(t.password.trim()))throw new Error(LP);if(!rn.isEmpty(t.active)&&!rn.isBoolean(t.active))throw new Error(PP);let r=pZ(t.username);if(!rn.isEmpty(t.password)&&!rn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ag.encrypt(t.password)),t.password=gg.hash(t.password)),t.role==="")throw new Error(DP);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 iE(i)||[])}catch(c){throw Ae.error("Got an error searching for a role."),Ae.error(c),c}if(!o||o.length===0){let c=Oc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ae.error(c),Cs(new Error,c,Ls.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Oc.ALTER_USER_DUP_ROLES(t.role);throw Ae.error(c),Cs(new Error,c,Ls.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await MP.update(n)}catch(i){throw Ae.error("Error during update."),Ae.error(i),i}try{await Nc()}catch(i){throw Ae.error("Got an error setting users to global"),Ae.error(i),i}return Rg.signalUserChange(new Og(process.pid)),s}a(hZ,"alterUser");function pZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(pZ,"isClusterUser");async function mZ(e){try{let t=UP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(rn.isEmpty(global.hdb_users.get(e.username)))throw Cs(new Error,Oc.USER_NOT_EXIST(e.username),Ls.NOT_FOUND,void 0,void 0,!0);let n;try{n=await fZ(r)}catch(s){throw Ae.error("Got an error deleting a user."),Ae.error(s),s}Ae.debug(n);try{await Nc()}catch(s){throw Ae.error("Got an error setting users to global."),Ae.error(s),s}return Rg.signalUserChange(new Og(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(mZ,"dropUser");async function SZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Tg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await dZ(r)}catch(s){throw Ae.error("Got an error searching for a role."),Ae.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ae.error(r),r}return t}a(SZ,"userInfo");async function TZ(){let e;try{e=await oE()}catch(t){throw Ae.error("Got an error listing users."),Ae.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(TZ,"listUsersExternal");async function oE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await iE(e)}catch(o){throw Ae.error("Got an error searching for roles."),Ae.error(o),o}let r={};for(let o of t)r[o.id]=Tg.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await iE(n)}catch(o){throw Ae.error("Got an error searching for users."),Ae.error(o),o}let i=new Map;for(let o of s)o=Tg.cloneDeep(o),o.role=r[o.role],gZ(o.role),i.set(o.username,o);return i}catch(e){throw Ae.error("got an error listing users"),Ae.error(e),rn.errorizeMessage(e)}return null}a(oE,"listUsers");function gZ(e){try{if(!e){Ae.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(lZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ae.error("Got an error trying to set system permissions."),Ae.error(t)}}a(gZ,"appendSystemTablesToRole");async function Nc(){try{let e=await oE();global.hdb_users=e}catch(e){throw Ae.error(e),e}}a(Nc,"setUsersToGlobal");async function qP(e,t,r=!0){global.hdb_users||await Nc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Cs(new Error,Sg.GENERIC_AUTH_FAIL,Ls.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Cs(new Error,Sg.USER_INACTIVE,Ls.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(IP.get(t)===n.password)return s;if(gg.validate(n.password,t))IP.set(t,n.password);else throw Cs(new Error,Sg.GENERIC_AUTH_FAIL,Ls.UNAUTHORIZED,void 0,void 0,!0)}return s}a(qP,"findAndValidateUser");async function RZ(){global.hdb_users||await Nc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(RZ,"getSuperUser");async function AZ(){let e=await oE(),t=cZ.getConfigFromFile(bP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!rn.isEmpty(r)&&r?.role?.role===bP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Ag.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+yP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+yP.SERVER_SUFFIX.ADMIN,r}a(AZ,"getClusterUser");var xP=[];Ng.invalidateUser=function(e){for(let t of xP)try{t(e)}catch(r){_Z.error("Error invalidating user",r)}};Ng.onInvalidatedUser=function(e){xP.push(e)}});var Iu=g((ege,VP)=>{"use strict";var oa=G(),nn=C(),OZ=zI(),XTe=wn(),ZTe=ji(),NZ=yr(),{validateEvent:FP}=Jn(),yu=In(),bZ=require("process"),{resetDatabases:yZ}=(Re(),ie(Ge)),IZ={[nn.ITC_EVENT_TYPES.SCHEMA]:wZ,[nn.ITC_EVENT_TYPES.USER]:$P};async function wZ(e){let t=FP(e);if(t){oa.error(t);return}oa.trace("ITC schemaHandler received schema event:",e),await OZ(e.message),await CZ(e.message)}a(wZ,"schemaHandler");async function CZ(e){try{yu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),yu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),yu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=yZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){oa.error(t)}}a(CZ,"syncSchemaMetadata");var kP=[];async function $P(e){try{try{yu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),yu.resetReadTxn(nn.SYSTEM_SCHEMA_NAME,nn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){oa.warn(r)}let t=FP(e);if(t){oa.error(t);return}oa.trace(`ITC userHandler ${nn.HDB_ITC_CLIENT_PREFIX}${bZ.pid} received user event:`,e),await NZ.setUsersToGlobal();for(let r of kP)r()}catch(t){oa.error(t)}}a($P,"userHandler");$P.addListener=function(e){kP.push(e)};VP.exports=IZ});var Jn=g((oge,KP)=>{"use strict";var rge=G(),bg=W(),LZ=C(),{ITC_ERRORS:wu}=Kr(),{parentPort:nge,threadId:DZ,isMainThread:PZ,workerData:sge}=require("worker_threads"),{onMessageFromWorkers:MZ,broadcast:ige,broadcastWithAcknowledgement:UZ}=tt();KP.exports={sendItcEvent:vZ,validateEvent:YP,SchemaEventMsg:BZ,UserEventMsg:HZ};var aE;MZ(async(e,t)=>{aE=aE||Iu(),YP(e),aE[e.type]&&await aE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function vZ(e){return!PZ&&e.message&&(e.message.originator=DZ),UZ(e)}a(vZ,"sendItcEvent");function YP(e){if(typeof e!="object")return wu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bg.isEmpty(e.type))return wu.MISSING_TYPE;if(!e.hasOwnProperty("message")||bg.isEmpty(e.message))return wu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bg.isEmpty(e.message.originator))return wu.MISSING_ORIGIN;if(LZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wu.INVALID_EVENT(e.type)}a(YP,"validateEvent");function BZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(BZ,"SchemaEventMsg");function HZ(e){this.originator=e}a(HZ,"UserEventMsg")});var si=g((lge,zP)=>{"use strict";var WP=C(),cge=W(),cE=G(),QP=PI(),bc,{sendItcEvent:jP}=Jn();function qZ(e){try{cE.trace("signalSchemaChange called with message:",e),bc=bc||Iu();let t=new QP(WP.ITC_EVENT_TYPES.SCHEMA,e);return bc.schema(t),jP(t)}catch(t){cE.error(t)}}a(qZ,"signalSchemaChange");function xZ(e){try{cE.trace("signalUserChange called with message:",e),bc=bc||Iu();let t=new QP(WP.ITC_EVENT_TYPES.USER,e);return bc.user(t),jP(t)}catch(t){cE.error(t)}}a(xZ,"signalUserChange");zP.exports={signalSchemaChange:qZ,signalUserChange:xZ}});var Pu={};$e(Pu,{addAnalyticsListener:()=>Du,recordAction:()=>sn,recordActionBinary:()=>Cn,setAnalyticsEnabled:()=>GZ});function GZ(e){oM=e}function sn(e,t,r,n,s){if(!oM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=_E.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=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:n,type:s},_E.set(i,o)}lE||FZ()}function Cn(e,t,r,n,s){sn(!!e,t,r,n,s)}function Du(e){lM.push(e)}function FZ(){lE=performance.now(),setTimeout(async()=>{let e=performance.now()-lE;lE=0;let t=[],r={time:Date.now(),period:e,threadId:aa.threadId,metrics:t};for(let[s,i]of _E){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of uM){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=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 _M()}let n=process.memoryUsage();t.push({metric:"memory",threadId:aa.threadId,byThread:!0,...n});for(let s of lM)s(t);_E=new Map,aa.parentPort?aa.parentPort.postMessage({type:cM,report:r}):EM({report:r})},aM).unref()}async function kZ(e,t=6e4){let r=wg(),n=dM(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,l=[],_;for(let{key:h,value:m}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=m;for(let T of S||[]){let{path:R,method:U,type:B,metric:v,count:P,total:V,distribution:Y,threads:z,...oe}=T;P||(P=1);let Se=v+(R?"-"+R:"");U!==void 0&&(Se+="-"+U),B!==void 0&&(Se+="-"+B);let ue=o.get(Se);if(ue){if(ue.threads){let de=ue.threads[A];if(de)ue=de;else{ue.threads[A]=Object.assign({},oe);continue}}ue.count||(ue.count=1);let Fe=ue.count;for(let de in oe){let Gt=oe[de];typeof Gt=="number"&&(ue[de]=(ue[de]*Fe+Gt*P)/(Fe+P))}ue.count+=P,V>=0&&(ue.total+=V,ue.ratio=ue.total/ue.count)}else ue=Object.assign({period:t},T),delete ue.distribution,o.set(Se,ue),ue.byThread&&(ue.threads=[],ue.threads[A]=Object.assign({},oe),l.push(ue));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let Fe=c.get(Se);Fe?Fe.push(...Y):c.set(Se,Y)}}await _M()}for(let h of l){let{path:m,method:S,type:A,metric:T,count:R,total:U,distribution:B,threads:v,...P}=h;v=v.filter(V=>V);for(let V in P){if(typeof h[V]!="number")continue;let Y=0;for(let z of v){let oe=z[V];typeof oe=="number"&&(Y+=oe)}h[V]=Y}h.count=v.length,delete h.threads,delete h.byThread}for(let[h,m]of c){let S=o.get(h);m.sort((de,Gt)=>de.value>Gt.value?1:-1);let A=S.count-1,T=[],R=0,U=0,B;for(let de of uM){let Gt=A*de;for(;R<Gt;)B=m[U++],R+=B.count,U===1&&R--;let Rd=m[U>1?U-2:0];B||(B=m[0]),T.push(B.value-(B.value-Rd.value)*(R-Gt)/B.count)}let[v,P,V,Y,z,oe,Se,ue,Fe]=T;Object.assign(S,{p1:v,p10:P,p25:V,median:Y,p75:z,p90:oe,p95:Se,p99:ue,p999:Fe})}let u;for(let[h,m]of o)m.id=(0,uE.getNextMonotonicTime)(),m.time=_,n.primaryStore.put(m.id,m,{append:!0}).then(S=>{S||n.primaryStore.put(m.id,m)}),u=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(u||E*10>f){let h=(0,uE.getNextMonotonicTime)(),m={id:h,metric:"main-thread-utilization",idle:f-JP,active:E-XP,time:d,...process.memoryUsage()};n.primaryStore.put(h,m,{append:!0}).then(S=>{S||n.primaryStore.put(h,m)})}JP=f,XP=E}async function ZP(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function wg(){return eM||(eM=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function dM(){return tM||(tM=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function YZ(){fM=!0;let e=(0,Lu.get)(Ig.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await kZ(aM,e),await ZP(wg(),$Z),await ZP(dM(),VZ)},Math.min(e/2,2147483647)).unref()}function EM(e,t){let r=e.report;r.threadId=t?.threadId||aa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(rM+=n.mean*n.count);r.totalBytesProcessed=rM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(nM.get(t))}),nM.set(t,t.performance.eventLoopUtilization())),r.id=(0,uE.getNextMonotonicTime)(),wg().primaryStore.put(r.id,r),fM||YZ(),KZ&&(hM=QZ(r))}async function QZ(e){if(await hM,!eo){let r=(0,Cu.dirname)((0,iM.getLogFilePath)());try{eo=await(0,yg.open)((0,Cu.join)(r,"analytics.log"),"r+")}catch{eo=await(0,yg.open)((0,Cu.join)(r,"analytics.log"),"w+")}}let t=(await eo.stat()).size;if(t>WZ){let r=Buffer.alloc(t);await eo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await eo.write(r,{position:0}),await eo.truncate(r.length),t=r.length}await eo.write(JSON.stringify(e)+`
|
|
9
|
+
`,t)}var aa,sM,iM,Cu,yg,uE,Lu,Ig,_E,oM,lE,aM,cM,lM,uM,JP,XP,_M,$Z,VZ,eM,tM,fM,rM,nM,KZ,hM,eo,WZ,li=Ne(()=>{aa=require("worker_threads"),sM=q(tt());Re();iM=q(G()),Cu=require("path"),yg=require("fs/promises"),uE=q(pr()),Lu=q(J()),Ig=q(C());Er();(0,Lu.initSync)();_E=new Map,oM=(0,Lu.get)(Ig.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(GZ,"setAnalyticsEnabled");a(sn,"recordAction");it.recordAnalytics=sn;a(Cn,"recordActionBinary");lE=0,aM=1e3,cM="analytics-report",lM=[];a(Du,"addAnalyticsListener");uM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(FZ,"sendAnalytics");a(kZ,"aggregation");JP=0,XP=0,_M=a(()=>new Promise(setImmediate),"rest");a(ZP,"cleanup");$Z=36e5,VZ=31536e6;a(wg,"getRawAnalyticsTable");a(dM,"getAnalyticsTable");(0,sM.setChildListenerByType)(cM,EM);a(YZ,"startScheduledTasks");rM=0,nM=new Map,KZ=!1;a(EM,"recordAnalytics");WZ=1e6;a(QZ,"logAnalytics")});var pM={};$e(pM,{Headers:()=>to,appendHeader:()=>Cg});function Cg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var to,Mu=Ne(()=>{to=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 n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Cg,"appendHeader")});var Mg={};$e(Mg,{coerceType:()=>dE,makeTable:()=>hE,setServerUtilities:()=>n5,updateResource:()=>fE});function hE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:m}=e;m||(m=[]),CI(i,l);let S=jm(i,n,l),A=0,T,R,U={},B=Promise.resolve(),v,P,V;for(let Q of m)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(v=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(P=Q),Q.expiresAt&&(V=Q),Q.isPrimaryKey&&(U=Q);let Y,z=[],oe=[],Se=1,ue=2,Fe={},de={},Gt=864e5,Rd,Ad,vi,vb=!1,Sm,eV=i.getRange({start:!1,end:!1}).constructor,tV=10,rV=6;E&&qb();class Xe extends Qt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=m;static expirationTimer;static createdTimeProperty=v;static updatedTimeProperty=P;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),R=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let I=a(D=>{let y=this.sources.slice(0,-1);if(y=y.filter(M=>M[D]&&(!M[D].reliesOnPrototype||M.prototype[D])),y.length>0)if(y.length===1){let M=y[0];return(k,L,H)=>{if(k?.source!==M)return M[D](L,H,k)}}else return(M,k,L)=>{let H=[];for(let F of y){if(M?.source===F)break;H.push(F[D](k,L,M))}return Promise.all(H)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],N=a(D=>{if(b[D]&&(!b[D].reliesOnPrototype||b.prototype[D]))return(y,M,k)=>{if(!y?.source)return b[D](M,k,y)}},"getApplyToCanonicalSource");return Fe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},de={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish"),invalidate:I("invalidate")},(async()=>{let D=!1,y=a(async(M,k)=>{let L=M.value,H=M.table?ot[c][M.table]:Xe;if(c===os.SYSTEM_SCHEMA_NAME&&(M.table===os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=L[H.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let F=await H.getResource(M.id,k,yc);switch(M.type){case"put":return F._writeUpdate(L,!0,yc);case"patch":return F._writeUpdate(L,!1,yc);case"delete":return F._writeDelete(yc);case"publish":return F._writePublish(L,yc);case"invalidate":return F.invalidate(yc);default:nt.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&h==null&&(h=!0);let k=p.subscribeOnThisThread?p.subscribeOnThisThread((0,la.getWorkerIndex)()):(0,la.getWorkerIndex)()===0,L=M&&k&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L){let H;for await(let F of L)try{if(!(F.type==="transaction"?F.writes[0]:F)){nt.error("Bad subscription event",F);continue}if(F.source=p,H)if(F.beginTxn)H.resolve();else{y(F,H);continue}if(F.type==="end_txn")continue;let ye=Ze(F,()=>{if(F.type==="transaction"){let ee=[];for(let ve of F.writes)try{ee.push(y(ve,F))}catch(le){throw le.message+=" writing "+JSON.stringify(ve)+" of event "+JSON.stringify(F),le}return Promise.all(ee)}else if(F.type==="define_schema"){let ee=this.attributes.slice(0),ve;for(let le of F.attributes)ee.find(ke=>ke.name===le.name)||(ee.push(le),ve=!0);ve&&(ft({table:s,database:c,attributes:ee,origin:"cluster"}),Gu.signalSchemaChange(new Fu.SchemaEventMsg(process.pid,os.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return F.beginTxn?(H=F,y(F,F),new Promise(ee=>{H.resolve=ee})):y(F,F)});D&&(await ye,Gu.signalUserChange(new Fu.UserEventMsg(process.pid))),F.onCommit&&(ye?.then?ye.then(F.onCommit):F.onCommit())}catch(ce){nt.error("error in subscription handler",ce)}}}catch(M){nt.error(M)}})(),this}static getResource(p,O,I){let b=super.getResource(p,O,I);if(p!=null){bl(p);try{if(b.hasOwnProperty(Ee))return b;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let N=!I?.async||i.cache?.get(p),D=Vn(O),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Tm(p,O,{transaction:y},N,M=>{if(M?fE(b,M):b[Ee]=null,O.onlyIfCached&&O.noCacheStore){if(!b.doesExist())throw new Ln.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let k=gm(p,M,O,b);if(k)return D?.disregardReadTxn(),b[Lg]=!0,Pg(k,L=>(fE(b,L),b))}return b})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(p)),N}}return b}ensureLoaded(){let p=gm(this[Me],this[on],this[be]);if(p)return this[Lg]=!0,Pg(p,O=>{this[on]=O,this[Ee]=O.value,this[qu]=O.version})}static setTTLExpiration(p){if(typeof p=="number")d=p*1e3,f||(f=0);else if(p&&typeof p=="object")d=p.expiration*1e3,f=(p.eviction||0)*1e3,Gt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Gt=Gt||(d+f)/4,Am()}static enableAuditing(p=!0){E=p,p&&qb(),Xe.audit=p}static coerceId(p){return p===""?null:dE(p,U)}static async dropTable(){if(delete ot[c][s],c===o){for(let p of m)u.remove(Xe.tableName+"/"+p.name),r[p.name]?.drop();u.remove(Xe.tableName+"/"),i.drop(),await u.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));Gu.signalSchemaChange(new Fu.SchemaEventMsg(process.pid,os.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[bn])return this.search(p);if(this[Me]===null){if(p?.conditions)return this.search(p);let O=Xe.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,attributes:m}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(p,O){let I=Nd(p);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,N=O?.select;if(b?.length>0||vb&&N){if(O||(O={}),N){let D=b?.length>0&&Dg(b,"read");O.select=N.map(y=>{let M=y.name||y;if(!D||D[M]){let k=vi[M]?.definition?.tableClass;if(k){if(y.name||(y={name:y}),!k.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else O.select=b.filter(D=>D.read&&!vi[D.attribute_name]).map(D=>D.attribute_name);return O}else return!0}}allowUpdate(p,O){let I=Nd(p);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let N=Dg(b,"update");for(let D in O)if(!N[D])return!1;for(let D of b){let y=D.attribute_name;!D.update&&!(y in O)&&(O[y]=this.getProperty(y))}}return!0}}allowCreate(p,O){if(this[bn]){let I=Nd(p);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let N=Dg(b,"insert");for(let D in O)if(!N[D])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Nd(p)?.delete}update(p,O){if(!Vn(this[be]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;return typeof p=="object"&&p&&(O?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[Ee]={},this[Dt]=p):(b=this[Dt],b&&(p=Object.assign(b,p)),this[Dt]=b=p)),this._writeUpdate(this[Dt],O),this}addTo(p,O){if(typeof O=="number")this[Uu]===SM?this.set(p,(+this.getProperty(p)||0)+O):(this[Uu]||this.update(),this.set(p,new ef(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,O){if(typeof O=="number")return this.addTo(p,-O);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let O=this[be],I=this[Me];bl(I),Vn(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[on],nodeName:this[be]?.nodeName,before:Fe.invalidate?.bind(this,O,I),beforeIntermediate:de.invalidate?.bind(this,O,I),commit:(N,D)=>{if(D?.version>N)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);S(I,y,this[on],N,vu,E,this[be],0,"invalidate")}})}static evict(p,O,I){let b=this.Source,N;if(!((R||E)&&(!O||(N=i.getEntry(p),!N||!O)||N.version!==I))){if(R){if(i.hasLock(p,N.version))return;let D;for(let y in r)D||(D={}),D[y]=O[y];if(D)return S(p,D,N,I,Bu,null,null,0,null,!0)}return i.ifVersion(I,()=>{Od(p,O,null)}),E?S(p,null,N,I,Bu,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,O){return p.table||=s,p.schema||=c,NM.operation(p,O)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,O,I){let b=this[be],N=Vn(b),D=this[Me];bl(D);let y=this[on];this[Uu]=O?SM:e5;let M={key:D,store:i,entry:y,nodeName:b?.nodeName,validate:k=>{p||(p=this[Dt]),O||p&&Xd(p)?(this.validate(p,!O),b?.source||(P&&(p[P.name]=P.type==="Date"?new Date(k):P.type==="String"?new Date(k).toISOString():k),O&&(t&&p[t]!==D&&(p[t]=D),v&&(y?.value?p[v.name]=y?.value[v.name]:p[v.name]=v.type==="Date"?new Date(k):v.type==="String"?new Date(k).toISOString():k),p=Fo(p)))):N.removeWrite(M)},before:O?Fe.put?()=>Fe.put(b,D,p):null:Fe.patch?()=>Fe.patch(b,D,p):Fe.put?()=>Fe.put(b,D,Fo(this)):null,beforeIntermediate:O?de.put?()=>de.put(b,D,p):null:de.patch?()=>de.patch(b,D,p):de.put?()=>de.put(b,D,Fo(this)):null,commit:(k,L,H)=>{if(H){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this[on]=L,L?.value?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");O||(this[Ee]=L?.value??null)}this[Dt]=p,this[qu]=k;let F=L?.value,ce=p;if(this[Uu]=0,L?.version>=k)if(E){let le=L.localTime,ke=L.version;for(;ce&&(le>k||ke>=k&&le>0);){let re=l.get(le),X=Ft(re);if(ke=X.version,ke>k){if(X.type==="patch"){let Oe=X.getValue(i);ce=zd(ce,Oe)}else if(X.type==="put"||X.type==="delete")return}else if(ke===k)return;le=X.previousLocalTime}}else{if(O)return;ce=zd(ce,F)}let ye;if(O?ye=ce:(this[Ee]=F,ye=O?ce:Fo(this,ce)),this[Ee]=ye,ye?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");let ee;O||(ee=p),Od(D,F,ye);let ve=O?"put":"patch";S(D,ye,L,k,0,E,b,b.expiresAt||(d?d+Date.now():0),ve,!1,ee)}};N.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[bn]){for await(let O of this.search(p))(await Xe.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[Ee]?this._writeDelete(p):!1}_writeDelete(p){let O=Vn(this[be]),I=this[Me];bl(I);let b=this[be];return O.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:Fe.delete?.bind(this,b,I),beforeIntermediate:de.delete?.bind(this,b,I),commit:(N,D,y)=>{let M=D?.value;y&&(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),fE(this,D)),!(D?.version>N)&&(Od(this[Me],M),nt.trace("Write delete entry",I,N),E||h?(S(I,null,this[on],N,0,E,this[be],0,"delete"),E||Am()):i.remove(this[Me]))}}),!0}search(p){let O=this[be],I=Vn(O);if(!p)throw new Error("No query provided");let b=p.conditions;b?b.length===void 0&&(b=b[Symbol.iterator]?Array.from(b):[b]):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Me]&&(b=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(b));let N,D={};function y(X,Oe){let qe;switch(Oe){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}let ms=qe&&{},Bi;for(let je of X){if(je.conditions){je.conditions=y(je.conditions,je.operator);continue}let Kt=je[0]??je.attribute,Rn=Kt==null?U:ei(m,Kt);if(Rn){if(qe){let Ss=Qn(Kt),Wt=ms[Ss];Wt?(Wt.push(je),Bi=!0):ms[Ss]=[je]}(Rn.type||cS[je.comparator])&&(je[1]===void 0?je.value=k(je.value,Rn):je[1]=k(je[1],Rn))}else if(Kt!=null)throw(0,Ln.handleHDBError)(new Error,`${Kt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return X;if(Bi)for(let je in ms){let Kt=ms[je],Rn=Kt.length;if(Rn>1)for(let Ss=0;Ss<Rn;Ss++){let Wt=Kt[Ss];if(Wt.comparator==="ge"||Wt.comparator==="greater_than_equal")for(let Hi=0;Hi<Rn;Hi++){let za=Kt[Hi];(za.comparator==="le"||za.comparator==="less_than_equal")&&(Wt.comparator="between",Wt.value=[Wt.value,za.value],X.splice(X.indexOf(za),1))}if(Wt.comparator==="equals"||!Wt.comparator){for(let Hi=0;Hi<Rn;Hi++)if(Hi!==Ss){let za=Kt[Hi];X.splice(X.indexOf(za),1)}break}}}return X}a(y,"prepareConditions");function M(X,Oe){if(p.enforceExecutionOrder)return X;for(let qe of X)qe.conditions&&(qe.conditions=M(qe.conditions,qe.operator));return X.length>1&&Oe!=="or"?(0,OM.sortBy)(X,af(Xe)):X}a(M,"orderConditions");function k(X,Oe){return Array.isArray(X)?X.map(qe=>dE(qe,Oe)):dE(X,Oe)}a(k,"coerceTypedValues");let L=p.operator;(b.length>0||L)&&(b=y(b,L));let H=typeof p.sort=="object"&&p.sort,F;if(H&&L!=="or"){let X=H.attribute;if(N=b.find(Oe=>Qn(Oe.attribute)===Qn(X)),!N){if(!ei(m,X))throw(0,Ln.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);N={attribute:X,comparator:"sort"},b.push(N)}N.descending=!!H.descending}b=M(b,L),H&&(b[0]===N?H.next&&(F={dbOrderedAttribute:H.attribute,attribute:H.next.attribute,descending:H.next.descending,next:H.next.next}):(N&&b.splice(b.indexOf(N),1),F=H));let ce=p.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:b,operator:L,postOrdering:F,selectApplied:!!ce};let ye=I.useReadTxn(),ee=lS(b,L,Xe,ye,p,O,(X,Oe)=>Bb(X,ce,O,ye,Oe),D),ve=p.ensureLoaded!==!1;F||(ee=re(ee));let le=Xe.transformEntryForSelect(ce,O,ye,D,ve,!0),ke=Xe.transformToOrderedSelect(ee,ce,F,ye,O,le);function re(X){return p.offset||p.limit!==void 0?X.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):X}return a(re,"applyOffset"),F&&(ke=re(ke)),ke.onDone=()=>{ke.onDone=null,I.doneReadTxn()},ke.selectApplied=!0,ke.getColumns=()=>{if(ce){let X=[];for(let Oe of ce)Oe==="*"?X.push(...m.map(qe=>qe.name)):X.push(Oe.name||Oe);return X}return m.map(X=>X.name)},ke}static transformToOrderedSelect(p,O,I,b,N,D){let y=new eV;if(I){p=Bb(p,O,b,N,null);let M;y.iterate=function(){let L,H=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),F,ce=I.dbOrderedAttribute,ye,ee,ve=!0;function le(re){let X=re.next&&le(re.next),Oe=re.descending;return(qe,ms)=>{let Bi=Rm(qe,re.attribute,b),je=Rm(ms,re.attribute,b),Kt=Oe?(0,ua.compareKeys)(je,Bi):(0,ua.compareKeys)(Bi,je);return Kt===0?X?.(qe,ms)||0:Kt}}a(le,"createComparator");let ke=le(I);return{async next(){let re;if(L)if(re=L.next(),re.done){if(F)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};M=[],ye&&M.push(ye);do if(re=await H.next(),re.done){if(F=!0,M.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),ce){let Oe=Rm(X,ce,b);if(ve)ve=!1,ee=Oe;else if(Oe!==ee){ee=Oe,ye=X;break}}M.push(X)}while(!0);return I.isGrouped,M.sort(ke),L=M[Symbol.iterator](),re=L.next(),re.done?(y.onDone&&y.onDone(),re):{value:await D.call(this,re.value)}},return(){y.onDone&&y.onDone(),H.return()},throw(){y.onDone&&y.onDone(),H.throw()}}};let k=a(L=>{if(typeof O=="object"&&Array.isArray(L.attribute))for(let H=0;H<O.length;H++){let F=O[H],ce;if(F.name===L.attribute[0]){for(ce=F.sort||(F.sort={});ce.next;)ce=ce.next;ce.attribute=L.attribute.slice(1),ce.descending=L.descending}else F===L.attribute[0]&&(O[H]=ce={name:F,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&k(L.next)},"applySortingOnSelect");k(I)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(D);return y}static transformEntryForSelect(p,O,I,b,N,D){if(p&&(p===t||p?.length===1&&p[0]===t)){let L=a(H=>H?.key??H,"transform");return p===t?L:p.asArray?H=>[L(H)]:H=>({[t]:L(H)})}let y;N&&R&&!p?.every(L=>{let H;return typeof L=="object"?H=L.name:H=L,r[H]||H===t})&&(y=!0);let M,k=a(function(L){let H;if(L!=null){if(Sm=L,H=L.value||L.deref?.(),!H&&(L.key===void 0||L.deref)){if(L=Tm(L.key??L,O,{transaction:I,lazy:p?.length<4},this.isSync,F=>F),L?.then)return L.then(k.bind(this));H=L?.value}if(y&&(L.metadataFlags&(vu|Bu)||L.expiresAt&&L.expiresAt<Date.now())){let F=gm(L.key??L,L,O);if(F?.then)return F.then(k)}}if(H==null)return D?ca.SKIP:H;if(p&&!(p[0]==="*"&&p.length===1)){let F,ce=a((ee,ve)=>{let le;typeof ee=="object"?le=ee.name:le=ee;let ke=vi?.[le],re;if(ke){let X=b?.[le];if(X)if(X.hasMappings){let qe=ke.from?H[ke.from]:Qn(L.key);re=X.get(qe),re||(re=[])}else re=X.fromRecord?.(H);else re=ke(H,O,L);let Oe=a(qe=>{if(qe&&typeof qe=="object"){let ms=ke.definition?.tableClass||Xe;M||(M={});let Bi=M[le]||(M[le]=ms.transformEntryForSelect(le===ee?null:ee.select||(Array.isArray(ee)?ee:null),O,I,X,N));if(Array.isArray(qe)){let je=[],Kt=ms.transformToOrderedSelect(qe,ee.select,typeof ee.sort=="object"&&ee.sort,O,I,Bi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Rn=a(Wt=>{for(;!Wt.done;){if(Wt?.then)return Wt.then(Rn);je.push(Wt.value),Wt=Kt.next()}ve(je,le)},"nextValue"),Ss=Rn(Kt.next());Ss&&(F||(F=[]),F.push(Ss));return}else if(qe=Bi.call(this,qe),qe?.then){F||(F=[]),F.push(qe.then(je=>ve(je,le)));return}}ve(qe,le)},"handleResolvedValue");re?.then?(F||(F=[]),F.push(re.then(Oe))):Oe(re);return}else re=H[le],re&&typeof re=="object"&&le!==ee&&(re=Xe.transformEntryForSelect(ee.select||ee,O,I,null)({value:re}));ve(re,le)},"selectAttribute"),ye;if(typeof p=="string")ce(p,ee=>{ye=ee});else if(Array.isArray(p))if(p.asArray)ye=[],p.forEach((ee,ve)=>{ee==="*"?p[ve]=H:ce(ee,le=>ye[ve]=le)});else{ye={};let ee=p.forceNulls;for(let ve of p)if(ve==="*")for(let le in H)ye[le]=H[le];else ce(ve,(le,ke)=>{le===void 0&&ee&&(le=null),ye[ke]=le})}else throw new Ln.ClientError("Invalid select"+p);return F?Promise.all(F).then(()=>ye):ye}return H},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");E||ft({table:s,database:c,schemaDefined:_,attributes:m,audit:!0}),p||(p={});let O=!p.rawEvents,I=II(Xe,this[Me]??null,function(y,M,k,L){try{let H=M.getValue?.(i,O);if(!H&&M.type==="patch"&&O){let F=i.getEntry(y);F?.version===M.version?H=F.value:H=M.getValue?.(i,!0,k),M.type="put"}this.send({id:y,timestamp:k,value:H,version:M.version,type:M.type,beginTxn:L})}catch(H){nt.error(H)}},p.startTime||0,this[bn]);this[bn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Me],N=p.previousCount;N>1e3&&(N=1e3);let D=p.startTime;if(this[bn]){if(D){if(N)throw new Ln.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:M}of l.getRange({start:D,exclusiveStart:!0})){let k=Ft(M);if(k.tableId!==n)continue;let L=k.recordId;if(b==null||RM(b,L)){let H=k.getValue(i,O,y);I.send({id:L,timestamp:y,value:H,version:k.version,type:k.type})}I.startTime=y}}else if(N){let y=[];for(let{key:M,value:k}of l.getRange({start:"z",end:!1,reverse:!0}))try{let L=Ft(k);if(L.tableId!==n)continue;let H=L.recordId;if(b==null||RM(b,H)){let F=L.getValue(i,O,M);if(y.push({id:H,timestamp:M,value:F,version:L.version,type:L.type}),--N<=0)break}}catch(L){nt.error("Error getting history entry",M,L)}for(let M=y.length;M>0;)I.send(y[--M]);y[0]&&(I.startTime=y[0].timestamp)}else if(!p.omitCurrent)for(let{key:y,value:M,version:k,localTime:L}of i.getRange({start:b??!1,end:b==null?void 0:[b,ua.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:L,value:M,version:k,type:"put"})}else{N&&!D&&(D=0);let y=this[on]?.localTime;if(y===Qm&&(i.cache?.delete(b),this[on]=i.getEntry(b),nt.trace("re-retrieved record",y,this[on]?.localTime),y=this[on]?.localTime),nt.trace("Subscription from",D,"from",b,y),D<y){let M=[],k=y;do{let L=l.get(k);if(L){p.omitCurrent=!0;let H=Ft(L),F=H.getValue(i,O,k);O&&(H.type="put"),M.push({id:b,value:F,timestamp:k,...H}),k=H.previousLocalTime}else break;N&&N--}while(k>D&&N!==0);for(let L=M.length;L>0;)I.send(M[--L]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:b,timestamp:y,value:this,version:this[qu],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[Ee]||this[Uu])}publish(p,O){this._writePublish(p,O)}_writePublish(p,O){let I=Vn(this[be]),b=this[Me]||null;bl(b);let N=this[be];I.addWrite({key:b,store:i,entry:this[on],nodeName:N?.nodeName,validate:()=>{this.validate(p)},before:Fe.publish?.bind(this,N,b,p),beforeIntermediate:de.publish?.bind(this,N,b,p),commit:(D,y,M)=>{y===void 0&&h&&!E&&Am(),S(b,y?.value??null,y,y?.version||D,0,!0,N,y?.expiresAt,"message",!1,p)}})}validate(p,O){let I,b=a((N,D,y)=>{if(D.type&&N!=null)if(O&&N.__op__&&(N=N.value),D.properties){typeof N!="object"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an object${D.type?" ("+D.type+")":""}`);let M=D.properties;for(let k=0,L=M.length;k<L;k++){let H=M[k],F=b(N[H.name],H,y+"."+H.name);F&&(N[H.name]=F)}}else switch(D.type){case"Int":(typeof N!="number"||N>>0!==N)&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(D.elements)for(let M=0,k=N.length;M<k;M++){let L=N[M],H=b(L,D.elements,y+"[*]");H&&(N[M]=H)}}else(I||(I=[])).push(`Value ${is(N)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&N==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,D=m.length;N<D;N++){let y=m[N];if(!y.relationship&&(!O||y.name in p)){let M=b(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(I)throw new Ln.ClientError(I.join(". "))}getUpdatedTime(){return this[qu]}wasLoadedFromSource(){return R?!!this[Lg]:void 0}static async addAttributes(p){let O=m.slice(0);for(let I of p){if(!I.name)throw new Ln.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Ln.ClientError("Attribute names cannot include backticks or forward slashes");O.push(I)}return ft({table:s,database:c,schemaDefined:_,attributes:O}),Xe.indexingOperation}static async removeAttributes(p){let O=m.filter(I=>!p.includes(I.name));return ft({table:s,database:c,schemaDefined:_,attributes:O}),Xe.indexingOperation}static getRecordCount(p){let O=i.getStats().entryCount,I=5e3,b=1e3,N;O>I&&!p?.exactCount&&(N=b);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:N}))y!=null&&D++;if(N){let y=D;D=0;for(let{value:ve}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ve!=null&&D++;let M=N*2,k=(D+y)/M,L=Math.pow((D-y+1)/N/2,2)+k*(1-k)/M,H=Math.max(Math.sqrt(L)*O,1),F=Math.round(k*O),ce=Math.max(F-1.96*H,0),ye=Math.min(F+1.96*H,O),ee=Math.pow(10,Math.round(Math.log10(H)));return ee>F&&(ee=ee/10),D=Math.round(F/ee)*ee,{recordCount:D,estimatedRange:[Math.round(ce),Math.round(ye)]}}return{recordCount:D}}static updatedAttributes(){vi=this.propertyResolvers={$id:(p,O,I)=>({value:I.key}),$updatedtime:(p,O,I)=>I.version,$record:(p,O,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let O=p.relationship;if(O)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),vb=!0,O.to)p.elements?.definition?(vi[p.name]=p.resolve=(I,b,N)=>{let D=I[O.from?O.from:t],y=p.elements.definition.tableClass;return N?oc({attribute:O.to,value:D},Vn(b).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:O.to,value:D}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,O.from&&(p.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let I=p.definition||p.elements?.definition;I?(vi[p.name]=p.resolve=(b,N,D)=>{let y=b[O.from];if(y!==void 0){if(p.elements){let M,k=y.map(L=>{let H=D?I.tableClass.primaryStore.getEntry(L,{transaction:Vn(N).getReadTxn()}):I.tableClass.get(L,N);return H?.then&&(M=!0),H});return O.filterMissing?M?Promise.all(k).then(L=>L.filter(AM)):k.filter(AM):M?Promise.all(k):k}return D?I.tableClass.primaryStore.getEntry(y,{transaction:Vn(N).getReadTxn()}):I.tableClass.get(y,N)}},p.set=(b,N)=>{if(Array.isArray(N)){let D=N.map(y=>y[Me]||y[I.tableClass.primaryKey]);b[O.from]=D}else{let D=N[Me]||N[I.tableClass.primaryKey];b[O.from]=D}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=O.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`)}tf(this,this)}static async deleteHistory(p=0){let O;for(let{key:I,value:b}of l.getRange({start:0,end:p}))await Hu(),Ft(b).tableId===n&&(O=l.remove(I));await O}static async*getHistory(p=0,O=1/0){for(let{key:I,value:b}of l.getRange({start:p,end:O})){await Hu();let N=Ft(b);N.tableId===n&&(yield{id:N.recordId,localTime:I,version:N.version,type:N.type,value:N.getValue(i,!0,I),user:N.user})}}static async getHistoryOfRecord(p){let O=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return O;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let N=0;do{await Hu();let D=l.get(b);if(D){let y=Ft(D);O.push({id:y.recordId,localTime:b,version:y.version,type:y.type,value:y.getValue(i,!0,b),user:y.user}),b=y.previousLocalTime}else break}while(N<1e3&&b);return O.reverse()}static cleanup(){Y?.remove()}}Xe.updatedAttributes();let nV=Xe.prototype;return nV[ZZ]=!0,d&&Xe.setTTLExpiration(d/1e3),V&&sV(),Xe;function Od(Q,p,O){let I;for(let b in r){let N=r[b],D=N.isIndexing,y=O?.[b],M=p?.[b];if(y===M&&!D)continue;I=!0;let k=N.indexNulls,L=(0,xu.getIndexedValues)(M,k);if(L){mM&&N.prefetch(L.map(H=>({key:H,value:Q})),gM);for(let H=0,F=L.length;H<F;H++)N.remove(L[H],Q)}if(L=(0,xu.getIndexedValues)(y,k),L){mM&&N.prefetch(L.map(H=>({key:H,value:Q})),gM);for(let H=0,F=L.length;H<F;H++)N.put(L[H],Q)}}return I}a(Od,"updateIndices");function bl(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>TM)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;case"bigint":if(Q<2n**64n&&Q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,ua.writeKey)(Q,t5,0)>TM)throw new Error("Primary key size is too large: "+Q.length);return!0}a(bl,"checkValidId");function Tm(Q,p,O,I,b){let N=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),O.transaction?.isDone)return b(null,Q);let D=i.getEntry(Q,O);return D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),b(D,Q)},"whenPrefetched");return I?N():Se>0?(Se--,N()):new Promise((D,y)=>{Se===0?(Se--,i.prefetch([Q],()=>{M(),k()})):(z.push(Q),oe.push(k),z.length>rV&&(Se--,M()));function M(){if(z.length>0){let L=oe;i.prefetch(z,()=>{Se===-1?M():Se++;for(let H of L)H()}),z=[],oe=[],ue>2&&ue--}else Se=ue,ue<tV&&ue++}a(M,"prefetch");function k(){try{D(N())}catch(L){y(L)}}a(k,"load")})}a(Tm,"loadLocalRecord");function Nd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return r5;let O=p[c],I,b=O?.tables;if(b)return b[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Nd,"getTablePermissions");function gm(Q,p,O,I){if(R){let b;if(O.noCache?b=!0:(p?(!p.value||p.metadataFlags&(vu|Bu)||p.expiresAt&&p.expiresAt<Date.now())&&(b=!0):b=!0,Cn(!b,"cache-hit",s)),b){let N=Hb(Q,p,O).then(D=>(D?.value?.[Ee]&&nt.error("Can not assign a record with a record property"),O&&(D?.version>(O.lastModified||0)&&(O.lastModified=D.version),O.lastRefreshed=Date.now()),D));if(O?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,Q)){if(N.catch(D=>nt.warn(D)),O?.onlyIfCached&&!I.doesExist())throw new Ln.ServerError("Entry is not cached",504);return}else return N}}}a(gm,"ensureLoadedFromSource");function Vn(Q){let p=Q?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let O=p.next;if(!O)return p=p.next=new ko,p.lmdbDb=i,p;p=O}while(!0)}else return new sf}a(Vn,"txnForContext");function Rm(Q,p,O){if(!Q)return;Sm=Q;let I=Q.value||Q.deref?.()||(Sm=i.getEntry(Q.key))?.value;if(typeof p=="object"){let N=vi,D=I;for(let y=0,M=p.length;y<M;y++){let k=p[y],L=N?.[k];D=L&&D?L(D,O,!0)?.value:D?.[k],N=L?.definition?.tableClass?.propertyResolvers}return D}let b=vi[p];return b?b(I,O):I[p]}a(Rm,"getAttributeValue");function Bb(Q,p,O,I,b){let N=b?.length,D={transaction:I,lazy:N>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M(k,L){let H=k?.value;if(!H)return ca.SKIP;for(let F=0;F<N;F++)if(!y?.includes(F)&&!b[F](H,k))return ca.SKIP;return L!==void 0&&(k.key=L),k}if(a(M,"processEntry"),N>0||!Q.hasEntries){let k=Q.map(L=>{if(y=null,typeof L=="object"&&L.key!==void 0)return N>0?M(L):L;if(L==null)return ca.SKIP;for(let H=0;H<N;H++){let ce=b[H].idFilter;if(ce){if(!ce(L))return ca.SKIP;y||(y=[]),y.push(H)}}return Tm(L,O,D,!1,M)});return Array.isArray(Q)&&(k=k.filter(L=>L!==ca.SKIP)),k.hasEntries=!0,k}return Q}a(Bb,"transformToEntries");async function Hb(Q,p,O){let I=p?.metadataFlags,b=p?.version,N,D;if(!i.attemptLock(Q,b,()=>{clearTimeout(D);let L=i.getEntry(Q);!L||!L.value||L.metadataFlags&(vu|Bu)?N(Hb(Q,i.getEntry(Q),O)):N(L)}))return new Promise(L=>{N=L,D=setTimeout(()=>{i.unlock(Q,b)},XZ)});let y=p?.value,M={requestContext:O,replacingRecord:y,replacingVersion:b,source:null,resourceCache:O?.resourceCache},k=O?.responseHeaders;return new Promise((L,H)=>{let F;Pg(Ze(M,async ce=>{let ye=performance.now(),ee,ve,le;try{for(let Oe of Xe.sources)if(Oe.get&&(!Oe.get.reliesOnPrototype||Oe.prototype.get)&&(M.source=Oe,ee=await Oe.get(Q,M),ee))break;le=I&vu;let re=M.lastModified||le&&b;ve=le||re>b||!y,re||(re=(0,xu.getNextMonotonicTime)());let X=performance.now()-ye;if(sn(X,"cache-resolution",s),k&&Cg(k,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),ce.timestamp=re,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ee){if(typeof ee!="object")throw new Error("Only objects can be cached and stored in tables");typeof ee.toJSON=="function"&&(ee=ee.toJSON()),t&&ee[t]!==Q&&(ee[t]=Q)}F=!0,L({version:re,value:ee})}catch(re){re.message+=` while resolving record ${Q} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(L({version:b,value:y}),nt.trace(re.message,"(returned stale record)")):H(re),M.transaction.abort();return}if(O?.noCacheStore){M.transaction.abort();return}Vn(M).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:(re,X)=>{if(X?.version!==b)return;let Oe=Od(Q,y,ee);ee?(de.put?.(M,Q,ee),S(Q,ee,X,re,0,E&&ve||null,M,M.expiresAt,"put",!!le)):(de.delete?.(M,Q),E||h?S(Q,null,X,re,0,E&&ve||null,M,0,"delete",!!le):i.remove(Q,b))}})}),()=>{i.unlock(Q,b)},ce=>{i.unlock(Q,b),F&&nt.error("Error committing cache update",ce)})})}a(Hb,"getFromSource");function Am(){if(Gt!==Rd&&(Rd=Gt,(0,la.getWorkerIndex)()===(0,la.getWorkerCount)()-1)){if(Ad&&clearTimeout(Ad),!Gt)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/Gt)*Gt+Q.getTime(),O=a(I=>{nt.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Ad=setTimeout(()=>B=B.then(async()=>{if(O(Math.max(I+Gt,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ad);return}let b=50,N=new Array(b),D=0;nt.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:k,version:L,expiresAt:H}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let F;k===null&&!E&&L+JZ<Date.now()?F=i.remove(M,L):H&&H+f<Date.now()&&(F=Xe.evict(M,k,L),y++),F&&(await N[D],N[D]=F.catch(ce=>{nt.error("Cleanup error",ce)}),++D>=b&&(D=0)),await Hu()}nt.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){nt.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");O(p)}}a(Am,"scheduleCleanup");function qb(){Y=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(qb,"addDeleteRemoval");function sV(){(0,la.getWorkerIndex)()===0&&setInterval(async()=>{try{let Q=V.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${V} must be indexed`);for(let{value:O}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let I=i.getEntry(O);I?.value?.[Q]<Date.now()&&Xe.evict(O,I.value,I.version),await Hu()}}catch(Q){nt.error("Error in evicting old records",Q)}},zZ).unref()}a(sV,"runRecordExpirationEviction")}function Dg(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function gM(){}function n5(e){NM=e}function dE(e,t){let r=t?.type;return e===null?e:e===""&&r&&r!=="String"&&r!=="Any"?null:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Boolean"?e==="true"?!0:e==="false"?!1:e:r==="Date"?(typeof e!="number"&&!s5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,EE.autoCast)(e):e}function RM(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 n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function Pg(e,t,r){return e?.then?e.then(t,r):t(e)}function fE(e,t){e[on]=t,e[Ee]=t?.value??null,e[qu]=t?.version}function AM(e){return e!=null}function is(e){try{return JSON.stringify(e)}catch{return e}}var os,ca,xu,OM,ku,Ln,Gu,Fu,nt,ua,la,EE,jZ,NM,zZ,JZ,mM,XZ,qu,ZZ,on,Uu,SM,e5,Lg,yc,vu,Bu,t5,TM,r5,Bge,s5,Hu,pE=Ne(()=>{os=q(C()),ca=require("lmdb"),xu=q(pr()),OM=require("lodash");Wn();oS();ku=q(J());LI();Ln=q(se()),Gu=q(si()),Fu=q(Jn());Re();lf();nt=q(G());nf();$o();ua=require("ordered-binary"),la=q(tt());xo();EE=q(W());tc();li();Qd();Mu();jZ=new Uint8Array(9);jZ[8]=192;zZ=6e4,JZ=864e5;ku.initSync();mM=ku.get(os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),XZ=1e4,qu=Symbol.for("version"),ZZ=Symbol.for("incremental-update"),on=Symbol("entry"),Uu=Symbol("is-saving"),SM=1,e5=2,Lg=Symbol("loaded-from-source"),yc={isNotification:!0,ensureLoaded:!1},vu=1,Bu=8,t5=Buffer.allocUnsafeSlow(8192),TM=1978,r5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Bge=(0,EE.convertToMS)(ku.get(os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(hE,"makeTable");a(Dg,"attributesAsObject");a(gM,"noop");a(n5,"setServerUtilities");s5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(dE,"coerceType");a(RM,"isDescendantId");Hu=a(()=>new Promise(setImmediate),"rest");a(Pg,"when");a(fE,"updateResource");a(AM,"exists");a(is,"stringify")});var Ge={};$e(Ge,{database:()=>Tu,databases:()=>ot,dropDatabase:()=>xT,dropTableMeta:()=>u5,getDatabases:()=>es,getTables:()=>i5,onUpdatedTable:()=>qg,readMetaDb:()=>$u,resetDatabases:()=>o5,table:()=>ft,tables:()=>cn});function i5(){return RE||es(),cn||{}}function es(){if(RE)return ot;RE=!0,Cc=new Map;let e=(0,ir.getHdbBasePath)()&&(0,st.join)((0,ir.getHdbBasePath)(),ln.DATABASES_DIR_NAME),t=(0,ir.get)(ln.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,ir.get)(ln.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,an.existsSync)(e)?e:(0,st.join)((0,ir.getHdbBasePath)(),ln.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,an.existsSync)(e))for(let r of(0,an.readdirSync)(e,{withFileTypes:!0})){let n=(0,st.basename)(r.name,".mdb");r.isFile()&&(0,st.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&$u((0,st.join)(e,r.name),null,n)}if((0,an.existsSync)((0,wc.getBaseSchemaPath)())){for(let r of(0,an.readdirSync)((0,wc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,st.join)((0,wc.getBaseSchemaPath)(),r.name),s=(0,st.join)((0,wc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,an.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,st.extname)(i.name).toLowerCase()===".mdb"){let o=(0,st.join)(s,i.name);$u((0,st.join)(n,i.name),(0,st.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,an.existsSync)(s))for(let o of(0,an.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,st.extname)(o.name).toLowerCase()===".mdb"&&$u((0,st.join)(s,o.name),(0,st.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,st.join)(c.path,(0,st.basename)(o+".mdb"));(0,an.existsSync)(l)&&$u(l,o,r,null,!0)}}for(let r in ot){let n=Cc.get(r);if(n){let s=ot[r];r.includes("delete")&&Dn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Dn.trace(`delete table class ${i}`),delete s[i])}else if(delete ot[r],r==="data"){for(let s in cn)delete cn[s];delete cn[AE]}}return Cc=null,ot}}function o5(){RE=!1;for(let[,e]of ro)e.needsDeletion=!0;es();for(let[e,t]of ro)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ro.delete(e));return ot}function $u(e,t,r=Bg,n,s){let i=new Ug.default(e,!1);try{let o=ro.get(e);o?o.needsDeletion=!1:(o=(0,SE.open)(i),ro.set(e,o));let c=new _a.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(mE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,an.existsSync)(n)&&(i.path=n,_=(0,SE.open)(i),_.isLegacy=!0):_=Wd(o));let u=wM(r),d=u[AE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let A=f.get(m);A||f.set(m,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let z of m)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){Dn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let A=u[E],T={},R=[],U,B,v=typeof S.audit=="boolean"?S.audit:(0,ir.get)(ln.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,V=S.expiration,Y=S.eviction;if(A)T=A.indices,R=A.attributes,A.schemaVersion++;else{U=S.tableId,U?U>=(l.get(Ic)||0)&&l.putSync(Ic,U+1):(S.tableId=U=l.get(Ic),U||(U=1),l.putSync(Ic,U+1),l.putSync(S.key,S));let z=new _a.default(!S.is_hash_attribute,S.is_hash_attribute);B=$d(o.openDB(S.key,z)),B.rootStore=o,B.tableId=U}for(let z of m){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!T[z.name]){let Se=new _a.default(!z.is_hash_attribute,z.is_hash_attribute);T[z.name]=o.openDB(z.key,Se),T[z.name].indexNulls=z.indexNulls}let oe=R.find(Se=>Se.name===z.name);oe?R.splice(R.indexOf(oe),1,z):R.push(z)}}catch(oe){Dn.error("Error trying to update attribute",z,R,T,oe)}}if(!A){A=CM(u,E,hE({primaryStore:B,auditStore:_,audit:v,expirationMS:V&&V*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:U,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let z of Hg)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function wM(e){let t=ot[e];if(t||(e==="data"?t=ot[e]=cn:e==="system"?Object.defineProperty(ot,"system",{value:t=Object.create(null),configurable:!0}):t=ot[e]=Object.create(null)),Cc&&!Cc.has(e)){let r=new Set;t[AE]=r,Cc.set(e,r)}return t}function CM(e,t,r){return e[t]=r,r}function Tu({database:e,table:t}){e||(e=Bg),es();let r=wM(e),n=(0,st.join)((0,ir.getHdbBasePath)(),ln.DATABASES_DIR_NAME),s=(0,ir.get)(ln.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,ir.get)(ln.CONFIG_PARAMS.STORAGE_PATH)||((0,an.existsSync)(n)?n:(0,st.join)((0,ir.getHdbBasePath)(),ln.LEGACY_DATABASES_DIR_NAME));let o=(0,st.join)(n,(i?t:e)+".mdb"),c=ro.get(o);if(!c){let l=new Ug.default(o,!1);c=(0,SE.open)(l),ro.set(o,c)}return c}async function xT(e){if(!ot[e])throw new Error("Schema does not exist");let t=ot[e];for(let r in t){let s=t[r].primaryStore.rootStore;ro.delete(s.path),s.status==="open"&&(await s.close(),await bM.remove(s.path))}if(e==="data"){for(let r in cn)delete cn[r];delete cn[AE]}delete ot[e]}function ft({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:l,origin:_}){t||(t=Bg);let u=Tu({database:t,table:e}),d=ot[t],f=d?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,m,S;l==null&&(l=!0);let A=new _a.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let T,R;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 P=u.auditStore;P||(P=Wd(u)),h=i.find(oe=>oe.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=l,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,ir.get)(ln.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Dn.trace(`${e} table loading, opening primary store`);let V=new _a.default(!1,!0),Y=e+"/",z=$d(u.openDB(Y,V));z.rootStore=u,S=u.dbisDb=u.openDB(mE.INTERNAL_DBIS_NAME,A),z.tableId=S.get(Ic),z.tableId||(z.tableId=1),S.putSync(Ic,z.tableId+1),h.tableId=z.tableId,f=CM(d,e,hE({primaryStore:z,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:l,dbisDB:S})),f.schemaVersion=1,T=!0,v(),S.put(Y,h)}m=f.indices,S=S||(u.dbisDb=u.openDB(mE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let U=[];for(let{key:P,value:V}of S.getRange({start:!0})){let[Y,z]=P.toString().split("/");if(z===""&&(z=V.name),z){if(Y!==e)continue}else z=Y;if(!i.find(Se=>Se.name===z)?.indexed&&V.indexed&&!V.isPrimaryKey){v(),T=!0,S.remove(P);let Se=f.indices[Y];Se&&U.push(Se)}}let B=[];try{for(let P of i||[]){if(P.relationship)continue;let V=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:V,configurable:!0});let Y=S.get(V);if(P.isPrimaryKey){if(Y=Y||S.get(V=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let oe=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),T=!0,v(),S.put(V,oe)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==P.type||Y.indexed!==P.indexed||Y.nullable!==P.nullable||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let oe=new _a.default(!0,!1),Se=u.openDB(V,oe);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Vu.workerData?.restartNumber)&&(T=!0,v(),Y=S.get(V),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Vu.workerData?.restartNumber)&&(T=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Se.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Se}),P.indexNulls===void 0&&(P.indexNulls=!0),B.push(P)),S.put(V,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Se.indexNulls=P.indexNulls,m[P.name]=Se}else z&&(T=!0,v(),S.put(V,P))}}finally{R&&R()}if(T&&(f.schemaVersion++,f.updatedAttributes()),Dn.trace(`${e} table loading, running index`),B.length>0||U.length>0?f.indexingOperation=l5(f,B,U):T&&TE.signalSchemaChange(new gE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,T)for(let P of Hg)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Dn.trace(`${e} table loaded`),f;function v(){R||u.transactionSync(()=>({then(P){R=P}}))}a(v,"startTxn")}async function l5(e,t,r){try{let n=e.schemaVersion;await TE.signalSchemaChange(new gE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,yM.getIndexedValues)(u[h]);if(m)for(let S=0,A=m.length;S<A;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Dn.error(f)}),Vu.workerData&&Vu.workerData.restartNumber!==IM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>a5?await s:l>c5&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await TE.signalSchemaChange(new gE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Dn.error("Error in indexing",n)}}function u5({table:e,database:t}){let r=Tu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function qg(e){Hg.push(e)}var ir,mE,SE,st,an,wc,_a,Ug,ln,bM,vg,yM,TE,gE,Vu,Dn,IM,Bg,AE,cn,ot,Ic,Hg,RE,ro,Cc,a5,c5,Re=Ne(()=>{ir=q(J()),mE=q(_t()),SE=require("lmdb"),st=require("path"),an=require("fs"),wc=q(ze());pE();_a=q(Ef()),Ug=q(pf()),ln=q(C()),bM=q(require("fs-extra")),vg=require("../index"),yM=q(pr()),TE=q(si()),gE=q(Jn()),Vu=require("worker_threads"),Dn=q(G()),IM=q(tt());xo();tc();Bg="data",AE=Symbol("defined-tables");(0,ir.initSync)();cn=Object.create(null),ot=Object.create(null);(0,vg._assignPackageExport)("databases",ot);(0,vg._assignPackageExport)("tables",cn);Ic=Symbol.for("next-table-id"),Hg=[],ro=new Map;a(i5,"getTables");a(es,"getDatabases");a(o5,"resetDatabases");a($u,"readMetaDb");a(wM,"ensureDB");a(CM,"setTable");a(Tu,"database");a(xT,"dropDatabase");a(ft,"table");a5=1e3,c5=10;a(l5,"runIndexing");a(u5,"dropTableMeta");a(qg,"onUpdatedTable")});var W=g((Yge,$M)=>{"use strict";var no=require("path"),UM=require("fs-extra"),Ir=G(),LM=require("fs-extra"),OE=require("os"),_5=require("net"),d5=require("recursive-iterator"),at=C(),f5=Bm(),DM=require("papaparse"),NE=require("moment"),{inspect:E5}=require("util"),PM=require("is-number"),Vge=require("lodash"),h5=require("minimist"),p5=require("https"),m5=require("http"),{hdb_errors:bE}=se(),S5=/^((\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)))$/,vM=require("util").promisify(setTimeout),T5=100,g5=5,R5="",A5=4,MM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};$M.exports={isEmpty:un,isEmptyOrZeroLength:Ds,arrayHasEmptyValues:b5,arrayHasEmptyOrZeroLengthValues:y5,buildFolderPath:I5,isBoolean:BM,errorizeMessage:O5,stripFileExtension:C5,autoCast:L5,autoCastJSON:HM,autoCastJSONDeep:Gg,removeDir:D5,compareVersions:P5,isCompatibleDataVersion:M5,escapeRawValue:U5,unescapeValue:v5,stringifyProps:B5,timeoutPromise:q5,isClusterOperation:G5,getClusterUser:k5,checkGlobalSchemaTable:F5,getHomeDir:xM,getPropsFilePath:H5,promisifyPapaParse:$5,removeBOM:GM,createEventPromise:V5,checkProcessRunning:Y5,checkSchemaTableExist:K5,checkSchemaExists:FM,checkTableExists:kM,getStartOfTomorrowInSeconds:W5,getLimitKey:Q5,isObject:w5,isNotEmptyAndHasValue:N5,autoCasterIsNumberCheck:qM,backtickASTSchemaItems:j5,isPortTaken:x5,createForkArgs:z5,autoCastBoolean:J5,async_set_timeout:vM,getTableHashAttribute:X5,doesSchemaExist:Z5,doesTableExist:e8,stringifyObj:t8,ms_to_time:r8,changeExtension:n8,getEnvCliRootPath:Fg,noBootFile:s8,httpRequest:i8,transformReq:o8,convertToMS:a8,PACKAGE_ROOT:at.PACKAGE_ROOT};function O5(e){return e instanceof Error?e:new Error(e)}a(O5,"errorizeMessage");function un(e){return e==null}a(un,"isEmpty");function N5(e){return!un(e)&&(e||e===0||e===""||BM(e))}a(N5,"isNotEmptyAndHasValue");function Ds(e){return un(e)||e.length===0||e.size===0}a(Ds,"isEmptyOrZeroLength");function b5(e){if(un(e))return!0;for(let t=0;t<e.length;t++)if(un(e[t]))return!0;return!1}a(b5,"arrayHasEmptyValues");function y5(e){if(Ds(e))return!0;for(let t=0;t<e.length;t++)if(Ds(e[t]))return!0;return!1}a(y5,"arrayHasEmptyOrZeroLengthValues");function I5(...e){try{return e.join(no.sep)}catch{console.error(e)}}a(I5,"buildFolderPath");function BM(e){return un(e)?!1:e===!0||e===!1}a(BM,"isBoolean");function w5(e){return un(e)?!1:typeof e=="object"}a(w5,"isObject");function C5(e){return Ds(e)?R5:e.slice(0,-A5)}a(C5,"stripFileExtension");function L5(e){return un(e)||e===""||typeof e!="string"?e:MM[e]!==void 0?MM[e]:qM(e)===!0?Number(e):S5.test(e)?new Date(e):e}a(L5,"autoCast");function HM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(HM,"autoCastJSON");function Gg(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=Gg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Gg(r);n!==r&&(e[t]=n)}return e}else return HM(e)}a(Gg,"autoCastJSONDeep");function qM(e){if(e.startsWith("0.")&&PM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&PM(e))}a(qM,"autoCasterIsNumberCheck");async function D5(e){if(Ds(e))throw new Error(`Directory path: ${e} does not exist`);try{await LM.emptyDir(e),await LM.remove(e)}catch(t){throw Ir.error(`Error removing files in ${e} -- ${t}`),t}}a(D5,"removeDir");function P5(e,t){if(Ds(e)){Ir.info("Invalid current version sent as parameter.");return}if(Ds(t)){Ir.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(P5,"compareVersions");function M5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(M5,"isCompatibleDataVersion");function U5(e){if(un(e))return e;let t=String(e);return t==="."?at.UNICODE_PERIOD:t===".."?at.UNICODE_PERIOD+at.UNICODE_PERIOD:t.replace(at.FORWARD_SLASH_REGEX,at.UNICODE_FORWARD_SLASH)}a(U5,"escapeRawValue");function v5(e){if(un(e))return e;let t=String(e);return t===at.UNICODE_PERIOD?".":t===at.UNICODE_PERIOD+at.UNICODE_PERIOD?"..":String(e).replace(at.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(v5,"unescapeValue");function B5(e,t){if(un(e))return Ir.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+OE.EOL}!Ds(n)&&n[0]===";"?r+=" "+n+s+OE.EOL:Ds(n)||(r+=n+"="+s+OE.EOL)}catch{Ir.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(B5,"stringifyProps");function xM(){let e;try{e=OE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xM,"getHomeDir");function H5(){let e=no.join(xM(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return UM.existsSync(e)||(e=no.join(__dirname,"../","hdb_boot_properties.file")),e}a(H5,"getPropsFilePath");function q5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(q5,"timeoutPromise");async function x5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=_5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(x5,"isPortTaken");function G5(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ir.error(`Error checking operation against cluster ops ${t}`)}return!1}a(G5,"isClusterOperation");function F5(e,t){let r=(Re(),ie(Ge)).getDatabases();if(!r[e])return bE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return bE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(F5,"checkGlobalSchemaTable");function k5(e,t){if(un(t)){Ir.warn("No CLUSTERING_USER defined, clustering disabled");return}if(un(e)||Ds(e)){Ir.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Ir.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Ir.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(k5,"getClusterUser");function $5(){DM.parsePromise=function(e,t,r){return new Promise(function(n,s){DM.parse(e,{header:!0,transformHeader:GM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a($5,"promisifyPapaParse");function GM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(GM,"removeBOM");function V5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Ir.info(`Got cluster status event response: ${E5(s)}`);try{i.cancel()}catch{Ir.error("Error trying to cancel timeout.")}n(s)})})}a(V5,"createEventPromise");async function Y5(e){let t=!0,r=0;do await vM(T5*r++),(await f5.findPs(e)).length>0&&(t=!1);while(t&&r<g5);if(t)throw new Error(`process ${e} was not started`)}a(Y5,"checkProcessRunning");function K5(e,t){let r=FM(e);if(r)return r;let n=kM(e,t);if(n)return n}a(K5,"checkSchemaTableExist");function FM(e){let{getDatabases:t}=(Re(),ie(Ge));if(!t()[e])return bE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(FM,"checkSchemaExists");function kM(e,t){let{getDatabases:r}=(Re(),ie(Ge));if(!r()[e][t])return bE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kM,"checkTableExists");function W5(){let e=NE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=NE().utc().unix();return e-t}a(W5,"getStartOfTomorrowInSeconds");function Q5(){return NE().utc().format("DD-MM-YYYY")}a(Q5,"getLimitKey");function j5(e){try{let t=new d5(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){Ir.error("Got an error back ticking items."),Ir.error(t)}}a(j5,"backtickASTSchemaItems");function z5(e){return[e]}a(z5,"createForkArgs");function J5(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(J5,"autoCastBoolean");function X5(e,t){let{getDatabases:r}=(Re(),ie(Ge)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(X5,"getTableHashAttribute");function Z5(e){let{getDatabases:t}=(Re(),ie(Ge));return t()[e]!==void 0}a(Z5,"doesSchemaExist");function e8(e,t){let{getDatabases:r}=(Re(),ie(Ge));return r()[e]?.[t]!==void 0}a(e8,"doesTableExist");function t8(e){try{return JSON.stringify(e)}catch{return e}}a(t8,"stringifyObj");function r8(e){let t=NE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(r8,"ms_to_time");function n8(e,t){let r=no.basename(e,no.extname(e));return no.join(no.dirname(e),r+t)}a(n8,"changeExtension");function Fg(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=h5(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Fg,"getEnvCliRootPath");var xg;function s8(){if(xg)return xg;let e=Fg();Fg()&&UM.pathExistsSync(no.join(e,at.HDB_CONFIG_FILE))&&(xg=!0)}a(s8,"noBootFile");function i8(e,t){let r;return e.protocol==="http:"?r=m5:r=p5,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(i8,"httpRequest");function o8(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(o8,"transformReq");function a8(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(a8,"convertToMS")});var J=g((Wge,WM)=>{"use strict";var kg=require("fs-extra"),da=require("path"),VM=require("os"),c8=require("properties-reader"),Ku=G(),Yu=W(),_e=C(),yE=Et(),l8="Error initializing environment manager",IE="BOOT_PROPS_FILE_PATH",YM=!1,u8={[_e.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ui={};WM.exports={BOOT_PROPS_FILE_PATH:IE,getHdbBasePath:_8,setHdbBasePath:d8,get:KM,initSync:E8,setProperty:Ue,initTestEnvironment:h8};function _8(){return ui[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(_8,"getHdbBasePath");function d8(e){ui[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(d8,"setHdbBasePath");function KM(e){let t=yE.getConfigValue(e);return t===void 0?ui[e]:t}a(KM,"get");function Ue(e,t){u8[e]&&(ui[e]=t),yE.updateConfigObject(e,t)}a(Ue,"setProperty");function f8(){let e;try{e=Yu.getPropsFilePath(),kg.accessSync(e,kg.constants.F_OK|kg.constants.R_OK),YM=!0;let t=c8(e);return ui[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),ui[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ui[IE]=e,!0}catch{return Ku.trace(`Environment manager found no properties file at ${e}`),!1}}a(f8,"doesPropFileExist");function E8(e=!1){try{(YM||f8()||Yu.noBootFile())&&(yE.initConfig(e),ui[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=yE.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ku.error(l8),Ku.error(t),console.error(t),process.exit(1)}}a(E8,"initSync");function h8(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=da.join(__dirname,"../../","unitTests");ui[IE]=da.join(l,"hdb_boot_properties.file"),Ue(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,da.join(l,"settings.test")),Ue(_e.HDB_SETTINGS_NAMES.INSTALL_USER,VM.userInfo()?VM.userInfo().username:void 0),Ue(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ue(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,da.join(l,"envDir","log")),Ue(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ue(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ue(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,da.join(l,"envDir")),Ue(_e.CONFIG_PARAMS.STORAGE_PATH,da.join(l,"envDir")),s&&(Ue(_e.CONFIG_PARAMS.HTTP_SECUREPORT,KM(_e.CONFIG_PARAMS.HTTP_PORT)),Ue(_e.CONFIG_PARAMS.HTTP_PORT,null)),Ue(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ue(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ue(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yu.isEmpty(i)?!1:i),Ue(_e.CONFIG_PARAMS.HTTP_CORS,Yu.isEmpty(i)?!1:i),Ue(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ue(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ue(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ue(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ue(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,da.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ue(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yu.isEmpty(c)?!1:c),o&&(Ue("CORS_ACCESSLIST",o),Ue(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ue(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ue(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ue(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ue(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ue(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ue(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${IE}. Please check your boot props and settings files`;Ku.fatal(r),Ku.error(t)}}a(h8,"initTestEnvironment")});var Yg={};$e(Yg,{loadGQLSchema:()=>S8,start:()=>Vg,startOnMainThread:()=>m8});function Vg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let B=function(v){if(v.kind==="NonNullType"){let Y=B(v.type);return Y.nullable=!1,Y}if(v.kind==="ListType")return{type:"array",elements:B(v.type)};let V={type:v.name?.value};return Object.defineProperty(V,"location",{value:v.loc.startToken}),V};a(B,"getProperty");let A=S.name.value,T=[],R={table:null,database:null,properties:T};f.set(A,R);for(let v of S.directives){if(v.name.value==="table"){for(let P of v.arguments)R[P.name.value]=P.value.value;R.schema&&(R.database=R.schema),R.table||(R.table=A),R.audit&&(R.audit=R.audit!=="false"),R.attributes=R.properties,E.push(R)}if(v.name.value==="sealed"&&(R.sealed=!0),v.name.value==="export"){R.export=!0;for(let P of v.arguments)P.name.value==="name"&&(R.export={name:P.value.value})}}let U=!1;for(let v of S.fields){let P=B(v.type);P.name=v.name.value,T.push(P);for(let V of v.directives)if(V.name.value==="primaryKey")U?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,U=!0);else if(V.name.value==="indexed")P.indexed=!0;else if(V.name.value==="relationship"){let Y={};for(let z of V.arguments)Y[z.name.value]=z.value.value;P.relationship=Y}else if(V.name.value==="createdTime")P.assignCreatedTime=!0;else if(V.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(V.name.value==="expiresAt")P.expiresAt=!0;else if(V.name.value==="allow"){let Y=P.authorizedRoles=[];for(let z of V.arguments)z.name.value==="role"&&Y.push(z.value.value)}}R.type=A,A==="Query"&&(h=R)}function m(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?m(S.elements):p8.includes(S.type)||(0,QM.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of f.values())for(let A of S.properties)m(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,$g.dirname)(n),S.tableClass):i.set((0,$g.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var $g,QM,p8,m8,S8,jM=Ne(()=>{$g=require("path");Re();QM=q(tt()),p8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Vg,"start");m8=Vg,S8=Vg({ensureTable:ft}).handleFile});async function wE(e){return T8?(Wu||(Wu=g8(A8)),(await(await Wu).import(e)).namespace):import(e)}async function g8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Wu=new Compartment({console,Math,Date,fetch:R8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,JM.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Qt,tables:cn,databases:ot})}};let n=await(0,zM.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Wu}function R8(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 A8(){return{Resource:Qt,tables:cn}}var zM,JM,T8,Wu,Kg=Ne(()=>{Wn();Re();zM=require("fs/promises"),JM=require("path"),T8=!1;a(wE,"secureImport");a(g8,"getCompartment");a(R8,"secureOnlyFetch");a(A8,"getGlobalVars")});var Qg={};$e(Qg,{handleFile:()=>O8});async function O8(e,t,r,n){let s=new Map,i=(0,XM.pathToFileURL)(r).toString(),o=await wE(i);l(o.default)&&n.set((0,Wg.dirname)(t),o.default),c(o,(0,Wg.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var XM,Wg,ZM=Ne(()=>{XM=require("url");Kg();Wg=require("path");a(O8,"handleFile")});var zg={};$e(zg,{start:()=>N8});function N8({resources:e}){e.set("login",jg),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var jg,eU=Ne(()=>{Wn();a(N8,"start");jg=class extends Qt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var aU={};$e(aU,{parse:()=>Xg,streamAsJSON:()=>Qu,stringify:()=>fa});function Qu(e){return new Jg({value:e})}function tU(e){return console.error(e),JSON.stringify(e.toString())}function rU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function fa(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===iU)return oU(e);if(t.resolution)return t.resolution.then(()=>fa(e));throw t}}function oU(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=oU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+fa(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Xg(e){return I8.test(e)?b8.parse(e):JSON.parse(e)}var nU,sU,b8,y8,iU,Jg,I8,Zg=Ne(()=>{nU=require("stream"),sU=q(require("json-bigint-fixes")),b8=(0,sU.default)({useNativeBigInt:!0}),y8=1e4,iU={};BigInt.prototype.toJSON=function(){throw iU};a(Qu,"streamAsJSON");Jg=class extends nU.Readable{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],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(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 s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),tU)}catch(s){yield tU(s)}else yield fa(t)}else yield fa(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);rU(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>y8?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 rU(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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 n of this.activeIterators)t?n.throw(t):n.return();r()}};a(tU,"handleError");a(rU,"when");a(fa,"stringify");a(oU,"jsStringify");I8=/-?\d{16,}/;a(Xg,"parse")});var CE=g((oRe,cU)=>{"use strict";var w8=In();cU.exports={writeTransaction:C8};function C8(e,t,r){return w8.writeTransaction(e,t,r)}a(C8,"writeTransaction")});var dU=g((lRe,_U)=>{"use strict";var L8=Ar(),D8=wn(),lU=G(),P8=Or(),cRe=CE(),M8=require("clone"),tR=require("alasql"),U8=Gf(),uU=require("util"),v8=uU.promisify(D8.getTableSchema),B8=uU.promisify(L8.search),H8=C(),eR=W();U8(tR);_U.exports={update:x8};var q8="There was a problem performing this update. Please check the logs and try again.";async function x8({statement:e,hdb_user:t}){let r=await v8(e.table.databaseid,e.table.tableid),n=G8(e.columns);eR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=M8(s),c=eR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=tR.parse(l).statements[0],u=await B8(_),d=F8(n,u);return k8(o,d,t)}a(x8,"update");function G8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=tR.compile(`SELECT ${r.expression.toString()} AS [${H8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw lU.error(t),new Error(q8)}}a(G8,"createUpdateRecord");function F8(e,t){return eR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(F8,"buildUpdateRecords");async function k8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await P8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){lU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(k8,"updateRecords")});var EU=g((fRe,fU)=>{var $8=require("alasql"),V8=Ar(),Y8=G(),K8=In(),nR=require("util"),rR=W(),W8=C(),Q8=wn(),_Re=CE(),dRe=Or(),j8="record",z8="successfully deleted",J8=nR.callbackify(t6),X8=nR.promisify(V8.search),Z8=nR.promisify(Q8.getTableSchema);fU.exports={convertDelete:J8};function e6(e){return`${e.deleted_hashes.length} ${j8}${e.deleted_hashes.length===1?"":"s"} ${z8}`}a(e6,"generateReturnMessage");async function t6({statement:e,hdb_user:t}){let r=await Z8(e.table.databaseid,e.table.tableid);rR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=rR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=$8.parse(o).statements[0],l={operation:W8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await X8(c);let _=await K8.deleteRecords(l);return rR.isEmptyOrZeroLength(_.message)&&(_.message=e6(_)),delete _.txn_time,_}catch(_){throw Y8.error(_),_.hdb_code?_.message:_}}a(t6,"convertDelete")});var TU=g((hRe,SU)=>{"use strict";var r6=ji(),{hdb_errors:hU}=se(),{getDatabases:pU}=(Re(),ie(Ge));SU.exports={checkSchemaExists:mU,checkSchemaTableExists:n6,schema_describe:r6};async function mU(e){if(!pU()[e])return hU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(mU,"checkSchemaExists");async function n6(e,t){let r=await mU(e);if(r)return r;if(!pU()[e][t])return hU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(n6,"checkSchemaTableExists")});var ht=g((RRe,xU)=>{"use strict";var zt=J();zt.initSync();var s6=require("fs-extra"),i6=require("semver"),Ju=require("path"),{monotonicFactory:o6}=require("ulidx"),RU=o6(),a6=require("util"),AU=require("child_process"),c6=a6.promisify(AU.exec),l6=AU.spawn,we=et(),Be=C(),aR=W(),_n=G(),LE=ci(),u6=CE(),ju=Et(),{onMessageByType:_6}=tt(),{isMainThread:d6}=require("worker_threads"),{Encoder:f6,decode:cR}=require("msgpackr"),OU=new f6,{isEmpty:ma}=aR,NU=yr(),E6=48*36e11,h6=5e9;d6&&_6(Be.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,pa=void 0});var{connect:p6,StorageType:bU,RetentionPolicy:yU,AckPolicy:DE,DeliverPolicy:PE,DiscardPolicy:m6,NatsConnection:mRe,JetStreamManager:SRe,JetStreamClient:TRe,StringCodec:gRe,JSONCodec:S6,createInbox:lR,headers:T6,ErrorCode:gU}=require("nats"),{PACKAGE_ROOT:g6}=C(),R6=Bo(),{recordAction:A6}=(li(),ie(Pu)),IU=S6(),O6="clustering",N6=R6.engines[we.NATS_SERVER_NAME],b6=Ju.join(g6,"dependencies"),oR=Ju.join(b6,`${process.platform}-${process.arch}`,we.NATS_BINARY_NAME),sR,iR,zu,Ea,ha;xU.exports={runCommand:wU,checkNATSServerInstalled:y6,createConnection:uR,getConnection:ME,getJetStreamManager:Xu,getJetStream:LU,getNATSReferences:wr,getServerList:w6,createLocalStream:_R,listStreams:DU,deleteLocalStream:C6,getServerConfig:Zu,listRemoteStreams:L6,viewStream:D6,viewStreamIterator:P6,publishToStream:M6,createWorkQueueStream:U6,addSourceToWorkStream:MU,request:B6,removeSourceFromWorkStream:vU,reloadNATS:dR,reloadNATSHub:H6,reloadNATSLeaf:q6,extractServerName:UU,requestErrorHandler:x6,updateWorkStream:G6,createLocalTableStream:HU,createTableStreams:F6,purgeTableStream:qU,purgeSchemaTableStreams:k6,getStreamInfo:$6,updateLocalStreams:Y6,closeConnection:I6,getJsmServerName:e_,addNatsMsgHeader:PU,updateIngestStreamConsumer:v6,clearClientCache:CU};async function wU(e,t=void 0){let{stdout:r,stderr:n}=await c6(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
10
10
|
`,""));return r.replace(`
|
|
11
|
-
`,"")}a(CU,"runCommand");async function b6(){try{await n6.access(iR)}catch{return!1}let e=await CU(`${iR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return s6.eq(t,O6)}a(b6,"checkNATSServerInstalled");async function lR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await bU.getClusterUser();if(ma(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}un.trace("create nats connection called");let i=await h6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:jt.get(ve.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:jt.get(ve.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:jt.get(ve.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),un.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&un.error("Error with Nats client connection, connection closed",o),LU()}),i}a(lR,"createConnection");function LU(){Pn=void 0,Ea=void 0,ha=void 0,pa=void 0}a(LU,"clearClientCache");async function y6(){Pn&&(await Pn.drain(),Pn=void 0,Ea=void 0,ha=void 0,pa=void 0)}a(y6,"closeConnection");var Pn,pa;async function ME(){return pa||(pa=lR(jt.get(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await pa),Pn||pa}a(ME,"getConnection");async function Xu(){if(Ea)return Ea;ma(Pn)&&await ME();let{domain:e}=Zu(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ea=await Pn.jetstreamManager({domain:e,timeout:6e4}),Ea}a(Xu,"getJetStreamManager");async function DU(){if(ha)return ha;ma(Pn)&&await ME();let{domain:e}=Zu(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ha=Pn.jetstream({domain:e,timeout:6e4}),ha}a(DU,"getJetStream");async function yr(){let e=Pn||await ME(),t=Ea||await Xu(),r=ha||await DU();return{connection:e,jsm:t,js:r}}a(yr,"getNATSReferences");async function I6(e){let t=jt.get(ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await bU.getClusterUser(),s=await lR(t,r,n),i=cR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=wU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await oR.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(I6,"getServerList");async function uR(e,t){let{jsm:r}=await yr(),n=jt.get(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jt.get(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=jt.get(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:yU.File,retention:IU.Limits,subjects:t,discard:p6.Old,max_msgs:s,max_bytes:i,max_age:n})}a(uR,"createLocalStream");async function PU(){let{jsm:e}=await yr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(PU,"listStreams");async function w6(e){let{jsm:t}=await yr();await t.streams.delete(e)}a(w6,"deleteLocalStream");async function C6(e){let{connection:t}=await yr(),r=[],n=cR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(wU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(C6,"listRemoteStreams");async function L6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await yr(),i=AU(),o={durable_name:i,ack_policy:DE.Explicit};t&&(o.deliver_policy=PE.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=aR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Ie.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(L6,"viewStream");async function*D6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await yr(),i=AU(),o={durable_name:i,ack_policy:DE.Explicit};t&&(o.deliver_policy=PE.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=aR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Ie.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(D6,"viewStreamIterator");async function P6(e,t,r,n){un.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=MU(n,r);let{js:s}=await yr(),i=await e_(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:NU.encode(n);try{un.trace(`publishToStream publishing to subject: ${o}`),R6(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return HU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){un.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await uR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(P6,"publishToStream");function MU(e,t){t===void 0&&(t=S6());let r=jt.get(ve.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ie.MSG_HEADERS.ORIGIN)&&r&&t.append(Ie.MSG_HEADERS.ORIGIN,r),t}a(MU,"addNatsMsgHeader");function Zu(e){e=e.toLowerCase();let t=Ju.join(jt.get(ve.CONFIG_PARAMS.ROOTPATH),A6);if(e===ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ma(sR)&&(sR={port:ju.getConfigFromFile(ve.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ju.getConfigFromFile(ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ie.SERVER_SUFFIX.HUB,config_file:Ie.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ju.join(t,Ie.PID_FILES.HUB),hdb_nats_path:t}),sR;if(e===ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ma(nR)&&(nR={port:ju.getConfigFromFile(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ju.getConfigFromFile(ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ie.SERVER_SUFFIX.LEAF,config_file:Ie.NATS_CONFIG_FILES.LEAF_SERVER,domain:ju.getConfigFromFile(ve.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ie.SERVER_SUFFIX.LEAF,pid_file_path:Ju.join(t,Ie.PID_FILES.LEAF),hdb_nats_path:t}),nR;un.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Zu,"getServerConfig");async function M6(e){let{jsm:t}=await yr(),r=await e_();try{await t.streams.add({name:e.stream_name,storage:yU.File,retention:IU.Limits,max_age:f6,max_bytes:E6,subjects:[`${Ie.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:DE.Explicit,durable_name:e.durable_name,deliver_policy:PE.All,max_ack_pending:1e4});else throw n}}a(M6,"createWorkQueueStream");async function U6(){let{jsm:e}=await yr();(await e.consumers.info(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ie.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(un.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ie.WORK_QUEUE_CONSUMER_NAMES.durable_name),un.info("Adding pull consumer to ingest stream"),await e.consumers.add(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:DE.Explicit,durable_name:Ie.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:PE.All,max_ack_pending:1e4}))}a(U6,"updateIngestStreamConsumer");async function UU(e,t,r){let{jsm:n}=await yr(),s=await n.streams.info(t),i=vU(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:l}=r,_=LE.createNatsTableStreamName(c,l),u=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let m=0,S=s.config.sources.length;m<S;m++)if(d=s.config.sources[m],f=m,u&&d.name===_||!u&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let m=`txn.${c}.${l}.${e}`;await n.streams.purge(t,{filter:m}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${Ie.SUBJECT_PREFIXES.TXN}.>`};u||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(UU,"addSourceToWorkStream");function vU(e){return e.split(".")[1]}a(vU,"extractServerName");async function BU(e,t,r){let{jsm:n}=await yr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=LE.createNatsTableStreamName(s,i),l=await n.streams.info(t);if(!Array.isArray(l.config.sources)||l.config.sources.length===0)return;let _=l.config.sources.length,u;for(;_--;)if(u=l.config.sources[_],u.name===c&&u.external.api===`$JS.${e}.API`){l.config.sources.splice(_,1);break}await n.streams.update(t,l.config)}a(BU,"removeSourceFromWorkStream");async function v6(e,t,r=6e4,n=cR()){if(!oR.isObject(t))throw new Error("data param must be an object");let s=NU.encode(t),{connection:i}=await yr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return aR(c.data)}a(v6,"request");function _R(e){return new Promise(async(t,r)=>{let n=c6(iR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(_R,"reloadNATS");async function B6(){let{pid_file_path:e}=Zu(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await _R(e)}a(B6,"reloadNATSHub");async function H6(){let{pid_file_path:e}=Zu(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await _R(e)}a(H6,"reloadNATSLeaf");function q6(e,t,r){let n;switch(e.code){case RU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case RU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(q6,"requestErrorHandler");async function x6(e,t){let r=t+Ie.SERVER_SUFFIX.LEAF;await HU(async()=>{e.subscribe===!0?await UU(r,Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await BU(r,Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(x6,"updateWorkStream");function HU(e){return l6.writeTransaction(ve.SYSTEM_SCHEMA_NAME,ve.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(HU,"exclusiveLock");async function qU(e,t){let r=LE.createNatsTableStreamName(e,t),n=await e_(),s=$6(e,t,n);await uR(r,[s])}a(qU,"createLocalTableStream");async function G6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await qU(n,s)}}a(G6,"createTableStreams");async function xU(e,t,r=!1){if(jt.get(ve.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=LE.createNatsTableStreamName(e,t),{jsm:s}=await yr();r?await s.streams.purge(Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")un.warn(n);else throw n}}a(xU,"purgeTableStream");async function F6(e,t){if(jt.get(ve.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await xU(e,t[r])}a(F6,"purgeSchemaTableStreams");async function k6(e){return(await Xu()).streams.info(e)}a(k6,"getStreamInfo");function $6(e,t,r){return`${Ie.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a($6,"createSubjectName");async function e_(){if(zu)return zu;if(zu=(await Xu())?.nc?.info?.server_name,zu===void 0)throw new Error("Unable to get jetstream manager server name");return zu}a(e_,"getJsmServerName");async function V6(){let e=await Xu(),t=await e_(),r=await PU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Y6(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Ie.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ie.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;un.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;un.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");un.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u}await e.streams.update(s.name,s)}}}a(V6,"updateLocalStreams");function Y6(e){let{config:t}=e,r=!1;if(t.name===Ie.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Ie.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=jt.get(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jt.get(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=jt.get(ve.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Y6,"updateStreamLimits")});var HE=g((NRe,VU)=>{"use strict";var Lc=Nf(),Dc=gU(),K6=G(),W6=require("uuid").v4,ORe=require("clone"),vE=si(),Pc=w(),Q6=require("util"),so=In(),{handleHDBError:Ir,hdb_errors:j6}=se(),{HDB_ERROR_MSGS:UE,HTTP_STATUS_CODES:wr}=j6,{SchemaEventMsg:BE}=Jn(),FU=ht(),{getDatabases:z6}=(Re(),ie(Ge)),{transformReq:Mc}=W();VU.exports={createSchema:J6,createSchemaStructure:kU,createTable:X6,createTableStructure:$U,createAttribute:n9,dropSchema:Z6,dropTable:e9,dropAttribute:t9,getBackup:s9};async function J6(e){let t=await kU(e);return vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema)),t}a(J6,"createSchema");async function kU(e){let t=Lc.schema_object(e);if(t)throw Ir(t,t.message,wr.BAD_REQUEST,void 0,void 0,!0);if(Mc(e),!await Dc.checkSchemaExists(e.schema))throw Ir(new Error,UE.SCHEMA_EXISTS_ERR(e.schema),wr.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,UE.SCHEMA_EXISTS_ERR(e.schema),!0);return await so.createSchema(e),`database '${e.schema}' successfully created`}a(kU,"createSchemaStructure");async function X6(e){return Mc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await $U(e)}a(X6,"createTable");async function $U(e){let t=Lc.create_table_object(e);if(t)throw Ir(t,t.message,wr.BAD_REQUEST,void 0,void 0,!0);if(Lc.validateTableResidence(e.residence),!await Dc.checkSchemaTableExists(e.schema,e.table))throw Ir(new Error,UE.TABLE_EXISTS_ERR(e.schema,e.table),wr.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,UE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:W6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await so.createTable(n,e);else throw Ir(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",wr.BAD_REQUEST);else await so.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a($U,"createTableStructure");async function Z6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Lc.schema_object(e),n=t??r;if(n)throw Ir(n,n.message,wr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let s=await Dc.checkSchemaExists(e.schema);if(s)throw Ir(new Error,s,wr.NOT_FOUND,Pc.LOG_LEVELS.ERROR,s,!0);let i=await Dc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await so.dropSchema(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema)),await FU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Z6,"dropSchema");async function e9(e){let t=Lc.table_object(e);if(t)throw Ir(t,t.message,wr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Dc.checkSchemaTableExists(e.schema,e.table);if(r)throw Ir(new Error,r,wr.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);return await so.dropTable(e),await FU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(e9,"dropTable");async function t9(e){let t=Lc.attribute_object(e);if(t)throw Ir(t,t.message,wr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Dc.checkSchemaTableExists(e.schema,e.table);if(r)throw Ir(new Error,r,wr.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Ir(new Error,"You cannot drop a hash attribute",wr.BAD_REQUEST,void 0,void 0,!0);if(Pc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Ir(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,wr.BAD_REQUEST,void 0,void 0,!0);try{return await so.dropAttribute(e),r9(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw K6.error(`Got an error deleting attribute ${Q6.inspect(e)}.`),n}}a(t9,"dropAttribute");function r9(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(r9,"dropAttributeFromGlobal");async function n9(e){Mc(e);let t=z6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Ir(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,wr.BAD_REQUEST,void 0,void 0,!0);return await so.createAttribute(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(n9,"createAttribute");function s9(e){return so.getBackup(e)}a(s9,"getBackup")});var KU=g((yRe,YU)=>{"use strict";var{OPERATIONS_ENUM:i9}=w(),dR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=i9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};YU.exports=dR});var fR=g((CRe,JU)=>{"use strict";var o9=In(),wRe=KU(),qE=W(),xE=w(),a9=J(),{handleHDBError:WU,hdb_errors:c9}=se(),{HDB_ERROR_MSGS:QU,HTTP_STATUS_CODES:jU}=c9,l9=Object.values(xE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),zU="To use this operation audit log must be enabled in harperdb-config.yaml";JU.exports=u9;async function u9(e){if(qE.isEmpty(e.schema))throw new Error(QU.SCHEMA_REQUIRED_ERR);if(qE.isEmpty(e.table))throw new Error(QU.TABLE_REQUIRED_ERR);if(!a9.get(xE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw WU(new Error,zU,jU.BAD_REQUEST,xE.LOG_LEVELS.ERROR,zU,!0);let t=qE.checkSchemaTableExist(e.schema,e.table);if(t)throw WU(new Error,t,jU.NOT_FOUND,xE.LOG_LEVELS.ERROR,t,!0);if(!qE.isEmpty(e.search_type)&&l9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await o9.readAuditLog(e)}a(u9,"readAuditLog")});var ZU=g((DRe,XU)=>{"use strict";var{OPERATIONS_ENUM:_9}=w(),ER=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=_9.GET_BACKUP,this.schema=t,this.table=r}};XU.exports=ER});var rv=g((vRe,tv)=>{"use strict";var d9=In(),MRe=ZU(),hR=W(),f9=w(),URe=J(),{handleHDBError:E9,hdb_errors:h9}=se(),{HDB_ERROR_MSGS:ev,HTTP_STATUS_CODES:p9}=h9;tv.exports=m9;async function m9(e){if(hR.isEmpty(e.schema))throw new Error(ev.SCHEMA_REQUIRED_ERR);if(hR.isEmpty(e.table))throw new Error(ev.TABLE_REQUIRED_ERR);let t=hR.checkSchemaTableExist(e.schema,e.table);if(t)throw E9(new Error,t,p9.NOT_FOUND,f9.LOG_LEVELS.ERROR,t,!0);return await d9.getBackup(read_audit_log_object)}a(m9,"getBackup")});var cv=g((HRe,av)=>{var io=require("validate.js"),sv=rt(),Uc=w(),{handleHDBError:S9,hdb_errors:T9}=se(),{HDB_ERROR_MSGS:pt,HTTP_STATUS_CODES:g9}=T9,pR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),R9={STRUCTURE_USER:"structure_user"},nv=Object.values(Uc.ROLE_TYPES_ENUM),A9="attribute_permissions",O9="attribute_name",{PERMS_CRUD_ENUM:vc}=Uc,N9=[A9,...Object.values(vc)],iv=[vc.READ,vc.INSERT,vc.UPDATE],b9=[O9,...iv];function y9(e){let t=pR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ov(e,t)}a(y9,"addRoleValidation");function I9(e){let t=pR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ov(e,t)}a(I9,"alterRoleValidation");function w9(e){let t=pR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,sv.validateObject(e,t)}a(w9,"dropRoleValidation");var C9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ov(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)C9.includes(n[o])||s.push(n[o]);s.length>0&&At(pt.INVALID_ROLE_JSON_KEYS(s),r);let i=sv.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=L9(e);o&&At(o,r),nv.forEach(c=>{e.permission[c]&&!io.isBoolean(e.permission[c])&&At(pt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(nv.indexOf(o)<0){if(o===R9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||At(pt.SCHEMA_NOT_FOUND(d),r)}continue}At(pt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(pt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){At(pt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{N9.includes(u)||At(pt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(vc).forEach(u=>{io.isDefined(_[u])?io.isBoolean(_[u])||At(pt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):At(pt.TABLE_PERM_MISSING(u),r,o,l)}),io.isDefined(_.attribute_permissions)){if(!io.isArray(_.attribute_permissions)){At(pt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{At(pt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].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(m=>{!b9.includes(m)&&m!==vc.DELETE&&At(pt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!io.isDefined(E.attribute_name)){At(pt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){At(pt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}iv.forEach(m=>{io.isDefined(E[m])?io.isBoolean(E[m])||At(pt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):At(pt.ATTR_PERM_MISSING(m,h),r,o,l)}),!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}.${l}`;At(pt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return D9(r)}a(ov,"customValidate");av.exports={addRoleValidation:y9,alterRoleValidation:I9,dropRoleValidation:w9};function L9(e){let{operation:t,permission:r}=e;if(t===Uc.OPERATIONS_ENUM.ADD_ROLE||t===Uc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return pt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Uc.ROLE_TYPES_ENUM.SUPER_USER:Uc.ROLE_TYPES_ENUM.CLUSTER_USER;return pt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(L9,"validateNoSUPerms");function D9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:pt.ROLE_PERMS_ERROR,...e};return S9(new Error,n,g9.BAD_REQUEST)}else return null}a(D9,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var FE=g((xRe,dv)=>{"use strict";var lv=Ar(),uv=Rr(),P9=ta(),SR=cv(),TR=si(),M9=require("uuid").v4,U9=require("util"),GE=w(),v9=W(),gR=uv.searchByValue,B9=uv.searchByHash,H9=U9.promisify(P9.delete),q9=Xn(),x9=pc(),{hdb_errors:G9,handleHDBError:Sa}=se(),{HDB_ERROR_MSGS:_v,HTTP_STATUS_CODES:t_}=G9,{UserEventMsg:RR}=Jn();dv.exports={addRole:F9,alterRole:k9,dropRole:$9,listRoles:V9};function mR(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(mR,"scrubRoleDetails");async function F9(e){let t=SR.addRoleValidation(e);if(t)throw t;e=mR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await gR(r)||[])}catch(i){throw Sa(i)}if(n&&n.length>0)throw Sa(new Error,_v.ROLE_ALREADY_EXISTS(e.role),t_.CONFLICT,void 0,void 0,!0);e.id||(e.id=M9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await lv.insert(s),TR.signalUserChange(new RR(process.pid)),e=mR(e),e}a(F9,"addRole");async function k9(e){let t=SR.alterRoleValidation(e);if(t)throw t;e=mR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await lv.update(r)}catch(s){throw Sa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Sa(new Error,"Invalid role id",t_.BAD_REQUEST,void 0,void 0,!0);return await TR.signalUserChange(new RR(process.pid)),e}a(k9,"alterRole");async function $9(e){let t=SR.dropRoleValidation(e);if(t)throw Sa(new Error,t,t_.BAD_REQUEST,void 0,void 0,!0);let r=new x9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await B9(r));if(n.length===0)throw Sa(new Error,_v.ROLE_NOT_FOUND,t_.NOT_FOUND,void 0,void 0,!0);let s=new q9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await gR(s)),o=!1;if(v9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Sa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,t_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await H9(c),TR.signalUserChange(new RR(process.pid)),`${n[0].role} successfully deleted`}a($9,"dropRole");async function V9(){return gR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(V9,"listRoles")});var pv=g((FRe,hv)=>{"use strict";var Y9=J(),oo=require("joi"),K9=rt(),fv=require("moment"),W9=require("fs-extra"),AR=require("path"),Q9=require("lodash"),r_=w(),{LOG_LEVELS:Ta}=w(),j9="YYYY-MM-DD hh:mm:ss",z9=AR.resolve(__dirname,"../logs");hv.exports=function(e){return K9.validateBySchema(e,J9)};var J9=oo.object({from:oo.custom(Ev),until:oo.custom(Ev),level:oo.valid(Ta.NOTIFY,Ta.FATAL,Ta.ERROR,Ta.WARN,Ta.INFO,Ta.DEBUG,Ta.TRACE),order:oo.valid("asc","desc"),limit:oo.number().min(1),start:oo.number().min(0),log_name:oo.custom(X9)});function Ev(e,t){if(fv(e,fv.ISO_8601).format(j9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Ev,"validateDatetime");function X9(e,t){if(Q9.invert(r_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Y9.get(r_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?r_.LOG_NAMES.HDB:e,i=s===r_.LOG_NAMES.INSTALL?AR.join(z9,r_.LOG_NAMES.INSTALL):AR.join(n,s);return W9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(X9,"validateReadLogPath")});var NR=g(($Re,Sv)=>{"use strict";var kE=w(),Z9=G(),e7=J(),t7=pv(),OR=require("path"),mv=require("fs-extra"),{once:r7}=require("events"),{handleHDBError:n7,hdb_errors:s7}=se(),{PACKAGE_ROOT:i7}=w(),o7=OR.join(i7,"logs"),a7=1e3,c7=200;Sv.exports=l7;async function l7(e){let t=t7(e);if(t)throw n7(t,t.message,s7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=e7.get(kE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?kE.LOG_NAMES.HDB:e.log_name,s=n===kE.LOG_NAMES.INSTALL?OR.join(o7,kE.LOG_NAMES.INSTALL):OR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?a7:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(mv.statSync(s).size-(h+5)*c7,0));let S=mv.createReadStream(s,{start:m});S.on("error",v=>{Z9.error(v)});let A=0,T=[],R="",U;S.on("data",v=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=R+v;let V=0,Y;for(;(Y=P.exec(v))&&!S.destroyed;){U&&(U.message=v.slice(V,Y.index),B(U));let[z,oe,Se]=Y,ue=Se.split("] ["),Fe=ue[0],de=ue[1];ue.splice(0,2),U={timestamp:oe,thread:Fe,level:de,tags:ue,message:""},V=Y.index+z.length}R=v.slice(V)}),S.on("end",v=>{S.destroyed||U&&(U.message=R.trim(),B(U))}),S.resume();function B(v){let P,V,Y;switch(!0){case(i&&c&&_):P=new Date(v.timestamp),V=new Date(l),Y=new Date(u),v.level===o&&P>=V&&P<=Y&&A<E?A++:v.level===o&&P>=V&&P<=Y&&(ao(v,f,T),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(v.timestamp),V=new Date(l),v.level===o&&P>=V&&A<E?A++:v.level===o&&P>=V&&(ao(v,f,T),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(v.timestamp),Y=new Date(u),v.level===o&&P<=Y&&A<E?A++:v.level===o&&P<=Y&&(ao(v,f,T),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(v.timestamp),V=new Date(l),Y=new Date(u),P>=V&&P<=Y&&A<E?A++:P>=V&&P<=Y&&(ao(v,f,T),A++,A===h&&S.destroy());break;case i:v.level===o&&A<E?A++:v.level===o&&(ao(v,f,T),A++,A===h&&S.destroy());break;case c:P=new Date(v.timestamp),V=new Date(l),P>=V&&A<E?A++:P>=V&&A>=E&&(ao(v,f,T),A++,A===h&&S.destroy());break;case _:P=new Date(v.timestamp),Y=new Date(u),P<=Y&&A<E?A++:P<=Y&&A>=E&&(ao(v,f,T),A++,A===h&&S.destroy());break;default:A<E?A++:(ao(v,f,T),A++,A===h&&S.destroy())}}return a(B,"onLogMessage"),await r7(S,"close"),T}a(l7,"readLog");function ao(e,t,r){t==="desc"?u7(e,r):t==="asc"?_7(e,r):r.push(e)}a(ao,"pushLineToResult");function u7(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(u7,"insertDescending");function _7(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(_7,"insertAscending")});var $E=g((QRe,Av)=>{"use strict";var bR=require("joi"),{string:n_,boolean:Tv,date:d7}=bR.types(),f7=rt(),{validateSchemaExists:YRe,validateTableExists:KRe,validateSchemaName:WRe}=Os(),E7=w(),h7=et(),gv=J();gv.initSync();var p7=n_.invalid(gv.get(E7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(h7.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(),Rv={operation:n_.valid("add_node","update_node","set_node_replication"),node_name:p7,subscriptions:bR.array().items({table:n_.optional(),schema:n_.optional(),database:n_.optional(),subscribe:Tv.required(),publish:Tv.required().custom(S7),start_time:d7.iso()}).min(1).required()};function m7(e){return f7.validateBySchema(e,bR.object(Rv))}a(m7,"addUpdateNodeValidator");function S7(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(S7,"checkForFalsy");Av.exports={addUpdateNodeValidator:m7,validation_schema:Rv}});var Nv=g((zRe,Ov)=>{var T7=rt(),g7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Ov.exports=function(e){return T7.validateObject(e,g7)}});var VE=g((JRe,bv)=>{"use strict";var R7=w().OPERATIONS_ENUM,yR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=R7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};bv.exports=yR});var Iv=g((ZRe,yv)=>{"use strict";var A7={OPERATION:"operation",REFRESH:"refresh"},IR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},wR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};yv.exports={JWTTokens:IR,TOKEN_TYPE_ENUM:A7,JWTRSAKeys:wR}});var o_=g((tAe,Dv)=>{"use strict";var i_=require("jsonwebtoken"),CR=require("fs-extra"),LR=W(),Mn=w(),{handleHDBError:Cr,hdb_errors:O7}=se(),{HTTP_STATUS_CODES:Lr,AUTHENTICATION_ERROR_MSGS:Dr}=O7,s_=G(),wv=Jf(),MR=Nr(),N7=Ar().update,b7=VE(),y7=si(),{UserEventMsg:I7}=Jn(),co=J();co.initSync();var DR=require("path"),{JWTTokens:w7,JWTRSAKeys:C7,TOKEN_TYPE_ENUM:YE}=Iv(),L7=co.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?co.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",D7=co.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?co.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",KE="RS256",PR;Dv.exports={createTokens:P7,validateOperationToken:U7,refreshOperationToken:M7,validateRefreshToken:Lv};async function P7(e){if(LR.isEmpty(e)||typeof e!="object")throw Cr(new Error,Dr.INVALID_AUTH_OBJECT,Lr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.username))throw Cr(new Error,Dr.USERNAME_REQUIRED,Lr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.password))throw Cr(new Error,Dr.PASSWORD_REQUIRED,Lr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await MR.findAndValidateUser(e.username,e.password),!t)throw Cr(new Error,Dr.INVALID_CREDENTIALS,Lr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw s_.error(f),Cr(new Error,Dr.INVALID_CREDENTIALS,Lr.UNAUTHORIZED,void 0,void 0,!0)}let r=await WE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await Cv(i,r.private_key,r.passphrase),c=await i_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:D7,algorithm:KE,subject:YE.REFRESH}),l=wv.hash(c),_=new b7(Mn.SYSTEM_SCHEMA_NAME,Mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await N7(_)}catch(f){s_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Cr(new Error,Dr.REFRESH_TOKEN_SAVE_FAILED,Lr.INTERNAL_SERVER_ERROR);return y7.signalUserChange(new I7(process.pid)),new w7(o,c)}a(P7,"createTokens");async function Cv(e,t,r){return await i_.sign(e,{key:t,passphrase:r},{expiresIn:L7,algorithm:KE,subject:YE.OPERATION})}a(Cv,"signOperationToken");async function WE(){if(PR===void 0)try{let e=DR.join(co.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=DR.join(co.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=DR.join(co.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await CR.readFile(e)).toString(),s=(await CR.readFile(t)).toString(),i=(await CR.readFile(r)).toString();PR=new C7(i,s,n)}catch(e){throw s_.error(e),Cr(new Error,Dr.NO_ENCRYPTION_KEYS,Lr.INTERNAL_SERVER_ERROR)}return PR}a(WE,"getJWTRSAKeys");async function M7(e){if(!e)throw Cr(new Error,Dr.INVALID_BODY,Lr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Cr(new Error,Dr.REFRESH_TOKEN_REQUIRED,Lr.BAD_REQUEST,void 0,void 0,!0);await Lv(e.refresh_token);let t=await WE(),r=await i_.decode(e.refresh_token);return{operation_token:await Cv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(M7,"refreshOperationToken");async function U7(e){try{let t=await WE(),r=await i_.verify(e,t.public_key,{algorithms:KE,subject:YE.OPERATION});return await MR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw s_.warn(t),t.name&&t.name==="TokenExpiredError"?Cr(new Error,Dr.TOKEN_EXPIRED,Lr.FORBIDDEN):Cr(new Error,Dr.INVALID_TOKEN,Lr.UNAUTHORIZED)}}a(U7,"validateOperationToken");async function Lv(e){let t;try{let r=await WE(),n=await i_.verify(e,r.public_key,{algorithms:KE,subject:YE.REFRESH});t=await MR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw s_.warn(r),r.name&&r.name==="TokenExpiredError"?Cr(new Error,Dr.TOKEN_EXPIRED,Lr.FORBIDDEN):Cr(new Error,Dr.INVALID_TOKEN,Lr.UNAUTHORIZED)}if(!wv.validate(t.refresh_token,e))throw Cr(new Error,Dr.INVALID_TOKEN,Lr.UNAUTHORIZED);return t}a(Lv,"validateRefreshToken")});var UR=g((sAe,Uv)=>{"use strict";var v7=Nv(),Bc=require("passport"),B7=require("passport-local").Strategy,H7=require("passport-http").BasicStrategy,q7=require("util"),x7=Nr(),Mv=q7.callbackify(x7.findAndValidateUser),nAe=Vr(),G7=w(),Pv=o_();Bc.use(new B7(function(e,t,r){Mv(e,t,r)}));Bc.use(new H7(function(e,t,r){Mv(e,t,r)}));Bc.serializeUser(function(e,t){t(null,e)});Bc.deserializeUser(function(e,t){t(null,e)});function F7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Bc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===G7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Pv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):Pv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Bc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(F7,"authorize");function k7(e,t){let r=v7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(k7,"checkPermissions");Uv.exports={authorize:F7,checkPermissions:k7}});var Hc=g((oAe,vv)=>{"use strict";var vR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},BR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};vv.exports={Node:vR,NodeSubscription:BR}});var Hv=g((cAe,Bv)=>{"use strict";var $7=w().OPERATIONS_ENUM,HR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=$7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Bv.exports=HR});var a_=g((uAe,qv)=>{"use strict";var qR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},xR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};qv.exports={RemotePayloadObject:qR,RemotePayloadSubscription:xR}});var Gv=g((dAe,xv)=>{"use strict";var GR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};xv.exports=GR});var $v=g((mAe,kv)=>{"use strict";var V7=Gv(),EAe=_t(),Fv=Ve(),Y7=G(),{getSchemaPath:hAe,getTransactionAuditStorePath:pAe}=ze(),{getDatabases:K7}=(Re(),ie(Ge));kv.exports=W7;async function W7(e){let t=new V7;try{let r=K7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Fv.environmentDataSize(schema_path,e.name),o=await Fv.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){Y7.warn(`unable to stat table dbi due to ${r}`)}return t}a(W7,"lmdbGetTableSize")});var Yv=g((TAe,Vv)=>{"use strict";var FR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Vv.exports=FR});var _i=g((OAe,jv)=>{"use strict";var Q7=require("fs-extra"),j7=require("path"),ir=require("systeminformation"),lo=G(),z7=ht(),kR=et(),jE=w(),J7=$v(),Qv=ji(),{getThreadInfo:Kv}=tt(),XR=J();XR.initSync();var X7=Yv(),{openEnvironment:RAe}=Ve(),{getSchemaPath:AAe}=ze(),{database:Z7}=(Re(),ie(Ge)),QE;jv.exports={getHDBProcessInfo:KR,getNetworkInfo:QR,getDiskInfo:WR,getMemoryInfo:YR,getCPUInfo:VR,getTimeInfo:$R,getSystemInformation:jR,systemInformation:eee,getTableSize:zR,getMetrics:JR};function $R(){return ir.time()}a($R,"getTimeInfo");async function VR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await ir.cpu();u.cpu_speed=await ir.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:A,...T}=await ir.currentLoad();return T.cpus=[],A.forEach(R=>{let{raw_load:U,raw_load_idle:B,raw_load_irq:v,raw_load_nice:P,raw_load_system:V,raw_load_user:Y,...z}=R;T.cpus.push(z)}),u.current_load=T,u}catch(e){return lo.error(`error in getCPUInfo: ${e}`),{}}}a(VR,"getCPUInfo");async function YR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await ir.mem();return Object.assign(s,process.memoryUsage())}catch(e){return lo.error(`error in getMemoryInfo: ${e}`),{}}}a(YR,"getMemoryInfo");async function KR(){let e={core:[],clustering:[]};try{let t=await ir.processes(),r;try{r=Number.parseInt(await Q7.readFile(j7.join(XR.get(jE.CONFIG_PARAMS.ROOTPATH),jE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jE.NODE_ERROR_CODES.ENOENT)lo.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return lo.error(`error in getHDBProcessInfo: ${t}`),e}}a(KR,"getHDBProcessInfo");async function WR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await ir.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await ir.fsStats();return e.read_write=_,e.size=await ir.fsSize(),e}catch(t){return lo.error(`error in getDiskInfo: ${t}`),e}}a(WR,"getDiskInfo");async function QR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ir.networkInterfaceDefault(),e.latency=await ir.inetChecksite("google.com"),(await ir.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await ir.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return lo.error(`error in getNetworkInfo: ${t}`),e}}a(QR,"getNetworkInfo");async function jR(){if(QE!==void 0)return QE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await ir.osInfo();e=c;let l=await ir.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,QE=e,QE}catch(t){return lo.error(`error in getSystemInformation: ${t}`),e}}a(jR,"getSystemInformation");async function zR(){let e=[],t=await Qv.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await J7(n));return e}a(zR,"getTableSize");async function JR(){let e=await Qv.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=Z7({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[l,_,u]=c.trim().split(" ");return{pid:l,thread:_,txnid:u}}),n[s]=o}catch(i){lo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(JR,"getMetrics");async function Wv(){if(XR.get(jE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await z7.getNATSReferences(),r=await t.streams.info(kR.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(kR.WORK_QUEUE_CONSUMER_NAMES.stream_name,kR.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(Wv,"getNatsStreamInfo");async function eee(e){let t=new X7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await jR(),t.time=$R(),t.cpu=await VR(),t.memory=await YR(),t.disk=await WR(),t.network=await QR(),t.harperdb_processes=await KR(),t.table_size=await zR(),t.metrics=await JR(),t.threads=await Kv(),t.replication=await Wv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await jR();break;case"time":t.time=$R();break;case"cpu":t.cpu=await VR();break;case"memory":t.memory=await YR();break;case"disk":t.disk=await WR();break;case"network":t.network=await QR();break;case"harperdb_processes":t.harperdb_processes=await KR();break;case"table_size":t.table_size=await zR();break;case"database_metrics":case"metrics":t.metrics=await JR();break;case"threads":t.threads=await Kv();break;case"replication":t.replication=await Wv();break;default:break}return t}a(eee,"systemInformation")});var di=g((IAe,Zv)=>{"use strict";var tee=Ar(),ZR=W(),ree=require("util"),ga=w(),zv=J();zv.initSync();var nee=UR(),Jv=Rr(),{Node:bAe,NodeSubscription:yAe}=Hc(),see=pc(),iee=Hv(),{RemotePayloadObject:oee,RemotePayloadSubscription:aee}=a_(),{handleHDBError:cee,hdb_errors:lee}=se(),{HTTP_STATUS_CODES:uee,HDB_ERROR_MSGS:_ee}=lee,dee=Xn(),fee=_i(),Eee=Gi(),{getDatabases:hee}=(Re(),ie(Ge)),pee=ree.promisify(nee.authorize),mee=Jv.searchByHash,See=Jv.searchByValue;Zv.exports={authHeaderToUser:Tee,isEmpty:gee,getNodeRecord:Ree,upsertNodeRecord:Aee,buildNodePayloads:Oee,checkClusteringEnabled:Nee,getAllNodeRecords:bee,getSystemInfo:yee,reverseSubscription:Xv};async function Tee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await pee(t,null),e}a(Tee,"authHeaderToUser");function gee(e){return e==null}a(gee,"isEmpty");async function Ree(e){let t=new see(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return mee(t)}a(Ree,"getNodeRecord");async function Aee(e){let t=new iee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return tee.upsert(t)}a(Aee,"upsertNodeRecord");function Xv(e){if(ZR.isEmpty(e.subscribe)||ZR.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Xv,"reverseSubscription");function Oee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=ZR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Xv(c),E=hee()[l]?.[_],h=new aee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new oee(r,t,s,n)}a(Oee,"buildNodePayloads");function Nee(){if(!zv.get(ga.CONFIG_PARAMS.CLUSTERING_ENABLED))throw cee(new Error,_ee.CLUSTERING_NOT_ENABLED,uee.BAD_REQUEST,void 0,void 0,!0)}a(Nee,"checkClusteringEnabled");async function bee(){let e=new dee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await See(e))}a(bee,"getAllNodeRecords");async function yee(){let e=await fee.getSystemInformation();return{hdb_version:Eee.version(),node_version:e.node_version,platform:e.platform}}a(yee,"getSystemInfo")});var eA=g((CAe,a0)=>{"use strict";var zE=ht(),e0=W(),t0=et(),r0=w(),JE=G(),n0=HE(),Iee=hu(),{RemotePayloadObject:wee}=a_(),{handleHDBError:s0,hdb_errors:Cee}=se(),{HTTP_STATUS_CODES:i0}=Cee,{NodeSubscription:o0}=Hc();a0.exports=Lee;async function Lee(e,t){let r;try{r=await zE.request(`${t}.${t0.REQUEST_SUFFIX}`,new wee(r0.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),JE.trace("Response from remote describe all request:",r)}catch(o){JE.error(`addNode received error from describe all request to remote node: ${o}`);let c=zE.requestErrorHandler(o,"add_node",t);throw s0(new Error,c,i0.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===t0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw s0(new Error,o,i0.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===r0.SYSTEM_SCHEMA_NAME){await zE.createLocalTableStream(l,c);let h=new o0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=e0.doesSchemaExist(l),u=n[l]!==void 0,d=c?e0.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(JE.trace(`addNode creating schema: ${l}`),await n0.createSchema({operation:"create_schema",schema:l})),!d&&f){JE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Iee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await n0.createTable(h)}await zE.createLocalTableStream(l,c);let E=new o0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Lee,"reviewSubscriptions")});var u_=g((DAe,u0)=>{"use strict";var{handleHDBError:XE,hdb_errors:Dee}=se(),{HTTP_STATUS_CODES:ZE}=Dee,{addUpdateNodeValidator:Pee}=$E(),c_=G(),l0=w(),c0=et(),Mee=W(),tA=ht(),l_=di(),Uee=J(),vee=eA(),{Node:Bee,NodeSubscription:Hee}=Hc(),{broadcast:qee}=tt(),xee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Gee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Fee=Uee.get(l0.CONFIG_PARAMS.CLUSTERING_NODENAME);u0.exports=kee;async function kee(e,t=!1){c_.trace("addNode called with:",e),l_.checkClusteringEnabled();let r=Pee(e);if(r)throw XE(r,r.message,ZE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await l_.getNodeRecord(n);if(!Mee.isEmptyOrZeroLength(d))throw XE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,ZE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await vee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=xee,o;let c=l_.buildNodePayloads(s,Fee,l0.OPERATIONS_ENUM.ADD_NODE,await l_.getSystemInfo());c_.trace("addNode sending remote payload:",c);let l;try{l=await tA.request(`${n}.${c0.REQUEST_SUFFIX}`,c)}catch(d){c_.error(`addNode received error from request: ${d}`);let f=tA.requestErrorHandler(d,"add_node",n);throw XE(new Error,f,ZE.INTERNAL_SERVER_ERROR,"error",f)}if(l.status===c0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${l.message}`;throw XE(new Error,d,ZE.INTERNAL_SERVER_ERROR,"error",d)}c_.trace(l);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];c_.trace("Add node updating work stream for node:",n,"subscriptions:",E),await tA.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Hee(E.schema,E.table,E.publish,E.subscribe))}let u=new Bee(n,_,l.system_info);return await l_.upsertNodeRecord(u),qee({type:"nats_update"}),i.length>0?o.message=Gee:o.message=`Successfully added '${n}' to manifest`,o}a(kee,"addNode")});var iA=g((UAe,f0)=>{"use strict";var{handleHDBError:rA,hdb_errors:$ee}=se(),{HTTP_STATUS_CODES:nA}=$ee,{addUpdateNodeValidator:Vee}=$E(),__=G(),d0=w(),_0=et(),MAe=W(),sA=ht(),d_=di(),Yee=J(),{cloneDeep:Kee}=require("lodash"),Wee=eA(),{Node:Qee,NodeSubscription:jee}=Hc(),{broadcast:zee}=tt(),Jee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Xee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Zee=Yee.get(d0.CONFIG_PARAMS.CLUSTERING_NODENAME);f0.exports=ete;async function ete(e){__.trace("updateNode called with:",e),d_.checkClusteringEnabled();let t=Vee(e);if(t)throw rA(t,t.message,nA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await d_.getNodeRecord(r);s.length>0&&(n=Kee(s));let{added:i,skipped:o}=await Wee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Jee,c;let l=d_.buildNodePayloads(i,Zee,d0.OPERATIONS_ENUM.UPDATE_NODE,await d_.getSystemInfo());__.trace("updateNode sending remote payload:",l);let _;try{_=await sA.request(`${r}.${_0.REQUEST_SUFFIX}`,l)}catch(u){__.error(`updateNode received error from request: ${u}`);let d=sA.requestErrorHandler(u,"update_node",r);throw rA(new Error,d,nA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===_0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw rA(new Error,u,nA.INTERNAL_SERVER_ERROR,"error",u)}__.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];__.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await sA.updateWorkStream(f,r),i[u].start_time===void 0&&delete i[u].start_time}return n||(n=[new Qee(r,[],_.system_info)]),await tte(n[0],i,_.system_info),o.length>0?c.message=Xee:c.message=`Successfully updated '${r}'`,c}a(ete,"updateNode");async function tte(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new jee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await d_.upsertNodeRecord(n),zee({type:"nats_update"})}a(tte,"updateNodeTable")});var S0=g((BAe,m0)=>{"use strict";var p0=require("joi"),{string:E0}=p0.types(),rte=rt(),h0=w(),nte=J(),ste=et();m0.exports=ite;function ite(e){let t=E0.invalid(nte.get(h0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ste.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=p0.object({operation:E0.valid(h0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return rte.validateBySchema(e,r)}a(ite,"removeNodeValidator")});var th=g((qAe,N0)=>{"use strict";var{handleHDBError:T0,hdb_errors:ote}=se(),{HTTP_STATUS_CODES:g0}=ote,ate=S0(),f_=G(),R0=di(),cte=W(),eh=w(),A0=et(),O0=ht(),lte=J(),{RemotePayloadObject:ute}=a_(),{NodeSubscription:_te}=Hc(),dte=Eu(),fte=ta(),{broadcast:Ete}=tt(),hte=lte.get(eh.CONFIG_PARAMS.CLUSTERING_NODENAME);N0.exports=pte;async function pte(e){f_.trace("removeNode called with:",e),R0.checkClusteringEnabled();let t=ate(e);if(t)throw T0(t,t.message,g0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await R0.getNodeRecord(r);if(cte.isEmptyOrZeroLength(n))throw T0(new Error,`Node '${r}' was not found.`,g0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new ute(eh.OPERATIONS_ENUM.REMOVE_NODE,hte,[]),i,o=!1;try{i=await O0.request(`${r}.${A0.REQUEST_SUFFIX}`,s),f_.trace("Remove node reply from remote node:",r,i)}catch(l){f_.error("removeNode received error from request:",l),o=!0}for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];f_.trace(`Remove node removing subscription: ${u.schema}.${u.table} for node: ${r}`);let d=new _te(u.schema,u.table,!1,!1);await O0.updateWorkStream(d,r)}let c=new dte(eh.SYSTEM_SCHEMA_NAME,eh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await fte.deleteRecord(c),Ete({type:"nats_update"}),i?.status===A0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(f_.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(pte,"removeNode")});var I0=g((GAe,y0)=>{"use strict";var b0=require("joi"),{string:mte,array:Ste}=b0.types(),Tte=rt(),gte=$E();y0.exports=Rte;function Rte(e){let t=b0.object({operation:mte.valid("configure_cluster").required(),connections:Ste.items(gte.validation_schema).required()});return Tte.validateBySchema(e,t)}a(Rte,"configureClusterValidator")});var nh=g((kAe,P0)=>{"use strict";var Ate=w(),rh=G(),Ote=W(),Nte=th(),bte=u_(),w0=di(),yte=I0(),{handleHDBError:C0,hdb_errors:Ite}=se(),{HTTP_STATUS_CODES:L0}=Ite,wte="Configure cluster complete.",Cte="Failed to configure the cluster. Check the logs for more details.",Lte="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";P0.exports=Dte;async function Dte(e){rh.trace("configure cluster called with:",e),w0.checkClusteringEnabled();let t=yte(e);if(t)throw C0(t,t.message,L0.BAD_REQUEST,void 0,void 0,!0);let r=await w0.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(D0(Nte,{operation:Ate.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);rh.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(D0(bte,E,E.node_name))}let c=await Promise.allSettled(i);rh.trace("All results from configure_cluster add node:",c);let l=[],_=[],u=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(rh.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(Ote.isEmptyOrZeroLength(l))return{message:wte,connections:_};if(u)return{message:Lte,failed_nodes:l,connections:_};throw C0(new Error,Cte,L0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Dte,"configureCluster");async function D0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(D0,"functionWrapper")});var U0=g((VAe,M0)=>{"use strict";var sh=require("joi"),Pte=rt(),{validateSchemaExists:Mte,validateTableExists:Ute,validateSchemaName:vte}=Os(),Bte=sh.object({operation:sh.string().valid("purge_stream"),schema:sh.string().custom(Mte).custom(vte).required(),table:sh.string().custom(Ute).required()});function Hte(e){return Pte.validateBySchema(e,Bte)}a(Hte,"purgeStreamValidator");M0.exports=Hte});var oA=g((KAe,v0)=>{"use strict";var{handleHDBError:qte,hdb_errors:xte}=se(),{HTTP_STATUS_CODES:Gte}=xte,Fte=U0(),kte=ht(),$te=di();v0.exports=Vte;async function Vte(e){if(e.purge_ingest!==!0){let s=Fte(e);if(s)throw qte(s,s.message,Gte.BAD_REQUEST,void 0,void 0,!0)}$te.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await kte.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(Vte,"purgeStream")});var oh=g((QAe,F0)=>{"use strict";var cA=di(),Yte=ht(),q0=J(),ih=w(),Ra=et(),Kte=W(),aA=G(),{RemotePayloadObject:Wte}=a_(),{ErrorCode:B0}=require("nats"),H0=q0.get(ih.CONFIG_PARAMS.CLUSTERING_ENABLED),x0=q0.get(ih.CONFIG_PARAMS.CLUSTERING_NODENAME);F0.exports={clusterStatus:Qte,buildNodeStatus:G0};async function Qte(){let e={node_name:x0,is_enabled:H0,connections:[]};if(!H0)return e;let t=await cA.getAllNodeRecords();if(Kte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(G0(t[n],e.connections));return await Promise.allSettled(r),e}a(Qte,"clusterStatus");async function G0(e,t){let r=e.name,n=new Wte(ih.OPERATIONS_ENUM.CLUSTER_STATUS,x0,void 0,await cA.getSystemInfo()),s,i,o=Ra.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Yte.request(Ra.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ra.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ra.CLUSTER_STATUS_STATUSES.CLOSED,aA.error(`Error getting node status from ${r} `,s))}catch(l){aA.warn(`Error getting node status from ${r}`,l),l.code===B0.NoResponders?o=Ra.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===B0.Timeout?o=Ra.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ra.CLUSTER_STATUS_STATUSES.CLOSED}let c=new jte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==ih.PRE_4_0_0_VERSION&&await cA.upsertNodeRecord(l)}catch(l){aA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(G0,"buildNodeStatus");function jte(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(jte,"NodeStatusObject")});var ch=g((zAe,k0)=>{"use strict";var{handleHDBError:zte,hdb_errors:Jte}=se(),{HTTP_STATUS_CODES:Xte}=Jte,Zte=ht(),ere=di(),lA=W(),ah=require("joi"),tre=rt(),rre=2e3,nre=ah.object({timeout:ah.number().min(1),connected_nodes:ah.boolean(),routes:ah.boolean()});k0.exports=sre;async function sre(e){ere.checkClusteringEnabled();let t=tre.validateBySchema(e,nre);if(t)throw zte(t,t.message,Xte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||lA.autoCastBoolean(n),o=s===void 0||lA.autoCastBoolean(s),c={nodes:[]},l=await Zte.getServerList(r??rre),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:lA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(sre,"clusterNetwork")});var K0=g((XAe,Y0)=>{"use strict";var uA=require("joi"),$0=rt(),{route_constraints:V0}=og();Y0.exports={setRoutesValidator:ire,deleteRoutesValidator:ore};function ire(e){let t=uA.object({server:uA.valid("hub","leaf").required(),routes:V0.required()});return $0.validateBySchema(e,t)}a(ire,"setRoutesValidator");function ore(e){let t=uA.object({routes:V0.required()});return $0.validateBySchema(e,t)}a(ore,"deleteRoutesValidator")});var uh=g((eOe,z0)=>{"use strict";var Aa=Et(),_A=W(),lh=w(),W0=K0(),{handleHDBError:Q0,hdb_errors:are}=se(),{HTTP_STATUS_CODES:j0}=are,cre="cluster routes successfully set",lre="cluster routes successfully deleted";z0.exports={setRoutes:ure,getRoutes:_re,deleteRoutes:dre};function ure(e){let t=W0.setRoutesValidator(e);if(t)throw Q0(t,t.message,j0.BAD_REQUEST,void 0,void 0,!0);let r=Aa.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=_A.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:cre,set:o,skipped:i}}a(ure,"setRoutes");function _re(){let e=Aa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(_re,"getRoutes");function dre(e){let t=W0.deleteRoutesValidator(e);if(t)throw Q0(t,t.message,j0.BAD_REQUEST,void 0,void 0,!0);let r=Aa.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=_A.isEmptyOrZeroLength(n)?null:n,Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=_A.isEmptyOrZeroLength(s)?null:s,Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:lre,deleted:i,skipped:o}}a(dre,"deleteRoutes")});var X0=g((rOe,J0)=>{"use strict";var E_=require("alasql"),Oa=require("recursive-iterator"),as=G(),fre=W(),h_=w(),dA=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,hre(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(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Ere(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Ere(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(Ere,"filterReadRestrictedAttrs");function hre(e,t,r,n,s){pre(e,t,r,n,s)}a(hre,"interpretAST");function p_(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(p_,"addSchemaTableToMap");function pre(e,t,r,n,s){if(!e){as.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?gre(e,t,r):e instanceof E_.yy.Select?mre(e,t,r,n,s):e instanceof E_.yy.Update?Sre(e,t,r):e instanceof E_.yy.Delete?Tre(e,t,r):as.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(pre,"getRecordAttributesAST");function mre(e,t,r,n,s){if(!e){as.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(fre.isEmptyOrZeroLength(i)){as.error("No schema specified");return}e.from.forEach(c=>{p_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),p_(c.table,t,r,n,s)});let o=new Oa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{as.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Oa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{as.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Oa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{as.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Oa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{as.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(mre,"getSelectAttributes");function Sre(e,t,r){if(!e){as.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(Sre,"getUpdateAttributes");function Tre(e,t,r){if(!e){as.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Oa(e.where),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(Tre,"getDeleteAttributes");function gre(e,t,r){if(!e){as.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.into.databaseid;p_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.into.tableid,s,i.columnid,t,r)}a(gre,"getInsertAttributes");function fA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(fA,"pushAttribute");J0.exports=dA});var dh=g((sOe,rB)=>{var _h=ia(),Z0=require("chalk"),_n=G(),eB=require("prompt"),{promisify:Rre}=require("util"),EA=w(),Are=require("fs-extra"),Ore=require("path"),Nre=W(),bre=Gi(),tB=J();tB.initSync();var yre=require("moment"),Ire=Rre(eB.get),wre=Ore.join(tB.getHdbBasePath(),EA.LICENSE_KEY_DIR_NAME,EA.LICENSE_FILE_NAME,EA.LICENSE_FILE_NAME);rB.exports={getFingerprint:Lre,setLicense:Cre,parseLicense:hA,register:Dre,getRegistrationInfo:Mre};async function Cre(e){if(e&&e.key&&e.company){try{_n.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _n.error(r),_n.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Cre,"setLicense");async function Lre(){let e={};try{e=await _h.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _n.error(r),_n.error(t),new Error(r)}return e}a(Lre,"getFingerprint");async function hA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_n.info("Validating license input...");let r=_h.validateLicense(e,t);if(_n.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_n.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_n.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_n.info("writing license to disk"),await Are.writeFile(wre,JSON.stringify({license_key:e,company:t}))}catch(n){throw _n.error("Failed to write License"),n}return"Registration successful."}a(hA,"parseLicense");async function Dre(){let e=await Pre();return hA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Dre,"register");async function Pre(){let e=await _h.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Z0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Z0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{eB.start()}catch(n){_n.error(n)}let r;try{r=await Ire(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Pre,"promptForRegistration");async function Mre(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await _h.getLicense()}catch(r){throw _n.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Nre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=bre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=yre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Mre,"getRegistrationInfo")});var sB=g((oOe,nB)=>{"use strict";var Ure=et(),pA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Ure.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};nB.exports=pA});var aB=g((cOe,oB)=>{"use strict";var iB=et(),mA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+iB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+iB.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,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:l,jetstream:"enabled"}},this.system_account="SYS"}};oB.exports=mA});var lB=g((uOe,cB)=>{"use strict";var SA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};cB.exports=SA});var _B=g((dOe,uB)=>{"use strict";var vre=et(),TA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+vre.SERVER_SUFFIX.ADMIN,this.password=r}};uB.exports=TA});var mh=g((EOe,EB)=>{"use strict";var qc=require("path"),hh=require("fs-extra"),Bre=sB(),Hre=aB(),qre=lB(),xre=_B(),gA=Nr(),Gc=W(),Pr=Et(),Eh=w(),m_=et(),{CONFIG_PARAMS:mt}=Eh,S_=G(),T_=J(),dB=ci(),RA=ht(),xc="clustering",Gre=1e4,fB=5;EB.exports={generateNatsConfig:kre,removeNatsConfig:$re,getHubConfigPath:Fre};function Fre(){let e=T_.get(mt.ROOTPATH);return qc.join(e,xc,m_.NATS_CONFIG_FILES.HUB_SERVER)}a(Fre,"getHubConfigPath");async function kre(e=!1,t=void 0){T_.initSync();let r=T_.get(mt.ROOTPATH),n=qc.join(r,xc,m_.PID_FILES.HUB),s=qc.join(r,xc,m_.PID_FILES.LEAF),i=Pr.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,xc,m_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,xc,m_.NATS_CONFIG_FILES.LEAF_SERVER),l=Pr.getConfigFromFile(mt.CLUSTERING_TLS_CERTIFICATE),_=Pr.getConfigFromFile(mt.CLUSTERING_TLS_PRIVATEKEY),u=Pr.getConfigFromFile(mt.CLUSTERING_TLS_CERT_AUTH),d=Pr.getConfigFromFile(mt.CLUSTERING_TLS_INSECURE),f=Pr.getConfigFromFile(mt.CLUSTERING_TLS_VERIFY),E=Pr.getConfigFromFile(mt.CLUSTERING_NODENAME),h=Pr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await RA.checkNATSServerInstalled()||ph("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await gA.listUsers(),S=Pr.getConfigFromFile(mt.CLUSTERING_USER),A=await gA.getClusterUser();(Gc.isEmpty(A)||A.active!==!0)&&ph(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await fh(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await fh(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await fh(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),await fh(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[z,oe]of m.entries())oe.role.role===Eh.ROLE_TYPES_ENUM.CLUSTER_USER&&oe.active&&(T.push(new xre(oe.username,dB.decrypt(oe.hash))),R.push(new qre(oe.username,dB.decrypt(oe.hash))));let U=[],{hub_routes:B}=Pr.getClusteringRoutes();if(!Gc.isEmptyOrZeroLength(B))for(let z of B)U.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Bre(Pr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Pr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Pr.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),U,T,R);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=Gc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Eh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hh.writeJson(o,v),S_.trace(`Hub server config written to ${o}`));let P=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,V=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new Hre(Pr.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[V],T,R,l,_,u,d);u==null&&delete Y.tls.ca_file,(t===void 0||t===Eh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hh.writeJson(c,Y),S_.trace(`Leaf server config written to ${c}`))}a(kre,"generateNatsConfig");async function fh(e){let t=T_.get(e);return Gc.isEmpty(t)&&ph(`port undefined for '${e}'`),await Gc.isPortTaken(t)&&ph(`'${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(fh,"isPortAvailable");function ph(e){let t=`Error generating clustering config: ${e}`;S_.error(t),console.error(t),process.exit(1)}a(ph,"generateNatsConfigError");async function $re(e){let{port:t,config_file:r}=RA.getServerConfig(e),{username:n,decrypt_hash:s}=await gA.getClusterUser(),i=0,o=2e3;for(;i<fB;){try{let _=await RA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){S_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=fB)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 Gc.async_set_timeout(o*(i*2))}let c="0".repeat(Gre),l=qc.join(T_.get(mt.ROOTPATH),xc,r);await hh.writeFile(l,c),await hh.remove(l),S_.notify(e,"started.")}a($re,"removeNatsConfig")});var gB=g((pOe,TB)=>{"use strict";var dn=J(),Vre=ia(),me=w(),g_=et(),fi=require("path"),{PACKAGE_ROOT:Th}=w(),hB=J(),Sh=W(),Fc="/dev/null",Yre=fi.join(Th,"launchServiceScripts"),pB=fi.join(Th,"utility/scripts"),Kre=fi.join(pB,me.HDB_RESTART_SCRIPT),mB=fi.resolve(Th,"dependencies",`${process.platform}-${process.arch}`,g_.NATS_BINARY_NAME);function SB(){let t=Vre.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Sh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Th}}a(SB,"generateMainServerConfig");var Wre=9930;function Qre(){dn.initSync(!0);let e=dn.get(me.CONFIG_PARAMS.ROOTPATH),t=fi.join(e,"clustering",g_.NATS_CONFIG_FILES.HUB_SERVER),r=fi.join(dn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=hB.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=g_.LOG_LEVEL_FLAGS[dn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Wre?"-"+n:""),script:mB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return dn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a(Qre,"generateNatsHubServerConfig");var jre=9940;function zre(){dn.initSync(!0);let e=dn.get(me.CONFIG_PARAMS.ROOTPATH),t=fi.join(e,"clustering",g_.NATS_CONFIG_FILES.LEAF_SERVER),r=fi.join(dn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=hB.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=g_.LOG_LEVEL_FLAGS[dn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==jre?"-"+n:""),script:mB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return dn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a(zre,"generateNatsLeafServerConfig");function Jre(){dn.initSync();let e=fi.join(dn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Yre,autorestart:!1};return dn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Fc,t.error_file=Fc),t}a(Jre,"generateClusteringUpgradeV4ServiceConfig");function Xre(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Sh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:pB},script:Kre}}a(Xre,"generateRestart");function Zre(){return{apps:[SB()]}}a(Zre,"generateAllServiceConfigs");TB.exports={generateAllServiceConfigs:Zre,generateMainServerConfig:SB,generateRestart:Xre,generateNatsHubServerConfig:Qre,generateNatsLeafServerConfig:zre,generateClusteringUpgradeV4ServiceConfig:Jre}});var kc=g((TOe,MB)=>{"use strict";var Be=w(),ene=W(),Ei=mh(),R_=ht(),Ps=et(),uo=gB(),gh=J(),_o=G(),tne=di(),{startWorker:RB,onMessageFromWorkers:rne}=tt(),nne=_i(),SOe=require("util"),sne=require("child_process"),ine=require("fs"),{execFile:one}=sne,we;MB.exports={enterPM2Mode:ane,start:fo,stop:AA,reload:OB,restart:NB,list:OA,describe:yB,connect:hi,kill:dne,startAllServices:fne,startService:NA,getUniqueServicesList:IB,restartAllServices:Ene,isServiceRegistered:wB,reloadStopStart:CB,restartHdb:bB,deleteProcess:une,startClusteringProcesses:DB,startClusteringThreads:PB,isHdbRestartRunning:_ne,isClusteringRunning:pne,stopClustering:hne,reloadClustering:mne};var A_=!1;rne(e=>{e.type==="restart"&&gh.initSync(!0)});function ane(){A_=!0}a(ane,"enterPM2Mode");function hi(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{_o.setupConsoleLogging(),r&&t(r),e(n)})})}a(hi,"connect");var Mr,cne=10,AB;function fo(e,t=!1){if(A_)return lne(e);let r=one(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Mr.indexOf(r);o>-1&&Mr.splice(o,1),!AB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<cne&&(ine.existsSync(Ei.getHubConfigPath())?fo(e):(await Ei.generateNatsConfig(!0),fo(e),await new Promise(c=>setTimeout(c,3e3)),await Ei.removeNatsConfig(Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ei.removeNatsConfig(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=gh.get(Be.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ps.LOG_LEVEL_HIERARCHY[o]>=Ps.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ps.LOG_LEVELS.ERR||u===Ps.LOG_LEVELS.WRN?_o.OUTPUTS.STDERR:_o.OUTPUTS.STDOUT;_o.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ps.LOG_LEVELS[f]}if(Ps.LOG_LEVEL_HIERARCHY[o]>=Ps.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ps.LOG_LEVELS.ERR||u===Ps.LOG_LEVELS.WRN?_o.OUTPUTS.STDERR:_o.OUTPUTS.STDOUT;_o.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Mr=[],!Mr&&!t){let i=a(()=>{AB=!0,Mr&&(Mr.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)}Mr.push(r)}a(fo,"start");function lne(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(lne,"startWithPM2");function AA(e){if(!A_){for(let t of Mr||[])t.name===e&&(Mr.splice(Mr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(AA,"stop");function OB(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(OB,"reload");function NB(e){if(!A_)for(let t of Mr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(NB,"restart");function une(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(une,"deleteProcess");async function bB(){await fo(uo.generateRestart())}a(bB,"restartHdb");async function _ne(){let e=await OA();for(let t in e)if(e[t].name===Be.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(_ne,"isHdbRestartRunning");function OA(){return new Promise(async(e,t)=>{try{await hi()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(OA,"list");function yB(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(yB,"describe");function dne(){if(!A_){for(let e of Mr||[])e.kill();Mr=[];return}return new Promise(async(e,t)=>{try{await hi()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(dne,"kill");async function fne(){try{await DB(),await PB(),await fo(uo.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(fne,"startAllServices");async function NA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Be.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=uo.generateMainServerConfig();break;case Be.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=uo.generateNatsIngestServiceConfig();break;case Be.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=uo.generateNatsReplyServiceConfig();break;case Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=uo.generateNatsHubServerConfig(),await fo(r,t),await Ei.removeNatsConfig(e);return;case Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=uo.generateNatsLeafServerConfig(),await fo(r,t),await Ei.removeNatsConfig(e);return;case Be.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=uo.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fo(r)}catch(r){throw we?.disconnect(),r}}a(NA,"startService");async function IB(){try{let e=await OA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw we?.disconnect(),e}}a(IB,"getUniqueServicesList");async function Ene(e=[]){try{let t=!1,r=await IB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Be.PROCESS_DESCRIPTORS.HDB?t=!0:await NB(o))}t&&await CB(Be.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(Ene,"restartAllServices");async function wB(e){if(Mr?.find(r=>r.name===e))return!0;let t=await nne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(wB,"isServiceRegistered");async function CB(e){let t=gh.get(Be.CONFIG_PARAMS.THREADS_COUNT)??gh.get(Be.CONFIG_PARAMS.THREADS),r=await yB(e),n=ene.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await AA(e),await NA(e)):e===Be.PROCESS_DESCRIPTORS.HDB?await bB():await OB(e)}a(CB,"reloadStopStart");var LB;async function DB(e=!1){for(let t in Be.CLUSTERING_PROCESSES){let r=Be.CLUSTERING_PROCESSES[t];await NA(r,e)}}a(DB,"startClusteringProcesses");async function PB(){LB=RB(Be.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Be.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await R_.createWorkQueueStream(Ps.WORK_QUEUE_CONSUMER_NAMES),await R_.updateIngestStreamConsumer(),await R_.updateLocalStreams();let e=await tne.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Be.PRE_4_0_0_VERSION){_o.info("Starting clustering upgrade 4.0.0 process"),RB(Be.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(PB,"startClusteringThreads");async function hne(){for(let e in Be.CLUSTERING_PROCESSES)if(e!==Be.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Be.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await LB.terminate();else{let t=Be.CLUSTERING_PROCESSES[e];await AA(t)}}a(hne,"stopClustering");async function pne(){for(let e in Be.CLUSTERING_PROCESSES){let t=Be.CLUSTERING_PROCESSES[e];if(await wB(t)===!1)return!1}return!0}a(pne,"isClusteringRunning");async function mne(){await Ei.generateNatsConfig(!0),await R_.reloadNATSHub(),await R_.reloadNATSLeaf(),await Ei.removeNatsConfig(Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ei.removeNatsConfig(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(mne,"reloadClustering")});var Na=g((ROe,GB)=>{"use strict";var Sne=require("minimist"),{isMainThread:IA,parentPort:BB}=require("worker_threads"),ct=w(),{PROCESS_DESCRIPTORS_VALIDATE:O_}=ct,Ms=G(),wA=W(),Rh=mh(),$c=ht(),bA=et(),HB=Et(),Us=kc(),UB=_i(),Tne=Uo(),{restartWorkers:Ah,onMessageByType:gne}=tt(),{handleHDBError:Rne,hdb_errors:Ane}=se(),{HTTP_STATUS_CODES:One}=Ane,Oh=J();Oh.initSync();var N_=`Restarting HarperDB. This may take up to ${ct.RESTART_TIMEOUT_MS/1e3} seconds.`,Nne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",vB="Clustering is not enabled so cannot be restarted",bne="Invalid service",Vc,Un;GB.exports={restart:qB,restartService:CA};IA&&gne(ct.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?CA({service:e.workerType}):qB({operation:"restart"})});async function qB(e){Un=Object.keys(e).length===0,Vc=await Us.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR);let t=Sne(process.argv);if(t.service){await CA(t);return}if(Un&&!Vc){console.error(Nne);return}if(Un&&console.log(N_),Vc){Us.enterPM2Mode(),Ms.notify(N_);let r=Tne(Object.keys(ct.CONFIG_PARAM_MAP),!0);return wA.isEmptyOrZeroLength(Object.keys(r))||HB.updateConfigValue(void 0,void 0,r,!0,!0),Ine(),N_}return IA?(Ms.notify(N_),setTimeout(()=>{Ah()},50)):BB.postMessage({type:ct.ITC_EVENT_TYPES.RESTART}),N_}a(qB,"restart");async function CA(e){let{service:t}=e;if(ct.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Rne(new Error,bne,One.BAD_REQUEST,void 0,void 0,!0);if(Vc=await Us.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR),!IA)return BB.postMessage({type:ct.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case O_.clustering:if(!Oh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=vB;break}Un&&console.log("Restarting clustering"),Ms.notify("Restarting clustering"),await xB();break;case O_.clustering_config:case O_["clustering config"]:if(!Oh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=vB;break}Un&&console.log("Restarting clustering_config"),Ms.notify("Restarting clustering_config"),await Us.reloadClustering();break;case"custom_functions":case"custom functions":case O_.harperdb:case O_.http_workers:if(Un&&!Vc){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}Un&&console.log("Restarting http_workers"),Ms.notify("Restarting http_workers"),Un?await Us.restart(ct.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Ah("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ms.error(r),Un&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(CA,"restartService");async function yne(){await $c.publishToStream(`${bA.SUBJECT_PREFIXES.TXN}.${bA.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,bA.WORK_QUEUE_CONSUMER_NAMES.stream_name,$c.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(yne,"postDummyNatsMsg");async function Ine(){await xB(),await Us.restart(ct.HDB_PROC_DESCRIPTOR),await wA.async_set_timeout(2e3),Oh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await yA(),Un&&(await $c.closeConnection(),process.exit(0))}a(Ine,"restartPM2Mode");async function xB(){if(!HB.getConfigFromFile(ct.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await UB.getHDBProcessInfo()).clustering.length===0)Ms.trace("Clustering not running, restart will start clustering services"),await Rh.generateNatsConfig(!0),await Us.startClusteringProcesses(),await Us.startClusteringThreads(),await yA(),Un&&await $c.closeConnection();else{await yne(),await Rh.generateNatsConfig(!0),Vc?(Ms.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Us.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Us.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await UB.getHDBProcessInfo()).clustering.forEach(s=>{Ms.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await wA.async_set_timeout(3e3),await yA(),await $c.updateLocalStreams(),Un&&await $c.closeConnection(),Ms.trace("Restart clustering restarting ingest and reply service threads");let t=Ah(ct.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Ah(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(xB,"restartClustering");async function yA(){await Rh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Rh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(yA,"removeNatsConfig")});var JB=g((NOe,zB)=>{"use strict";var OOe=require("lodash"),Ur=w(),{handleHDBError:FB,hdb_errors:wne}=se(),{HDB_ERROR_MSGS:Cne,HTTP_STATUS_CODES:Lne}=wne,LA=G();zB.exports={getRolePermissions:Pne};var ba=Object.create(null),Dne=a(e=>({key:e,perms:{}}),"perms_template_obj"),YB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),KB=a((e=!1,t=!1,r=!1,n=!1)=>({[Ur.PERMS_CRUD_ENUM.READ]:e,[Ur.PERMS_CRUD_ENUM.INSERT]:t,[Ur.PERMS_CRUD_ENUM.UPDATE]:r,[Ur.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),DA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...KB(t,r,n,s)}),"table_perms_template"),kB=a((e,t=KB())=>({attribute_name:e,describe:jB(t),[b_]:t[b_],[PA]:t[PA],[MA]:t[MA]}),"attr_perms_template"),$B=a((e,t=!1)=>({attribute_name:e,describe:t,[b_]:t}),"timestamp_attr_perms_template"),{READ:b_,INSERT:PA,UPDATE:MA}=Ur.PERMS_CRUD_ENUM,WB=Object.values(Ur.PERMS_CRUD_ENUM),QB=[b_,PA,MA];function Pne(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[Ur.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(ba[t]&&ba[t].key===n)return ba[t].perms;let s=Mne(e,r);return ba[t]?ba[t].key=n:ba[t]=Dne(n),ba[t].perms=s,s}catch(r){if(!e[Ur.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ur.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ur.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw LA.error(n),LA.debug(r),FB(new Error,Cne.OUTDATED_PERMS_TRANSLATION_ERROR,Lne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
12
|
-
${r.stack}`;throw LA.error(n),FB(new Error)}}}a(Pne,"getRolePermissions");function Mne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Ur.SYSTEM_SCHEMA_NAME]=n[Ur.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Une(t[i]);return}r[i]=YB(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=vne(c,l);r[i].describe||WB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=DA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=DA()})}),r}a(Mne,"translateRolePermissions");function Une(e){let t=YB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=DA(!0,!0,!0,!0,!0)}),t}a(Une,"createStructureUserPermissions");function vne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return Ur.TIME_STAMP_NAMES.includes(d)&&(f=$B(d,u[b_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=kB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=jB(u),s.attribute_permissions.push(u),c||Bne(u,l)}else if(_!==o){let u;Ur.TIME_STAMP_NAMES.includes(_)?u=$B(_):u=kB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=VB(s),s}else return e.describe=VB(e),e}a(vne,"getTableAttrPerms");function VB(e){return WB.filter(t=>e[t]).length>0}a(VB,"getSchemaTableDescribePerm");function jB(e){return QB.filter(t=>e[t]).length>0}a(jB,"getAttributeDescribePerm");function Bne(e,t){QB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Bne,"checkForHashPerms")});var y_={};$e(y_,{authentication:()=>iH,bypassAuth:()=>$ne,login:()=>Yne,logout:()=>Kne,start:()=>Vne});function $ne(){sH=!0}async function iH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Gne?xne:[]:qne?Hne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new to([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Nh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Nh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Nh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let m=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,m===-1?s.length:m),_=await ZB.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new yh.AuthAuditLog(E,h,zt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===zt.AUTH_AUDIT_STATUS.SUCCESS?XB.notify(S):XB.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await it.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=ya.get(n),!d){let[E,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await it.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,bh.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,bh.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return kne&&(ya.get(h)||(ya.set(h,h),u(m,zt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Eo({error:A.message},e)})}ya.set(n,d),Fne&&u(d.username,zt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await it.getUser(_.user,null,e):(sH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,tH.getSuperUser)());Nh&&(e.session.update=function(E){if(!l){l=(0,rH.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,ZB.put(E)},e.login=async function(E,h){e.user=await it.getUser(E,h,e),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")&&Vi.loginPath?(f.status=302,f.headers.set("Location",Vi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new to);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Vne({server:e,port:t}){e.request(iH,{port:t||"all"}),eH||(eH=!0,setInterval(()=>{ya=new Map},vn.get(zt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),nH.user.addListener(()=>{ya=new Map}))}async function Yne(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 Kne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var tH,bh,rH,vn,zt,yh,nH,XB,Hne,qne,xne,Gne,ZB,Nh,sH,Fne,kne,ya,eH,Ih=Ne(()=>{tH=q(Nr());fr();Wl();bh=q(o_());Re();rH=require("uuid"),vn=q(J()),zt=q(w()),yh=q(G()),nH=q(Iu());Mu();Yc();XB=(0,yh.loggerWithTag)("auth-event");vn.initSync();Hne=vn.get(zt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),qne=vn.get(zt.CONFIG_PARAMS.HTTP_CORS),xne=vn.get(zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Gne=vn.get(zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),ZB=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Nh=vn.get(zt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,sH=vn.get(zt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Fne=vn.get(zt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,kne=vn.get(zt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ya=new Map;it.onInvalidatedUser(()=>{ya=new Map});a($ne,"bypassAuth");a(iH,"authentication");a(Vne,"start");a(Yne,"login");a(Kne,"logout")});var dH=g((POe,_H)=>{"use strict";var Ce=require("joi"),oH=require("fs-extra"),aH=require("path"),mi=rt(),cH=J(),lH=w(),uH=G(),{hdb_errors:Wne}=se(),{HDB_ERROR_MSGS:or}=Wne,pi=/^[a-zA-Z0-9-_]+$/;_H.exports={getDropCustomFunctionValidator:jne,setCustomFunctionValidator:zne,addComponentValidator:ese,dropCustomFunctionProjectValidator:tse,packageComponentValidator:rse,deployComponentValidator:nse,setComponentFileValidator:Jne,getComponentFileValidator:Zne,dropComponentFileValidator:Xne};function wh(e,t,r){try{let n=cH.get(lH.CONFIG_PARAMS.COMPONENTSROOT),s=aH.join(n,t);return oH.existsSync(s)?e?t:r.message(or.PROJECT_EXISTS):e?r.message(or.NO_PROJECT):t}catch(n){return uH.error(n),r.message(or.VALIDATION_ERR)}}a(wh,"checkProjectExists");function I_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(I_,"checkFilePath");function Qne(e,t,r,n){try{let s=cH.get(lH.CONFIG_PARAMS.COMPONENTSROOT),i=aH.join(s,e,t,r+".js");return oH.existsSync(i)?r:n.message(or.NO_FILE)}catch(s){return uH.error(s),n.message(or.VALIDATION_ERR)}}a(Qne,"checkFileExists");function jne(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(wh.bind(null,!0)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(pi).custom(Qne.bind(null,e.project,e.type)).custom(I_).required().messages({"string.pattern.base":or.BAD_FILE_NAME})});return mi.validateBySchema(e,t)}a(jne,"getDropCustomFunctionValidator");function zne(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(wh.bind(null,!0)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(I_).required(),function_content:Ce.string().required()});return mi.validateBySchema(e,t)}a(zne,"setCustomFunctionValidator");function Jne(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),file:Ce.string().custom(I_).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mi.validateBySchema(e,t)}a(Jne,"setComponentFileValidator");function Xne(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),file:Ce.string().custom(I_).optional()});return mi.validateBySchema(e,t)}a(Xne,"dropComponentFileValidator");function Zne(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(I_).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mi.validateBySchema(e,t)}a(Zne,"getComponentFileValidator");function ese(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(wh.bind(null,!1)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME})});return mi.validateBySchema(e,t)}a(ese,"addComponentValidator");function tse(e){let t=Ce.object({project:Ce.string().pattern(pi).custom(wh.bind(null,!0)).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME})});return mi.validateBySchema(e,t)}a(tse,"dropCustomFunctionProjectValidator");function rse(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return mi.validateBySchema(e,t)}a(rse,"packageComponentValidator");function nse(e){let t=Ce.object({project:Ce.string().pattern(pi).required().messages({"string.pattern.base":or.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":or.BAD_PACKAGE}),package:Ce.string().optional()});return mi.validateBySchema(e,t)}a(nse,"deployComponentValidator")});var Ph=g((UOe,TH)=>{"use strict";var Ch=require("joi"),Lh=require("path"),fH=require("fs-extra"),{exec:sse}=require("child_process"),ise=require("util"),EH=ise.promisify(sse),w_=w(),{handleHDBError:Kc,hdb_errors:ose}=se(),{HTTP_STATUS_CODES:Wc}=ose,C_=J(),ase=rt(),Qc=G();C_.initSync();var UA=C_.get(w_.CONFIG_PARAMS.COMPONENTSROOT),hH="npm install --omit=dev --json",cse=`${hH} --dry-run`;TH.exports={installModules:dse,auditModules:fse,installAllRootModules:lse,uninstallRootModule:use,linkHarperdb:_se};async function lse(e=!1){await Dh(),await L_(e?"npm install --ignore-scripts":"npm install",C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(lse,"installAllRootModules");async function use(e){await L_(`npm uninstall ${e}`,C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(use,"uninstallRootModule");async function _se(){await Dh(),await L_(`npm link ${w_.PACKAGE_ROOT}`,C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(_se,"linkHarperdb");async function L_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await EH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
11
|
+
`,"")}a(wU,"runCommand");async function y6(){try{await s6.access(oR)}catch{return!1}let e=await wU(`${oR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return i6.eq(t,N6)}a(y6,"checkNATSServerInstalled");async function uR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await NU.getClusterUser();if(ma(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_n.trace("create nats connection called");let i=await p6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:zt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:zt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:zt.get(Be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_n.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_n.error("Error with Nats client connection, connection closed",o),CU()}),i}a(uR,"createConnection");function CU(){Pn=void 0,Ea=void 0,ha=void 0,pa=void 0}a(CU,"clearClientCache");async function I6(){Pn&&(await Pn.drain(),Pn=void 0,Ea=void 0,ha=void 0,pa=void 0)}a(I6,"closeConnection");var Pn,pa;async function ME(){return pa||(pa=uR(zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await pa),Pn||pa}a(ME,"getConnection");async function Xu(){if(Ea)return Ea;ma(Pn)&&await ME();let{domain:e}=Zu(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ea=await Pn.jetstreamManager({domain:e,timeout:6e4}),Ea}a(Xu,"getJetStreamManager");async function LU(){if(ha)return ha;ma(Pn)&&await ME();let{domain:e}=Zu(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ma(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ha=Pn.jetstream({domain:e,timeout:6e4}),ha}a(LU,"getJetStream");async function wr(){let e=Pn||await ME(),t=Ea||await Xu(),r=ha||await LU();return{connection:e,jsm:t,js:r}}a(wr,"getNATSReferences");async function w6(e){let t=zt.get(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await NU.getClusterUser(),s=await uR(t,r,n),i=lR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=IU.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await aR.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(w6,"getServerList");async function _R(e,t){let{jsm:r}=await wr(),n=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:bU.File,retention:yU.Limits,subjects:t,discard:m6.Old,max_msgs:s,max_bytes:i,max_age:n})}a(_R,"createLocalStream");async function DU(){let{jsm:e}=await wr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(DU,"listStreams");async function C6(e){let{jsm:t}=await wr();await t.streams.delete(e)}a(C6,"deleteLocalStream");async function L6(e){let{connection:t}=await wr(),r=[],n=lR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(IU.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(L6,"listRemoteStreams");async function D6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wr(),i=RU(),o={durable_name:i,ack_policy:DE.Explicit};t&&(o.deliver_policy=PE.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=cR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(we.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(D6,"viewStream");async function*P6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wr(),i=RU(),o={durable_name:i,ack_policy:DE.Explicit};t&&(o.deliver_policy=PE.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=cR(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(we.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(P6,"viewStreamIterator");async function M6(e,t,r,n){_n.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=PU(n,r);let{js:s}=await wr(),i=await e_(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:OU.encode(n);try{_n.trace(`publishToStream publishing to subject: ${o}`),A6(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return BU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_n.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await _R(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(M6,"publishToStream");function PU(e,t){t===void 0&&(t=T6());let r=zt.get(Be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(we.MSG_HEADERS.ORIGIN)&&r&&t.append(we.MSG_HEADERS.ORIGIN,r),t}a(PU,"addNatsMsgHeader");function Zu(e){e=e.toLowerCase();let t=Ju.join(zt.get(Be.CONFIG_PARAMS.ROOTPATH),O6);if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ma(iR)&&(iR={port:ju.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ju.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.HUB,config_file:we.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ju.join(t,we.PID_FILES.HUB),hdb_nats_path:t}),iR;if(e===Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ma(sR)&&(sR={port:ju.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ju.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.LEAF,config_file:we.NATS_CONFIG_FILES.LEAF_SERVER,domain:ju.getConfigFromFile(Be.CONFIG_PARAMS.CLUSTERING_NODENAME)+we.SERVER_SUFFIX.LEAF,pid_file_path:Ju.join(t,we.PID_FILES.LEAF),hdb_nats_path:t}),sR;_n.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Zu,"getServerConfig");async function U6(e){let{jsm:t}=await wr(),r=await e_();try{await t.streams.add({name:e.stream_name,storage:bU.File,retention:yU.Limits,max_age:E6,max_bytes:h6,subjects:[`${we.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:DE.Explicit,durable_name:e.durable_name,deliver_policy:PE.All,max_ack_pending:1e4});else throw n}}a(U6,"createWorkQueueStream");async function v6(){let{jsm:e}=await wr();(await e.consumers.info(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,we.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(_n.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,we.WORK_QUEUE_CONSUMER_NAMES.durable_name),_n.info("Adding pull consumer to ingest stream"),await e.consumers.add(we.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:DE.Explicit,durable_name:we.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:PE.All,max_ack_pending:1e4}))}a(v6,"updateIngestStreamConsumer");async function MU(e,t,r){let{jsm:n}=await wr(),s=await n.streams.info(t),i=UU(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:l}=r,_=LE.createNatsTableStreamName(c,l),u=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let m=0,S=s.config.sources.length;m<S;m++)if(d=s.config.sources[m],f=m,u&&d.name===_||!u&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let m=`txn.${c}.${l}.${e}`;await n.streams.purge(t,{filter:m}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${we.SUBJECT_PREFIXES.TXN}.>`};u||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(MU,"addSourceToWorkStream");function UU(e){return e.split(".")[1]}a(UU,"extractServerName");async function vU(e,t,r){let{jsm:n}=await wr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=LE.createNatsTableStreamName(s,i),l=await n.streams.info(t);if(!Array.isArray(l.config.sources)||l.config.sources.length===0)return;let _=l.config.sources.length,u;for(;_--;)if(u=l.config.sources[_],u.name===c&&u.external.api===`$JS.${e}.API`){l.config.sources.splice(_,1);break}await n.streams.update(t,l.config)}a(vU,"removeSourceFromWorkStream");async function B6(e,t,r=6e4,n=lR()){if(!aR.isObject(t))throw new Error("data param must be an object");let s=OU.encode(t),{connection:i}=await wr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return cR(c.data)}a(B6,"request");function dR(e){return new Promise(async(t,r)=>{let n=l6(oR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(dR,"reloadNATS");async function H6(){let{pid_file_path:e}=Zu(Be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await dR(e)}a(H6,"reloadNATSHub");async function q6(){let{pid_file_path:e}=Zu(Be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await dR(e)}a(q6,"reloadNATSLeaf");function x6(e,t,r){let n;switch(e.code){case gU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case gU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(x6,"requestErrorHandler");async function G6(e,t){let r=t+we.SERVER_SUFFIX.LEAF;await BU(async()=>{e.subscribe===!0?await MU(r,we.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await vU(r,we.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(G6,"updateWorkStream");function BU(e){return u6.writeTransaction(Be.SYSTEM_SCHEMA_NAME,Be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(BU,"exclusiveLock");async function HU(e,t){let r=LE.createNatsTableStreamName(e,t),n=await e_(),s=V6(e,t,n);await _R(r,[s])}a(HU,"createLocalTableStream");async function F6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await HU(n,s)}}a(F6,"createTableStreams");async function qU(e,t,r=!1){if(zt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=LE.createNatsTableStreamName(e,t),{jsm:s}=await wr();r?await s.streams.purge(we.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")_n.warn(n);else throw n}}a(qU,"purgeTableStream");async function k6(e,t){if(zt.get(Be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await qU(e,t[r])}a(k6,"purgeSchemaTableStreams");async function $6(e){return(await Xu()).streams.info(e)}a($6,"getStreamInfo");function V6(e,t,r){return`${we.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(V6,"createSubjectName");async function e_(){if(zu)return zu;if(zu=(await Xu())?.nc?.info?.server_name,zu===void 0)throw new Error("Unable to get jetstream manager server name");return zu}a(e_,"getJsmServerName");async function Y6(){let e=await Xu(),t=await e_(),r=await DU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=K6(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===we.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${we.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;_n.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===we.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${we.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;_n.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_n.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u}await e.streams.update(s.name,s)}}}a(Y6,"updateLocalStreams");function K6(e){let{config:t}=e,r=!1;if(t.name===we.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===we.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=zt.get(Be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(K6,"updateStreamLimits")});var HE=g((NRe,$U)=>{"use strict";var Lc=Nf(),Dc=TU(),W6=G(),Q6=require("uuid").v4,ORe=require("clone"),vE=si(),Pc=C(),j6=require("util"),so=In(),{handleHDBError:Cr,hdb_errors:z6}=se(),{HDB_ERROR_MSGS:UE,HTTP_STATUS_CODES:Lr}=z6,{SchemaEventMsg:BE}=Jn(),GU=ht(),{getDatabases:J6}=(Re(),ie(Ge)),{transformReq:Mc}=W();$U.exports={createSchema:X6,createSchemaStructure:FU,createTable:Z6,createTableStructure:kU,createAttribute:s9,dropSchema:e9,dropTable:t9,dropAttribute:r9,getBackup:i9};async function X6(e){let t=await FU(e);return vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema)),t}a(X6,"createSchema");async function FU(e){let t=Lc.schema_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(Mc(e),!await Dc.checkSchemaExists(e.schema))throw Cr(new Error,UE.SCHEMA_EXISTS_ERR(e.schema),Lr.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,UE.SCHEMA_EXISTS_ERR(e.schema),!0);return await so.createSchema(e),`database '${e.schema}' successfully created`}a(FU,"createSchemaStructure");async function Z6(e){return Mc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await kU(e)}a(Z6,"createTable");async function kU(e){let t=Lc.create_table_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);if(Lc.validateTableResidence(e.residence),!await Dc.checkSchemaTableExists(e.schema,e.table))throw Cr(new Error,UE.TABLE_EXISTS_ERR(e.schema,e.table),Lr.BAD_REQUEST,Pc.LOG_LEVELS.ERROR,UE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Q6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await so.createTable(n,e);else throw Cr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Lr.BAD_REQUEST);else await so.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(kU,"createTableStructure");async function e9(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Lc.schema_object(e),n=t??r;if(n)throw Cr(n,n.message,Lr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let s=await Dc.checkSchemaExists(e.schema);if(s)throw Cr(new Error,s,Lr.NOT_FOUND,Pc.LOG_LEVELS.ERROR,s,!0);let i=await Dc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await so.dropSchema(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema)),await GU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(e9,"dropSchema");async function t9(e){let t=Lc.table_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Dc.checkSchemaTableExists(e.schema,e.table);if(r)throw Cr(new Error,r,Lr.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);return await so.dropTable(e),await GU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(t9,"dropTable");async function r9(e){let t=Lc.attribute_object(e);if(t)throw Cr(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);Mc(e);let r=await Dc.checkSchemaTableExists(e.schema,e.table);if(r)throw Cr(new Error,r,Lr.NOT_FOUND,Pc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Cr(new Error,"You cannot drop a hash attribute",Lr.BAD_REQUEST,void 0,void 0,!0);if(Pc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Cr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Lr.BAD_REQUEST,void 0,void 0,!0);try{return await so.dropAttribute(e),n9(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw W6.error(`Got an error deleting attribute ${j6.inspect(e)}.`),n}}a(r9,"dropAttribute");function n9(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(n9,"dropAttributeFromGlobal");async function s9(e){Mc(e);let t=J6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Cr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Lr.BAD_REQUEST,void 0,void 0,!0);return await so.createAttribute(e),vE.signalSchemaChange(new BE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(s9,"createAttribute");function i9(e){return so.getBackup(e)}a(i9,"getBackup")});var YU=g((yRe,VU)=>{"use strict";var{OPERATIONS_ENUM:o9}=C(),fR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=o9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};VU.exports=fR});var ER=g((CRe,zU)=>{"use strict";var a9=In(),wRe=YU(),qE=W(),xE=C(),c9=J(),{handleHDBError:KU,hdb_errors:l9}=se(),{HDB_ERROR_MSGS:WU,HTTP_STATUS_CODES:QU}=l9,u9=Object.values(xE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),jU="To use this operation audit log must be enabled in harperdb-config.yaml";zU.exports=_9;async function _9(e){if(qE.isEmpty(e.schema))throw new Error(WU.SCHEMA_REQUIRED_ERR);if(qE.isEmpty(e.table))throw new Error(WU.TABLE_REQUIRED_ERR);if(!c9.get(xE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw KU(new Error,jU,QU.BAD_REQUEST,xE.LOG_LEVELS.ERROR,jU,!0);let t=qE.checkSchemaTableExist(e.schema,e.table);if(t)throw KU(new Error,t,QU.NOT_FOUND,xE.LOG_LEVELS.ERROR,t,!0);if(!qE.isEmpty(e.search_type)&&u9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await a9.readAuditLog(e)}a(_9,"readAuditLog")});var XU=g((DRe,JU)=>{"use strict";var{OPERATIONS_ENUM:d9}=C(),hR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=d9.GET_BACKUP,this.schema=t,this.table=r}};JU.exports=hR});var tv=g((vRe,ev)=>{"use strict";var f9=In(),MRe=XU(),pR=W(),E9=C(),URe=J(),{handleHDBError:h9,hdb_errors:p9}=se(),{HDB_ERROR_MSGS:ZU,HTTP_STATUS_CODES:m9}=p9;ev.exports=S9;async function S9(e){if(pR.isEmpty(e.schema))throw new Error(ZU.SCHEMA_REQUIRED_ERR);if(pR.isEmpty(e.table))throw new Error(ZU.TABLE_REQUIRED_ERR);let t=pR.checkSchemaTableExist(e.schema,e.table);if(t)throw h9(new Error,t,m9.NOT_FOUND,E9.LOG_LEVELS.ERROR,t,!0);return await f9.getBackup(read_audit_log_object)}a(S9,"getBackup")});var av=g((HRe,ov)=>{var io=require("validate.js"),nv=rt(),Uc=C(),{handleHDBError:T9,hdb_errors:g9}=se(),{HDB_ERROR_MSGS:pt,HTTP_STATUS_CODES:R9}=g9,mR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),A9={STRUCTURE_USER:"structure_user"},rv=Object.values(Uc.ROLE_TYPES_ENUM),O9="attribute_permissions",N9="attribute_name",{PERMS_CRUD_ENUM:vc}=Uc,b9=[O9,...Object.values(vc)],sv=[vc.READ,vc.INSERT,vc.UPDATE],y9=[N9,...sv];function I9(e){let t=mR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,iv(e,t)}a(I9,"addRoleValidation");function w9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,iv(e,t)}a(w9,"alterRoleValidation");function C9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,nv.validateObject(e,t)}a(C9,"dropRoleValidation");var L9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function iv(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)L9.includes(n[o])||s.push(n[o]);s.length>0&&At(pt.INVALID_ROLE_JSON_KEYS(s),r);let i=nv.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=D9(e);o&&At(o,r),rv.forEach(c=>{e.permission[c]&&!io.isBoolean(e.permission[c])&&At(pt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(rv.indexOf(o)<0){if(o===A9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||At(pt.SCHEMA_NOT_FOUND(d),r)}continue}At(pt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(pt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){At(pt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{b9.includes(u)||At(pt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(vc).forEach(u=>{io.isDefined(_[u])?io.isBoolean(_[u])||At(pt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):At(pt.TABLE_PERM_MISSING(u),r,o,l)}),io.isDefined(_.attribute_permissions)){if(!io.isArray(_.attribute_permissions)){At(pt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{At(pt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].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(m=>{!y9.includes(m)&&m!==vc.DELETE&&At(pt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!io.isDefined(E.attribute_name)){At(pt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){At(pt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}sv.forEach(m=>{io.isDefined(E[m])?io.isBoolean(E[m])||At(pt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):At(pt.ATTR_PERM_MISSING(m,h),r,o,l)}),!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}.${l}`;At(pt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return P9(r)}a(iv,"customValidate");ov.exports={addRoleValidation:I9,alterRoleValidation:w9,dropRoleValidation:C9};function D9(e){let{operation:t,permission:r}=e;if(t===Uc.OPERATIONS_ENUM.ADD_ROLE||t===Uc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return pt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Uc.ROLE_TYPES_ENUM.SUPER_USER:Uc.ROLE_TYPES_ENUM.CLUSTER_USER;return pt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(D9,"validateNoSUPerms");function P9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:pt.ROLE_PERMS_ERROR,...e};return T9(new Error,n,R9.BAD_REQUEST)}else return null}a(P9,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var FE=g((xRe,_v)=>{"use strict";var cv=Or(),lv=Ar(),M9=ta(),TR=av(),gR=si(),U9=require("uuid").v4,v9=require("util"),GE=C(),B9=W(),RR=lv.searchByValue,H9=lv.searchByHash,q9=v9.promisify(M9.delete),x9=Xn(),G9=pc(),{hdb_errors:F9,handleHDBError:Sa}=se(),{HDB_ERROR_MSGS:uv,HTTP_STATUS_CODES:t_}=F9,{UserEventMsg:AR}=Jn();_v.exports={addRole:k9,alterRole:$9,dropRole:V9,listRoles:Y9};function SR(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(SR,"scrubRoleDetails");async function k9(e){let t=TR.addRoleValidation(e);if(t)throw t;e=SR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await RR(r)||[])}catch(i){throw Sa(i)}if(n&&n.length>0)throw Sa(new Error,uv.ROLE_ALREADY_EXISTS(e.role),t_.CONFLICT,void 0,void 0,!0);e.id||(e.id=U9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await cv.insert(s),gR.signalUserChange(new AR(process.pid)),e=SR(e),e}a(k9,"addRole");async function $9(e){let t=TR.alterRoleValidation(e);if(t)throw t;e=SR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await cv.update(r)}catch(s){throw Sa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Sa(new Error,"Invalid role id",t_.BAD_REQUEST,void 0,void 0,!0);return await gR.signalUserChange(new AR(process.pid)),e}a($9,"alterRole");async function V9(e){let t=TR.dropRoleValidation(e);if(t)throw Sa(new Error,t,t_.BAD_REQUEST,void 0,void 0,!0);let r=new G9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await H9(r));if(n.length===0)throw Sa(new Error,uv.ROLE_NOT_FOUND,t_.NOT_FOUND,void 0,void 0,!0);let s=new x9(GE.SYSTEM_SCHEMA_NAME,GE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await RR(s)),o=!1;if(B9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Sa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,t_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await q9(c),gR.signalUserChange(new AR(process.pid)),`${n[0].role} successfully deleted`}a(V9,"dropRole");async function Y9(){return RR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Y9,"listRoles")});var hv=g((FRe,Ev)=>{"use strict";var K9=J(),oo=require("joi"),W9=rt(),dv=require("moment"),Q9=require("fs-extra"),OR=require("path"),j9=require("lodash"),r_=C(),{LOG_LEVELS:Ta}=C(),z9="YYYY-MM-DD hh:mm:ss",J9=OR.resolve(__dirname,"../logs");Ev.exports=function(e){return W9.validateBySchema(e,X9)};var X9=oo.object({from:oo.custom(fv),until:oo.custom(fv),level:oo.valid(Ta.NOTIFY,Ta.FATAL,Ta.ERROR,Ta.WARN,Ta.INFO,Ta.DEBUG,Ta.TRACE),order:oo.valid("asc","desc"),limit:oo.number().min(1),start:oo.number().min(0),log_name:oo.custom(Z9)});function fv(e,t){if(dv(e,dv.ISO_8601).format(z9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(fv,"validateDatetime");function Z9(e,t){if(j9.invert(r_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=K9.get(r_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?r_.LOG_NAMES.HDB:e,i=s===r_.LOG_NAMES.INSTALL?OR.join(J9,r_.LOG_NAMES.INSTALL):OR.join(n,s);return Q9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Z9,"validateReadLogPath")});var bR=g(($Re,mv)=>{"use strict";var kE=C(),e7=G(),t7=J(),r7=hv(),NR=require("path"),pv=require("fs-extra"),{once:n7}=require("events"),{handleHDBError:s7,hdb_errors:i7}=se(),{PACKAGE_ROOT:o7}=C(),a7=NR.join(o7,"logs"),c7=1e3,l7=200;mv.exports=u7;async function u7(e){let t=r7(e);if(t)throw s7(t,t.message,i7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=t7.get(kE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?kE.LOG_NAMES.HDB:e.log_name,s=n===kE.LOG_NAMES.INSTALL?NR.join(a7,kE.LOG_NAMES.INSTALL):NR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?c7:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!l&&!u&&(m=Math.max(pv.statSync(s).size-(h+5)*l7,0));let S=pv.createReadStream(s,{start:m});S.on("error",v=>{e7.error(v)});let A=0,T=[],R="",U;S.on("data",v=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=R+v;let V=0,Y;for(;(Y=P.exec(v))&&!S.destroyed;){U&&(U.message=v.slice(V,Y.index),B(U));let[z,oe,Se]=Y,ue=Se.split("] ["),Fe=ue[0],de=ue[1];ue.splice(0,2),U={timestamp:oe,thread:Fe,level:de,tags:ue,message:""},V=Y.index+z.length}R=v.slice(V)}),S.on("end",v=>{S.destroyed||U&&(U.message=R.trim(),B(U))}),S.resume();function B(v){let P,V,Y;switch(!0){case(i&&c&&_):P=new Date(v.timestamp),V=new Date(l),Y=new Date(u),v.level===o&&P>=V&&P<=Y&&A<E?A++:v.level===o&&P>=V&&P<=Y&&(ao(v,f,T),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(v.timestamp),V=new Date(l),v.level===o&&P>=V&&A<E?A++:v.level===o&&P>=V&&(ao(v,f,T),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(v.timestamp),Y=new Date(u),v.level===o&&P<=Y&&A<E?A++:v.level===o&&P<=Y&&(ao(v,f,T),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(v.timestamp),V=new Date(l),Y=new Date(u),P>=V&&P<=Y&&A<E?A++:P>=V&&P<=Y&&(ao(v,f,T),A++,A===h&&S.destroy());break;case i:v.level===o&&A<E?A++:v.level===o&&(ao(v,f,T),A++,A===h&&S.destroy());break;case c:P=new Date(v.timestamp),V=new Date(l),P>=V&&A<E?A++:P>=V&&A>=E&&(ao(v,f,T),A++,A===h&&S.destroy());break;case _:P=new Date(v.timestamp),Y=new Date(u),P<=Y&&A<E?A++:P<=Y&&A>=E&&(ao(v,f,T),A++,A===h&&S.destroy());break;default:A<E?A++:(ao(v,f,T),A++,A===h&&S.destroy())}}return a(B,"onLogMessage"),await n7(S,"close"),T}a(u7,"readLog");function ao(e,t,r){t==="desc"?_7(e,r):t==="asc"?d7(e,r):r.push(e)}a(ao,"pushLineToResult");function _7(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(_7,"insertDescending");function d7(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(d7,"insertAscending")});var $E=g((QRe,Rv)=>{"use strict";var yR=require("joi"),{string:n_,boolean:Sv,date:f7}=yR.types(),E7=rt(),{validateSchemaExists:YRe,validateTableExists:KRe,validateSchemaName:WRe}=Os(),h7=C(),p7=et(),Tv=J();Tv.initSync();var m7=n_.invalid(Tv.get(h7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(p7.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(),gv={operation:n_.valid("add_node","update_node","set_node_replication"),node_name:m7,subscriptions:yR.array().items({table:n_.optional(),schema:n_.optional(),database:n_.optional(),subscribe:Sv.required(),publish:Sv.required().custom(T7),start_time:f7.iso()}).min(1).required()};function S7(e){return E7.validateBySchema(e,yR.object(gv))}a(S7,"addUpdateNodeValidator");function T7(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(T7,"checkForFalsy");Rv.exports={addUpdateNodeValidator:S7,validation_schema:gv}});var Ov=g((zRe,Av)=>{var g7=rt(),R7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Av.exports=function(e){return g7.validateObject(e,R7)}});var VE=g((JRe,Nv)=>{"use strict";var A7=C().OPERATIONS_ENUM,IR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=A7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Nv.exports=IR});var yv=g((ZRe,bv)=>{"use strict";var O7={OPERATION:"operation",REFRESH:"refresh"},wR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},CR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};bv.exports={JWTTokens:wR,TOKEN_TYPE_ENUM:O7,JWTRSAKeys:CR}});var o_=g((tAe,Lv)=>{"use strict";var i_=require("jsonwebtoken"),LR=require("fs-extra"),DR=W(),Mn=C(),{handleHDBError:Dr,hdb_errors:N7}=se(),{HTTP_STATUS_CODES:Pr,AUTHENTICATION_ERROR_MSGS:Mr}=N7,s_=G(),Iv=Jf(),UR=yr(),b7=Or().update,y7=VE(),I7=si(),{UserEventMsg:w7}=Jn(),co=J();co.initSync();var PR=require("path"),{JWTTokens:C7,JWTRSAKeys:L7,TOKEN_TYPE_ENUM:YE}=yv(),D7=co.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?co.get(Mn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",P7=co.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?co.get(Mn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",KE="RS256",MR;Lv.exports={createTokens:M7,validateOperationToken:v7,refreshOperationToken:U7,validateRefreshToken:Cv};async function M7(e){if(DR.isEmpty(e)||typeof e!="object")throw Dr(new Error,Mr.INVALID_AUTH_OBJECT,Pr.BAD_REQUEST,void 0,void 0,!0);if(DR.isEmpty(e.username))throw Dr(new Error,Mr.USERNAME_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);if(DR.isEmpty(e.password))throw Dr(new Error,Mr.PASSWORD_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await UR.findAndValidateUser(e.username,e.password),!t)throw Dr(new Error,Mr.INVALID_CREDENTIALS,Pr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw s_.error(f),Dr(new Error,Mr.INVALID_CREDENTIALS,Pr.UNAUTHORIZED,void 0,void 0,!0)}let r=await WE(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await wv(i,r.private_key,r.passphrase),c=await i_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:P7,algorithm:KE,subject:YE.REFRESH}),l=Iv.hash(c),_=new y7(Mn.SYSTEM_SCHEMA_NAME,Mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await b7(_)}catch(f){s_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Dr(new Error,Mr.REFRESH_TOKEN_SAVE_FAILED,Pr.INTERNAL_SERVER_ERROR);return I7.signalUserChange(new w7(process.pid)),new C7(o,c)}a(M7,"createTokens");async function wv(e,t,r){return await i_.sign(e,{key:t,passphrase:r},{expiresIn:D7,algorithm:KE,subject:YE.OPERATION})}a(wv,"signOperationToken");async function WE(){if(MR===void 0)try{let e=PR.join(co.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=PR.join(co.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=PR.join(co.getHdbBasePath(),Mn.LICENSE_KEY_DIR_NAME,Mn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await LR.readFile(e)).toString(),s=(await LR.readFile(t)).toString(),i=(await LR.readFile(r)).toString();MR=new L7(i,s,n)}catch(e){throw s_.error(e),Dr(new Error,Mr.NO_ENCRYPTION_KEYS,Pr.INTERNAL_SERVER_ERROR)}return MR}a(WE,"getJWTRSAKeys");async function U7(e){if(!e)throw Dr(new Error,Mr.INVALID_BODY,Pr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Dr(new Error,Mr.REFRESH_TOKEN_REQUIRED,Pr.BAD_REQUEST,void 0,void 0,!0);await Cv(e.refresh_token);let t=await WE(),r=await i_.decode(e.refresh_token);return{operation_token:await wv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(U7,"refreshOperationToken");async function v7(e){try{let t=await WE(),r=await i_.verify(e,t.public_key,{algorithms:KE,subject:YE.OPERATION});return await UR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw s_.warn(t),t.name&&t.name==="TokenExpiredError"?Dr(new Error,Mr.TOKEN_EXPIRED,Pr.FORBIDDEN):Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED)}}a(v7,"validateOperationToken");async function Cv(e){let t;try{let r=await WE(),n=await i_.verify(e,r.public_key,{algorithms:KE,subject:YE.REFRESH});t=await UR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw s_.warn(r),r.name&&r.name==="TokenExpiredError"?Dr(new Error,Mr.TOKEN_EXPIRED,Pr.FORBIDDEN):Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED)}if(!Iv.validate(t.refresh_token,e))throw Dr(new Error,Mr.INVALID_TOKEN,Pr.UNAUTHORIZED);return t}a(Cv,"validateRefreshToken")});var vR=g((sAe,Mv)=>{"use strict";var B7=Ov(),Bc=require("passport"),H7=require("passport-local").Strategy,q7=require("passport-http").BasicStrategy,x7=require("util"),G7=yr(),Pv=x7.callbackify(G7.findAndValidateUser),nAe=Kr(),F7=C(),Dv=o_();Bc.use(new H7(function(e,t,r){Pv(e,t,r)}));Bc.use(new q7(function(e,t,r){Pv(e,t,r)}));Bc.serializeUser(function(e,t){t(null,e)});Bc.deserializeUser(function(e,t){t(null,e)});function k7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Bc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===F7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Dv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):Dv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Bc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(k7,"authorize");function $7(e,t){let r=B7(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);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]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a($7,"checkPermissions");Mv.exports={authorize:k7,checkPermissions:$7}});var Hc=g((oAe,Uv)=>{"use strict";var BR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},HR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Uv.exports={Node:BR,NodeSubscription:HR}});var Bv=g((cAe,vv)=>{"use strict";var V7=C().OPERATIONS_ENUM,qR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=V7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};vv.exports=qR});var a_=g((uAe,Hv)=>{"use strict";var xR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},GR=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};Hv.exports={RemotePayloadObject:xR,RemotePayloadSubscription:GR}});var xv=g((dAe,qv)=>{"use strict";var FR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};qv.exports=FR});var kv=g((mAe,Fv)=>{"use strict";var Y7=xv(),EAe=_t(),Gv=Ve(),K7=G(),{getSchemaPath:hAe,getTransactionAuditStorePath:pAe}=ze(),{getDatabases:W7}=(Re(),ie(Ge));Fv.exports=Q7;async function Q7(e){let t=new Y7;try{let r=W7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Gv.environmentDataSize(schema_path,e.name),o=await Gv.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){K7.warn(`unable to stat table dbi due to ${r}`)}return t}a(Q7,"lmdbGetTableSize")});var Vv=g((TAe,$v)=>{"use strict";var kR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};$v.exports=kR});var _i=g((OAe,Qv)=>{"use strict";var j7=require("fs-extra"),z7=require("path"),or=require("systeminformation"),lo=G(),J7=ht(),$R=et(),jE=C(),X7=kv(),Wv=ji(),{getThreadInfo:Yv}=tt(),ZR=J();ZR.initSync();var Z7=Vv(),{openEnvironment:RAe}=Ve(),{getSchemaPath:AAe}=ze(),{database:eee}=(Re(),ie(Ge)),QE;Qv.exports={getHDBProcessInfo:WR,getNetworkInfo:jR,getDiskInfo:QR,getMemoryInfo:KR,getCPUInfo:YR,getTimeInfo:VR,getSystemInformation:zR,systemInformation:tee,getTableSize:JR,getMetrics:XR};function VR(){return or.time()}a(VR,"getTimeInfo");async function YR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await or.cpu();u.cpu_speed=await or.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:A,...T}=await or.currentLoad();return T.cpus=[],A.forEach(R=>{let{raw_load:U,raw_load_idle:B,raw_load_irq:v,raw_load_nice:P,raw_load_system:V,raw_load_user:Y,...z}=R;T.cpus.push(z)}),u.current_load=T,u}catch(e){return lo.error(`error in getCPUInfo: ${e}`),{}}}a(YR,"getCPUInfo");async function KR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await or.mem();return Object.assign(s,process.memoryUsage())}catch(e){return lo.error(`error in getMemoryInfo: ${e}`),{}}}a(KR,"getMemoryInfo");async function WR(){let e={core:[],clustering:[]};try{let t=await or.processes(),r;try{r=Number.parseInt(await j7.readFile(z7.join(ZR.get(jE.CONFIG_PARAMS.ROOTPATH),jE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===jE.NODE_ERROR_CODES.ENOENT)lo.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return lo.error(`error in getHDBProcessInfo: ${t}`),e}}a(WR,"getHDBProcessInfo");async function QR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await or.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await or.fsStats();return e.read_write=_,e.size=await or.fsSize(),e}catch(t){return lo.error(`error in getDiskInfo: ${t}`),e}}a(QR,"getDiskInfo");async function jR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await or.networkInterfaceDefault(),e.latency=await or.inetChecksite("google.com"),(await or.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await or.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return lo.error(`error in getNetworkInfo: ${t}`),e}}a(jR,"getNetworkInfo");async function zR(){if(QE!==void 0)return QE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await or.osInfo();e=c;let l=await or.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,QE=e,QE}catch(t){return lo.error(`error in getSystemInformation: ${t}`),e}}a(zR,"getSystemInformation");async function JR(){let e=[],t=await Wv.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await X7(n));return e}a(JR,"getTableSize");async function XR(){let e=await Wv.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=eee({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[l,_,u]=c.trim().split(" ");return{pid:l,thread:_,txnid:u}}),n[s]=o}catch(i){lo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(XR,"getMetrics");async function Kv(){if(ZR.get(jE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await J7.getNATSReferences(),r=await t.streams.info($R.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get($R.WORK_QUEUE_CONSUMER_NAMES.stream_name,$R.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(Kv,"getNatsStreamInfo");async function tee(e){let t=new Z7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zR(),t.time=VR(),t.cpu=await YR(),t.memory=await KR(),t.disk=await QR(),t.network=await jR(),t.harperdb_processes=await WR(),t.table_size=await JR(),t.metrics=await XR(),t.threads=await Yv(),t.replication=await Kv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zR();break;case"time":t.time=VR();break;case"cpu":t.cpu=await YR();break;case"memory":t.memory=await KR();break;case"disk":t.disk=await QR();break;case"network":t.network=await jR();break;case"harperdb_processes":t.harperdb_processes=await WR();break;case"table_size":t.table_size=await JR();break;case"database_metrics":case"metrics":t.metrics=await XR();break;case"threads":t.threads=await Yv();break;case"replication":t.replication=await Kv();break;default:break}return t}a(tee,"systemInformation")});var di=g((IAe,Xv)=>{"use strict";var ree=Or(),eA=W(),nee=require("util"),ga=C(),jv=J();jv.initSync();var see=vR(),zv=Ar(),{Node:bAe,NodeSubscription:yAe}=Hc(),iee=pc(),oee=Bv(),{RemotePayloadObject:aee,RemotePayloadSubscription:cee}=a_(),{handleHDBError:lee,hdb_errors:uee}=se(),{HTTP_STATUS_CODES:_ee,HDB_ERROR_MSGS:dee}=uee,fee=Xn(),Eee=_i(),hee=Gi(),{getDatabases:pee}=(Re(),ie(Ge)),mee=nee.promisify(see.authorize),See=zv.searchByHash,Tee=zv.searchByValue;Xv.exports={authHeaderToUser:gee,isEmpty:Ree,getNodeRecord:Aee,upsertNodeRecord:Oee,buildNodePayloads:Nee,checkClusteringEnabled:bee,getAllNodeRecords:yee,getSystemInfo:Iee,reverseSubscription:Jv};async function gee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await mee(t,null),e}a(gee,"authHeaderToUser");function Ree(e){return e==null}a(Ree,"isEmpty");async function Aee(e){let t=new iee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return See(t)}a(Aee,"getNodeRecord");async function Oee(e){let t=new oee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return ree.upsert(t)}a(Oee,"upsertNodeRecord");function Jv(e){if(eA.isEmpty(e.subscribe)||eA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Jv,"reverseSubscription");function Nee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=eA.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Jv(c),E=pee()[l]?.[_],h=new cee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new aee(r,t,s,n)}a(Nee,"buildNodePayloads");function bee(){if(!jv.get(ga.CONFIG_PARAMS.CLUSTERING_ENABLED))throw lee(new Error,dee.CLUSTERING_NOT_ENABLED,_ee.BAD_REQUEST,void 0,void 0,!0)}a(bee,"checkClusteringEnabled");async function yee(){let e=new fee(ga.SYSTEM_SCHEMA_NAME,ga.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Tee(e))}a(yee,"getAllNodeRecords");async function Iee(){let e=await Eee.getSystemInformation();return{hdb_version:hee.version(),node_version:e.node_version,platform:e.platform}}a(Iee,"getSystemInfo")});var tA=g((CAe,oB)=>{"use strict";var zE=ht(),Zv=W(),eB=et(),tB=C(),JE=G(),rB=HE(),wee=hu(),{RemotePayloadObject:Cee}=a_(),{handleHDBError:nB,hdb_errors:Lee}=se(),{HTTP_STATUS_CODES:sB}=Lee,{NodeSubscription:iB}=Hc();oB.exports=Dee;async function Dee(e,t){let r;try{r=await zE.request(`${t}.${eB.REQUEST_SUFFIX}`,new Cee(tB.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),JE.trace("Response from remote describe all request:",r)}catch(o){JE.error(`addNode received error from describe all request to remote node: ${o}`);let c=zE.requestErrorHandler(o,"add_node",t);throw nB(new Error,c,sB.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===eB.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw nB(new Error,o,sB.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===tB.SYSTEM_SCHEMA_NAME){await zE.createLocalTableStream(l,c);let h=new iB(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Zv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Zv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(JE.trace(`addNode creating schema: ${l}`),await rB.createSchema({operation:"create_schema",schema:l})),!d&&f){JE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new wee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await rB.createTable(h)}await zE.createLocalTableStream(l,c);let E=new iB(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Dee,"reviewSubscriptions")});var u_=g((DAe,lB)=>{"use strict";var{handleHDBError:XE,hdb_errors:Pee}=se(),{HTTP_STATUS_CODES:ZE}=Pee,{addUpdateNodeValidator:Mee}=$E(),c_=G(),cB=C(),aB=et(),Uee=W(),rA=ht(),l_=di(),vee=J(),Bee=tA(),{Node:Hee,NodeSubscription:qee}=Hc(),{broadcast:xee}=tt(),Gee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Fee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kee=vee.get(cB.CONFIG_PARAMS.CLUSTERING_NODENAME);lB.exports=$ee;async function $ee(e,t=!1){c_.trace("addNode called with:",e),l_.checkClusteringEnabled();let r=Mee(e);if(r)throw XE(r,r.message,ZE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await l_.getNodeRecord(n);if(!Uee.isEmptyOrZeroLength(d))throw XE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,ZE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Bee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Gee,o;let c=l_.buildNodePayloads(s,kee,cB.OPERATIONS_ENUM.ADD_NODE,await l_.getSystemInfo());c_.trace("addNode sending remote payload:",c);let l;try{l=await rA.request(`${n}.${aB.REQUEST_SUFFIX}`,c)}catch(d){c_.error(`addNode received error from request: ${d}`);let f=rA.requestErrorHandler(d,"add_node",n);throw XE(new Error,f,ZE.INTERNAL_SERVER_ERROR,"error",f)}if(l.status===aB.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${l.message}`;throw XE(new Error,d,ZE.INTERNAL_SERVER_ERROR,"error",d)}c_.trace(l);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];c_.trace("Add node updating work stream for node:",n,"subscriptions:",E),await rA.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new qee(E.schema,E.table,E.publish,E.subscribe))}let u=new Hee(n,_,l.system_info);return await l_.upsertNodeRecord(u),xee({type:"nats_update"}),i.length>0?o.message=Fee:o.message=`Successfully added '${n}' to manifest`,o}a($ee,"addNode")});var oA=g((UAe,dB)=>{"use strict";var{handleHDBError:nA,hdb_errors:Vee}=se(),{HTTP_STATUS_CODES:sA}=Vee,{addUpdateNodeValidator:Yee}=$E(),__=G(),_B=C(),uB=et(),MAe=W(),iA=ht(),d_=di(),Kee=J(),{cloneDeep:Wee}=require("lodash"),Qee=tA(),{Node:jee,NodeSubscription:zee}=Hc(),{broadcast:Jee}=tt(),Xee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Zee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ete=Kee.get(_B.CONFIG_PARAMS.CLUSTERING_NODENAME);dB.exports=tte;async function tte(e){__.trace("updateNode called with:",e),d_.checkClusteringEnabled();let t=Yee(e);if(t)throw nA(t,t.message,sA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await d_.getNodeRecord(r);s.length>0&&(n=Wee(s));let{added:i,skipped:o}=await Qee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Xee,c;let l=d_.buildNodePayloads(i,ete,_B.OPERATIONS_ENUM.UPDATE_NODE,await d_.getSystemInfo());__.trace("updateNode sending remote payload:",l);let _;try{_=await iA.request(`${r}.${uB.REQUEST_SUFFIX}`,l)}catch(u){__.error(`updateNode received error from request: ${u}`);let d=iA.requestErrorHandler(u,"update_node",r);throw nA(new Error,d,sA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===uB.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw nA(new Error,u,sA.INTERNAL_SERVER_ERROR,"error",u)}__.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];__.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await iA.updateWorkStream(f,r),i[u].start_time===void 0&&delete i[u].start_time}return n||(n=[new jee(r,[],_.system_info)]),await rte(n[0],i,_.system_info),o.length>0?c.message=Zee:c.message=`Successfully updated '${r}'`,c}a(tte,"updateNode");async function rte(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new zee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await d_.upsertNodeRecord(n),Jee({type:"nats_update"})}a(rte,"updateNodeTable")});var mB=g((BAe,pB)=>{"use strict";var hB=require("joi"),{string:fB}=hB.types(),nte=rt(),EB=C(),ste=J(),ite=et();pB.exports=ote;function ote(e){let t=fB.invalid(ste.get(EB.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ite.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=hB.object({operation:fB.valid(EB.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return nte.validateBySchema(e,r)}a(ote,"removeNodeValidator")});var th=g((qAe,OB)=>{"use strict";var{handleHDBError:SB,hdb_errors:ate}=se(),{HTTP_STATUS_CODES:TB}=ate,cte=mB(),f_=G(),gB=di(),lte=W(),eh=C(),RB=et(),AB=ht(),ute=J(),{RemotePayloadObject:_te}=a_(),{NodeSubscription:dte}=Hc(),fte=Eu(),Ete=ta(),{broadcast:hte}=tt(),pte=ute.get(eh.CONFIG_PARAMS.CLUSTERING_NODENAME);OB.exports=mte;async function mte(e){f_.trace("removeNode called with:",e),gB.checkClusteringEnabled();let t=cte(e);if(t)throw SB(t,t.message,TB.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await gB.getNodeRecord(r);if(lte.isEmptyOrZeroLength(n))throw SB(new Error,`Node '${r}' was not found.`,TB.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new _te(eh.OPERATIONS_ENUM.REMOVE_NODE,pte,[]),i,o=!1;try{i=await AB.request(`${r}.${RB.REQUEST_SUFFIX}`,s),f_.trace("Remove node reply from remote node:",r,i)}catch(l){f_.error("removeNode received error from request:",l),o=!0}for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];f_.trace(`Remove node removing subscription: ${u.schema}.${u.table} for node: ${r}`);let d=new dte(u.schema,u.table,!1,!1);await AB.updateWorkStream(d,r)}let c=new fte(eh.SYSTEM_SCHEMA_NAME,eh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Ete.deleteRecord(c),hte({type:"nats_update"}),i?.status===RB.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(f_.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(mte,"removeNode")});var yB=g((GAe,bB)=>{"use strict";var NB=require("joi"),{string:Ste,array:Tte}=NB.types(),gte=rt(),Rte=$E();bB.exports=Ate;function Ate(e){let t=NB.object({operation:Ste.valid("configure_cluster").required(),connections:Tte.items(Rte.validation_schema).required()});return gte.validateBySchema(e,t)}a(Ate,"configureClusterValidator")});var nh=g((kAe,DB)=>{"use strict";var Ote=C(),rh=G(),Nte=W(),bte=th(),yte=u_(),IB=di(),Ite=yB(),{handleHDBError:wB,hdb_errors:wte}=se(),{HTTP_STATUS_CODES:CB}=wte,Cte="Configure cluster complete.",Lte="Failed to configure the cluster. Check the logs for more details.",Dte="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";DB.exports=Pte;async function Pte(e){rh.trace("configure cluster called with:",e),IB.checkClusteringEnabled();let t=Ite(e);if(t)throw wB(t,t.message,CB.BAD_REQUEST,void 0,void 0,!0);let r=await IB.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(LB(bte,{operation:Ote.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);rh.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(LB(yte,E,E.node_name))}let c=await Promise.allSettled(i);rh.trace("All results from configure_cluster add node:",c);let l=[],_=[],u=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(rh.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(Nte.isEmptyOrZeroLength(l))return{message:Cte,connections:_};if(u)return{message:Dte,failed_nodes:l,connections:_};throw wB(new Error,Lte,CB.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Pte,"configureCluster");async function LB(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(LB,"functionWrapper")});var MB=g((VAe,PB)=>{"use strict";var sh=require("joi"),Mte=rt(),{validateSchemaExists:Ute,validateTableExists:vte,validateSchemaName:Bte}=Os(),Hte=sh.object({operation:sh.string().valid("purge_stream"),schema:sh.string().custom(Ute).custom(Bte).required(),table:sh.string().custom(vte).required()});function qte(e){return Mte.validateBySchema(e,Hte)}a(qte,"purgeStreamValidator");PB.exports=qte});var aA=g((KAe,UB)=>{"use strict";var{handleHDBError:xte,hdb_errors:Gte}=se(),{HTTP_STATUS_CODES:Fte}=Gte,kte=MB(),$te=ht(),Vte=di();UB.exports=Yte;async function Yte(e){if(e.purge_ingest!==!0){let s=kte(e);if(s)throw xte(s,s.message,Fte.BAD_REQUEST,void 0,void 0,!0)}Vte.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await $te.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(Yte,"purgeStream")});var oh=g((QAe,GB)=>{"use strict";var lA=di(),Kte=ht(),HB=J(),ih=C(),Ra=et(),Wte=W(),cA=G(),{RemotePayloadObject:Qte}=a_(),{ErrorCode:vB}=require("nats"),BB=HB.get(ih.CONFIG_PARAMS.CLUSTERING_ENABLED),qB=HB.get(ih.CONFIG_PARAMS.CLUSTERING_NODENAME);GB.exports={clusterStatus:jte,buildNodeStatus:xB};async function jte(){let e={node_name:qB,is_enabled:BB,connections:[]};if(!BB)return e;let t=await lA.getAllNodeRecords();if(Wte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(xB(t[n],e.connections));return await Promise.allSettled(r),e}a(jte,"clusterStatus");async function xB(e,t){let r=e.name,n=new Qte(ih.OPERATIONS_ENUM.CLUSTER_STATUS,qB,void 0,await lA.getSystemInfo()),s,i,o=Ra.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Kte.request(Ra.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ra.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ra.CLUSTER_STATUS_STATUSES.CLOSED,cA.error(`Error getting node status from ${r} `,s))}catch(l){cA.warn(`Error getting node status from ${r}`,l),l.code===vB.NoResponders?o=Ra.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===vB.Timeout?o=Ra.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ra.CLUSTER_STATUS_STATUSES.CLOSED}let c=new zte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==ih.PRE_4_0_0_VERSION&&await lA.upsertNodeRecord(l)}catch(l){cA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(xB,"buildNodeStatus");function zte(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(zte,"NodeStatusObject")});var ch=g((zAe,FB)=>{"use strict";var{handleHDBError:Jte,hdb_errors:Xte}=se(),{HTTP_STATUS_CODES:Zte}=Xte,ere=ht(),tre=di(),uA=W(),ah=require("joi"),rre=rt(),nre=2e3,sre=ah.object({timeout:ah.number().min(1),connected_nodes:ah.boolean(),routes:ah.boolean()});FB.exports=ire;async function ire(e){tre.checkClusteringEnabled();let t=rre.validateBySchema(e,sre);if(t)throw Jte(t,t.message,Zte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||uA.autoCastBoolean(n),o=s===void 0||uA.autoCastBoolean(s),c={nodes:[]},l=await ere.getServerList(r??nre),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:uA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(ire,"clusterNetwork")});var YB=g((XAe,VB)=>{"use strict";var _A=require("joi"),kB=rt(),{route_constraints:$B}=ag();VB.exports={setRoutesValidator:ore,deleteRoutesValidator:are};function ore(e){let t=_A.object({server:_A.valid("hub","leaf").required(),routes:$B.required()});return kB.validateBySchema(e,t)}a(ore,"setRoutesValidator");function are(e){let t=_A.object({routes:$B.required()});return kB.validateBySchema(e,t)}a(are,"deleteRoutesValidator")});var uh=g((eOe,jB)=>{"use strict";var Aa=Et(),dA=W(),lh=C(),KB=YB(),{handleHDBError:WB,hdb_errors:cre}=se(),{HTTP_STATUS_CODES:QB}=cre,lre="cluster routes successfully set",ure="cluster routes successfully deleted";jB.exports={setRoutes:_re,getRoutes:dre,deleteRoutes:fre};function _re(e){let t=KB.setRoutesValidator(e);if(t)throw WB(t,t.message,QB.BAD_REQUEST,void 0,void 0,!0);let r=Aa.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=dA.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:lre,set:o,skipped:i}}a(_re,"setRoutes");function dre(){let e=Aa.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(dre,"getRoutes");function fre(e){let t=KB.deleteRoutesValidator(e);if(t)throw WB(t,t.message,QB.BAD_REQUEST,void 0,void 0,!0);let r=Aa.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let m=n[E];if(d.host===m.host&&d.port===m.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=dA.isEmptyOrZeroLength(n)?null:n,Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=dA.isEmptyOrZeroLength(s)?null:s,Aa.updateConfigValue(lh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:ure,deleted:i,skipped:o}}a(fre,"deleteRoutes")});var JB=g((rOe,zB)=>{"use strict";var E_=require("alasql"),Oa=require("recursive-iterator"),as=G(),Ere=W(),h_=C(),fA=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,pre(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(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=hre(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function hre(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(hre,"filterReadRestrictedAttrs");function pre(e,t,r,n,s){mre(e,t,r,n,s)}a(pre,"interpretAST");function p_(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(p_,"addSchemaTableToMap");function mre(e,t,r,n,s){if(!e){as.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?Rre(e,t,r):e instanceof E_.yy.Select?Sre(e,t,r,n,s):e instanceof E_.yy.Update?Tre(e,t,r):e instanceof E_.yy.Delete?gre(e,t,r):as.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(mre,"getRecordAttributesAST");function Sre(e,t,r,n,s){if(!e){as.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Ere.isEmptyOrZeroLength(i)){as.error("No schema specified");return}e.from.forEach(c=>{p_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),p_(c.table,t,r,n,s)});let o=new Oa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{as.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new Oa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{as.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Oa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{as.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new Oa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{as.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(Sre,"getSelectAttributes");function Tre(e,t,r){if(!e){as.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&EA(e.table.tableid,s,i.columnid,t,r)}a(Tre,"getUpdateAttributes");function gre(e,t,r){if(!e){as.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Oa(e.where),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&EA(e.table.tableid,s,i.columnid,t,r)}a(gre,"getDeleteAttributes");function Rre(e,t,r){if(!e){as.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Oa(e.columns),s=e.into.databaseid;p_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&EA(e.into.tableid,s,i.columnid,t,r)}a(Rre,"getInsertAttributes");function EA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(EA,"pushAttribute");zB.exports=fA});var dh=g((sOe,t0)=>{var _h=ia(),XB=require("chalk"),dn=G(),ZB=require("prompt"),{promisify:Are}=require("util"),hA=C(),Ore=require("fs-extra"),Nre=require("path"),bre=W(),yre=Gi(),e0=J();e0.initSync();var Ire=require("moment"),wre=Are(ZB.get),Cre=Nre.join(e0.getHdbBasePath(),hA.LICENSE_KEY_DIR_NAME,hA.LICENSE_FILE_NAME,hA.LICENSE_FILE_NAME);t0.exports={getFingerprint:Dre,setLicense:Lre,parseLicense:pA,register:Pre,getRegistrationInfo:Ure};async function Lre(e){if(e&&e.key&&e.company){try{dn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await pA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dn.error(r),dn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Lre,"setLicense");async function Dre(){let e={};try{e=await _h.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dn.error(r),dn.error(t),new Error(r)}return e}a(Dre,"getFingerprint");async function pA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dn.info("Validating license input...");let r=_h.validateLicense(e,t);if(dn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dn.info("writing license to disk"),await Ore.writeFile(Cre,JSON.stringify({license_key:e,company:t}))}catch(n){throw dn.error("Failed to write License"),n}return"Registration successful."}a(pA,"parseLicense");async function Pre(){let e=await Mre();return pA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Pre,"register");async function Mre(){let e=await _h.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:XB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:XB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{ZB.start()}catch(n){dn.error(n)}let r;try{r=await wre(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Mre,"promptForRegistration");async function Ure(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await _h.getLicense()}catch(r){throw dn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(bre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=yre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Ire.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Ure,"getRegistrationInfo")});var n0=g((oOe,r0)=>{"use strict";var vre=et(),mA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+vre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};r0.exports=mA});var o0=g((cOe,i0)=>{"use strict";var s0=et(),SA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+s0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+s0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,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:l,jetstream:"enabled"}},this.system_account="SYS"}};i0.exports=SA});var c0=g((uOe,a0)=>{"use strict";var TA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};a0.exports=TA});var u0=g((dOe,l0)=>{"use strict";var Bre=et(),gA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Bre.SERVER_SUFFIX.ADMIN,this.password=r}};l0.exports=gA});var mh=g((EOe,f0)=>{"use strict";var qc=require("path"),hh=require("fs-extra"),Hre=n0(),qre=o0(),xre=c0(),Gre=u0(),RA=yr(),Gc=W(),Ur=Et(),Eh=C(),m_=et(),{CONFIG_PARAMS:mt}=Eh,S_=G(),T_=J(),_0=ci(),AA=ht(),xc="clustering",Fre=1e4,d0=5;f0.exports={generateNatsConfig:$re,removeNatsConfig:Vre,getHubConfigPath:kre};function kre(){let e=T_.get(mt.ROOTPATH);return qc.join(e,xc,m_.NATS_CONFIG_FILES.HUB_SERVER)}a(kre,"getHubConfigPath");async function $re(e=!1,t=void 0){T_.initSync();let r=T_.get(mt.ROOTPATH),n=qc.join(r,xc,m_.PID_FILES.HUB),s=qc.join(r,xc,m_.PID_FILES.LEAF),i=Ur.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,xc,m_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,xc,m_.NATS_CONFIG_FILES.LEAF_SERVER),l=Ur.getConfigFromFile(mt.CLUSTERING_TLS_CERTIFICATE),_=Ur.getConfigFromFile(mt.CLUSTERING_TLS_PRIVATEKEY),u=Ur.getConfigFromFile(mt.CLUSTERING_TLS_CERT_AUTH),d=Ur.getConfigFromFile(mt.CLUSTERING_TLS_INSECURE),f=Ur.getConfigFromFile(mt.CLUSTERING_TLS_VERIFY),E=Ur.getConfigFromFile(mt.CLUSTERING_NODENAME),h=Ur.getConfigFromFile(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await AA.checkNATSServerInstalled()||ph("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await RA.listUsers(),S=Ur.getConfigFromFile(mt.CLUSTERING_USER),A=await RA.getClusterUser();(Gc.isEmpty(A)||A.active!==!0)&&ph(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await fh(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await fh(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await fh(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),await fh(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[z,oe]of m.entries())oe.role.role===Eh.ROLE_TYPES_ENUM.CLUSTER_USER&&oe.active&&(T.push(new Gre(oe.username,_0.decrypt(oe.hash))),R.push(new xre(oe.username,_0.decrypt(oe.hash))));let U=[],{hub_routes:B}=Ur.getClusteringRoutes();if(!Gc.isEmptyOrZeroLength(B))for(let z of B)U.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Hre(Ur.getConfigFromFile(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Ur.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ur.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),U,T,R);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=Gc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Eh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await hh.writeJson(o,v),S_.trace(`Hub server config written to ${o}`));let P=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,V=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new qre(Ur.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[V],T,R,l,_,u,d);u==null&&delete Y.tls.ca_file,(t===void 0||t===Eh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await hh.writeJson(c,Y),S_.trace(`Leaf server config written to ${c}`))}a($re,"generateNatsConfig");async function fh(e){let t=T_.get(e);return Gc.isEmpty(t)&&ph(`port undefined for '${e}'`),await Gc.isPortTaken(t)&&ph(`'${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(fh,"isPortAvailable");function ph(e){let t=`Error generating clustering config: ${e}`;S_.error(t),console.error(t),process.exit(1)}a(ph,"generateNatsConfigError");async function Vre(e){let{port:t,config_file:r}=AA.getServerConfig(e),{username:n,decrypt_hash:s}=await RA.getClusterUser(),i=0,o=2e3;for(;i<d0;){try{let _=await AA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){S_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=d0)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 Gc.async_set_timeout(o*(i*2))}let c="0".repeat(Fre),l=qc.join(T_.get(mt.ROOTPATH),xc,r);await hh.writeFile(l,c),await hh.remove(l),S_.notify(e,"started.")}a(Vre,"removeNatsConfig")});var T0=g((pOe,S0)=>{"use strict";var fn=J(),Yre=ia(),me=C(),g_=et(),fi=require("path"),{PACKAGE_ROOT:Th}=C(),E0=J(),Sh=W(),Fc="/dev/null",Kre=fi.join(Th,"launchServiceScripts"),h0=fi.join(Th,"utility/scripts"),Wre=fi.join(h0,me.HDB_RESTART_SCRIPT),p0=fi.resolve(Th,"dependencies",`${process.platform}-${process.arch}`,g_.NATS_BINARY_NAME);function m0(){let t=Yre.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Sh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Th}}a(m0,"generateMainServerConfig");var Qre=9930;function jre(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=fi.join(e,"clustering",g_.NATS_CONFIG_FILES.HUB_SERVER),r=fi.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=E0.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=g_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Qre?"-"+n:""),script:p0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a(jre,"generateNatsHubServerConfig");var zre=9940;function Jre(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=fi.join(e,"clustering",g_.NATS_CONFIG_FILES.LEAF_SERVER),r=fi.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=E0.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=g_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==zre?"-"+n:""),script:p0,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Fc,i.error_file=Fc),i}a(Jre,"generateNatsLeafServerConfig");function Xre(){fn.initSync();let e=fi.join(fn.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Kre,autorestart:!1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Fc,t.error_file=Fc),t}a(Xre,"generateClusteringUpgradeV4ServiceConfig");function Zre(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Sh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Sh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:h0},script:Wre}}a(Zre,"generateRestart");function ene(){return{apps:[m0()]}}a(ene,"generateAllServiceConfigs");S0.exports={generateAllServiceConfigs:ene,generateMainServerConfig:m0,generateRestart:Zre,generateNatsHubServerConfig:jre,generateNatsLeafServerConfig:Jre,generateClusteringUpgradeV4ServiceConfig:Xre}});var kc=g((TOe,P0)=>{"use strict";var He=C(),tne=W(),Ei=mh(),R_=ht(),Ps=et(),uo=T0(),gh=J(),_o=G(),rne=di(),{startWorker:g0,onMessageFromWorkers:nne}=tt(),sne=_i(),SOe=require("util"),ine=require("child_process"),one=require("fs"),{execFile:ane}=ine,Ce;P0.exports={enterPM2Mode:cne,start:fo,stop:OA,reload:A0,restart:O0,list:NA,describe:b0,connect:hi,kill:fne,startAllServices:Ene,startService:bA,getUniqueServicesList:y0,restartAllServices:hne,isServiceRegistered:I0,reloadStopStart:w0,restartHdb:N0,deleteProcess:_ne,startClusteringProcesses:L0,startClusteringThreads:D0,isHdbRestartRunning:dne,isClusteringRunning:mne,stopClustering:pne,reloadClustering:Sne};var A_=!1;nne(e=>{e.type==="restart"&&gh.initSync(!0)});function cne(){A_=!0}a(cne,"enterPM2Mode");function hi(){return Ce||(Ce=require("pm2")),new Promise((e,t)=>{Ce.connect((r,n)=>{_o.setupConsoleLogging(),r&&t(r),e(n)})})}a(hi,"connect");var vr,lne=10,R0;function fo(e,t=!1){if(A_)return une(e);let r=ane(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=vr.indexOf(r);o>-1&&vr.splice(o,1),!R0&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<lne&&(one.existsSync(Ei.getHubConfigPath())?fo(e):(await Ei.generateNatsConfig(!0),fo(e),await new Promise(c=>setTimeout(c,3e3)),await Ei.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ei.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=gh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&Ps.LOG_LEVEL_HIERARCHY[o]>=Ps.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===Ps.LOG_LEVELS.ERR||u===Ps.LOG_LEVELS.WRN?_o.OUTPUTS.STDERR:_o.OUTPUTS.STDOUT;_o.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=Ps.LOG_LEVELS[f]}if(Ps.LOG_LEVEL_HIERARCHY[o]>=Ps.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Ps.LOG_LEVELS.ERR||u===Ps.LOG_LEVELS.WRN?_o.OUTPUTS.STDERR:_o.OUTPUTS.STDOUT;_o.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),vr=[],!vr&&!t){let i=a(()=>{R0=!0,vr&&(vr.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)}vr.push(r)}a(fo,"start");function une(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.start(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(une,"startWithPM2");function OA(e){if(!A_){for(let t of vr||[])t.name===e&&(vr.splice(vr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.stop(e,async(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.delete(e,(i,o)=>{i&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(o)})})})}a(OA,"stop");function A0(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.reload(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(A0,"reload");function O0(e){if(!A_)for(let t of vr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.restart(e,(n,s)=>{Ce.disconnect(),t(s)})})}a(O0,"restart");function _ne(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.delete(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(_ne,"deleteProcess");async function N0(){await fo(uo.generateRestart())}a(N0,"restartHdb");async function dne(){let e=await NA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(dne,"isHdbRestartRunning");function NA(){return new Promise(async(e,t)=>{try{await hi()}catch(r){t(r)}Ce.list((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(NA,"list");function b0(e){return new Promise(async(t,r)=>{try{await hi()}catch(n){r(n)}Ce.describe(e,(n,s)=>{n&&(Ce.disconnect(),r(n)),Ce.disconnect(),t(s)})})}a(b0,"describe");function fne(){if(!A_){for(let e of vr||[])e.kill();vr=[];return}return new Promise(async(e,t)=>{try{await hi()}catch(r){t(r)}Ce.killDaemon((r,n)=>{r&&(Ce.disconnect(),t(r)),Ce.disconnect(),e(n)})})}a(fne,"kill");async function Ene(){try{await L0(),await D0(),await fo(uo.generateAllServiceConfigs())}catch(e){throw Ce?.disconnect(),e}}a(Ene,"startAllServices");async function bA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=uo.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=uo.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=uo.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=uo.generateNatsHubServerConfig(),await fo(r,t),await Ei.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=uo.generateNatsLeafServerConfig(),await fo(r,t),await Ei.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=uo.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fo(r)}catch(r){throw Ce?.disconnect(),r}}a(bA,"startService");async function y0(){try{let e=await NA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Ce?.disconnect(),e}}a(y0,"getUniqueServicesList");async function hne(e=[]){try{let t=!1,r=await y0();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await O0(o))}t&&await w0(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ce?.disconnect(),t}}a(hne,"restartAllServices");async function I0(e){if(vr?.find(r=>r.name===e))return!0;let t=await sne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(I0,"isServiceRegistered");async function w0(e){let t=gh.get(He.CONFIG_PARAMS.THREADS_COUNT)??gh.get(He.CONFIG_PARAMS.THREADS),r=await b0(e),n=tne.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await OA(e),await bA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await N0():await A0(e)}a(w0,"reloadStopStart");var C0;async function L0(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await bA(r,e)}}a(L0,"startClusteringProcesses");async function D0(){C0=g0(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await R_.createWorkQueueStream(Ps.WORK_QUEUE_CONSUMER_NAMES),await R_.updateIngestStreamConsumer(),await R_.updateLocalStreams();let e=await rne.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){_o.info("Starting clustering upgrade 4.0.0 process"),g0(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(D0,"startClusteringThreads");async function pne(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await C0.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await OA(t)}}a(pne,"stopClustering");async function mne(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await I0(t)===!1)return!1}return!0}a(mne,"isClusteringRunning");async function Sne(){await Ei.generateNatsConfig(!0),await R_.reloadNATSHub(),await R_.reloadNATSLeaf(),await Ei.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ei.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Sne,"reloadClustering")});var Na=g((ROe,x0)=>{"use strict";var Tne=require("minimist"),{isMainThread:wA,parentPort:v0}=require("worker_threads"),ct=C(),{PROCESS_DESCRIPTORS_VALIDATE:O_}=ct,Ms=G(),CA=W(),Rh=mh(),$c=ht(),yA=et(),B0=Et(),Us=kc(),M0=_i(),gne=Uo(),{restartWorkers:Ah,onMessageByType:Rne}=tt(),{handleHDBError:Ane,hdb_errors:One}=se(),{HTTP_STATUS_CODES:Nne}=One,Oh=J();Oh.initSync();var N_=`Restarting HarperDB. This may take up to ${ct.RESTART_TIMEOUT_MS/1e3} seconds.`,bne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",U0="Clustering is not enabled so cannot be restarted",yne="Invalid service",Vc,Un;x0.exports={restart:H0,restartService:LA};wA&&Rne(ct.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?LA({service:e.workerType}):H0({operation:"restart"})});async function H0(e){Un=Object.keys(e).length===0,Vc=await Us.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR);let t=Tne(process.argv);if(t.service){await LA(t);return}if(Un&&!Vc){console.error(bne);return}if(Un&&console.log(N_),Vc){Us.enterPM2Mode(),Ms.notify(N_);let r=gne(Object.keys(ct.CONFIG_PARAM_MAP),!0);return CA.isEmptyOrZeroLength(Object.keys(r))||B0.updateConfigValue(void 0,void 0,r,!0,!0),wne(),N_}return wA?(Ms.notify(N_),setTimeout(()=>{Ah()},50)):v0.postMessage({type:ct.ITC_EVENT_TYPES.RESTART}),N_}a(H0,"restart");async function LA(e){let{service:t}=e;if(ct.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Ane(new Error,yne,Nne.BAD_REQUEST,void 0,void 0,!0);if(Vc=await Us.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR),!wA)return v0.postMessage({type:ct.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case O_.clustering:if(!Oh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=U0;break}Un&&console.log("Restarting clustering"),Ms.notify("Restarting clustering"),await q0();break;case O_.clustering_config:case O_["clustering config"]:if(!Oh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=U0;break}Un&&console.log("Restarting clustering_config"),Ms.notify("Restarting clustering_config"),await Us.reloadClustering();break;case"custom_functions":case"custom functions":case O_.harperdb:case O_.http_workers:if(Un&&!Vc){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}Un&&console.log("Restarting http_workers"),Ms.notify("Restarting http_workers"),Un?await Us.restart(ct.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Ah("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ms.error(r),Un&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(LA,"restartService");async function Ine(){await $c.publishToStream(`${yA.SUBJECT_PREFIXES.TXN}.${yA.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,yA.WORK_QUEUE_CONSUMER_NAMES.stream_name,$c.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Ine,"postDummyNatsMsg");async function wne(){await q0(),await Us.restart(ct.HDB_PROC_DESCRIPTOR),await CA.async_set_timeout(2e3),Oh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await IA(),Un&&(await $c.closeConnection(),process.exit(0))}a(wne,"restartPM2Mode");async function q0(){if(!B0.getConfigFromFile(ct.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await M0.getHDBProcessInfo()).clustering.length===0)Ms.trace("Clustering not running, restart will start clustering services"),await Rh.generateNatsConfig(!0),await Us.startClusteringProcesses(),await Us.startClusteringThreads(),await IA(),Un&&await $c.closeConnection();else{await Ine(),await Rh.generateNatsConfig(!0),Vc?(Ms.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Us.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Us.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await M0.getHDBProcessInfo()).clustering.forEach(s=>{Ms.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await CA.async_set_timeout(3e3),await IA(),await $c.updateLocalStreams(),Un&&await $c.closeConnection(),Ms.trace("Restart clustering restarting ingest and reply service threads");let t=Ah(ct.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Ah(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(q0,"restartClustering");async function IA(){await Rh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Rh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(IA,"removeNatsConfig")});var z0=g((NOe,j0)=>{"use strict";var OOe=require("lodash"),Br=C(),{handleHDBError:G0,hdb_errors:Cne}=se(),{HDB_ERROR_MSGS:Lne,HTTP_STATUS_CODES:Dne}=Cne,DA=G();j0.exports={getRolePermissions:Mne};var ba=Object.create(null),Pne=a(e=>({key:e,perms:{}}),"perms_template_obj"),V0=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),Y0=a((e=!1,t=!1,r=!1,n=!1)=>({[Br.PERMS_CRUD_ENUM.READ]:e,[Br.PERMS_CRUD_ENUM.INSERT]:t,[Br.PERMS_CRUD_ENUM.UPDATE]:r,[Br.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),PA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Y0(t,r,n,s)}),"table_perms_template"),F0=a((e,t=Y0())=>({attribute_name:e,describe:Q0(t),[b_]:t[b_],[MA]:t[MA],[UA]:t[UA]}),"attr_perms_template"),k0=a((e,t=!1)=>({attribute_name:e,describe:t,[b_]:t}),"timestamp_attr_perms_template"),{READ:b_,INSERT:MA,UPDATE:UA}=Br.PERMS_CRUD_ENUM,K0=Object.values(Br.PERMS_CRUD_ENUM),W0=[b_,MA,UA];function Mne(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[Br.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(ba[t]&&ba[t].key===n)return ba[t].perms;let s=Une(e,r);return ba[t]?ba[t].key=n:ba[t]=Pne(n),ba[t].perms=s,s}catch(r){if(!e[Br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Br.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Br.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw DA.error(n),DA.debug(r),G0(new Error,Lne.OUTDATED_PERMS_TRANSLATION_ERROR,Dne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
12
|
+
${r.stack}`;throw DA.error(n),G0(new Error)}}}a(Mne,"getRolePermissions");function Une(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Br.SYSTEM_SCHEMA_NAME]=n[Br.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=vne(t[i]);return}r[i]=V0(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],_=Bne(c,l);r[i].describe||K0.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=PA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=PA()})}),r}a(Une,"translateRolePermissions");function vne(e){let t=V0(!0);return Object.keys(e).forEach(r=>{t.tables[r]=PA(!0,!0,!0,!0,!0)}),t}a(vne,"createStructureUserPermissions");function Bne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return Br.TIME_STAMP_NAMES.includes(d)&&(f=k0(d,u[b_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=F0(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=Q0(u),s.attribute_permissions.push(u),c||Hne(u,l)}else if(_!==o){let u;Br.TIME_STAMP_NAMES.includes(_)?u=k0(_):u=F0(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=$0(s),s}else return e.describe=$0(e),e}a(Bne,"getTableAttrPerms");function $0(e){return K0.filter(t=>e[t]).length>0}a($0,"getSchemaTableDescribePerm");function Q0(e){return W0.filter(t=>e[t]).length>0}a(Q0,"getAttributeDescribePerm");function Hne(e,t){W0.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Hne,"checkForHashPerms")});var y_={};$e(y_,{authentication:()=>sH,bypassAuth:()=>Vne,login:()=>Kne,logout:()=>Wne,start:()=>Yne});function Vne(){nH=!0}async function sH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Fne?Gne:[]:xne?qne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new to([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Nh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Nh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Nh){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let m=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,m===-1?s.length:m),_=await X0.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new yh.AuthAuditLog(E,h,Jt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Jt.AUTH_AUDIT_STATUS.SUCCESS?J0.notify(S):J0.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let E=e.mtlsConfig.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=e.peerCertificate.subject.CN),e.user=await it.getUser(E,null,null))}let d;if(!e.user)if(n){if(d=ya.get(n),!d){let[E,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await it.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,bh.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,bh.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return $ne&&(ya.get(h)||(ya.set(h,h),u(m,Jt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Eo({error:A.message},e)})}ya.set(n,d),kne&&u(d.username,Jt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await it.getUser(_.user,null,e):(nH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,eH.getSuperUser)());Nh&&(e.session.update=function(E){if(!l){l=(0,tH.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,X0.put(E)},e.login=async function(E,h){e.user=await it.getUser(E,h,e),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")&&Vi.loginPath?(f.status=302,f.headers.set("Location",Vi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new to);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function Yne({server:e,port:t}){e.request(sH,{port:t||"all"}),Z0||(Z0=!0,setInterval(()=>{ya=new Map},vn.get(Jt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),rH.user.addListener(()=>{ya=new Map}))}async function Kne(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 Wne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var eH,bh,tH,vn,Jt,yh,rH,J0,qne,xne,Gne,Fne,X0,Nh,nH,kne,$ne,ya,Z0,Ih=Ne(()=>{eH=q(yr());Er();Wl();bh=q(o_());Re();tH=require("uuid"),vn=q(J()),Jt=q(C()),yh=q(G()),rH=q(Iu());Mu();Yc();J0=(0,yh.loggerWithTag)("auth-event");vn.initSync();qne=vn.get(Jt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),xne=vn.get(Jt.CONFIG_PARAMS.HTTP_CORS),Gne=vn.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Fne=vn.get(Jt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),X0=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Nh=vn.get(Jt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,nH=vn.get(Jt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,kne=vn.get(Jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,$ne=vn.get(Jt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ya=new Map;it.onInvalidatedUser(()=>{ya=new Map});a(Vne,"bypassAuth");a(sH,"authentication");a(Yne,"start");a(Kne,"login");a(Wne,"logout")});var _H=g((POe,uH)=>{"use strict";var Le=require("joi"),iH=require("fs-extra"),oH=require("path"),mi=rt(),aH=J(),cH=C(),lH=G(),{hdb_errors:Qne}=se(),{HDB_ERROR_MSGS:ar}=Qne,pi=/^[a-zA-Z0-9-_]+$/;uH.exports={getDropCustomFunctionValidator:zne,setCustomFunctionValidator:Jne,addComponentValidator:tse,dropCustomFunctionProjectValidator:rse,packageComponentValidator:nse,deployComponentValidator:sse,setComponentFileValidator:Xne,getComponentFileValidator:ese,dropComponentFileValidator:Zne};function wh(e,t,r){try{let n=aH.get(cH.CONFIG_PARAMS.COMPONENTSROOT),s=oH.join(n,t);return iH.existsSync(s)?e?t:r.message(ar.PROJECT_EXISTS):e?r.message(ar.NO_PROJECT):t}catch(n){return lH.error(n),r.message(ar.VALIDATION_ERR)}}a(wh,"checkProjectExists");function I_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(I_,"checkFilePath");function jne(e,t,r,n){try{let s=aH.get(cH.CONFIG_PARAMS.COMPONENTSROOT),i=oH.join(s,e,t,r+".js");return iH.existsSync(i)?r:n.message(ar.NO_FILE)}catch(s){return lH.error(s),n.message(ar.VALIDATION_ERR)}}a(jne,"checkFileExists");function zne(e){let t=Le.object({project:Le.string().pattern(pi).custom(wh.bind(null,!0)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(pi).custom(jne.bind(null,e.project,e.type)).custom(I_).required().messages({"string.pattern.base":ar.BAD_FILE_NAME})});return mi.validateBySchema(e,t)}a(zne,"getDropCustomFunctionValidator");function Jne(e){let t=Le.object({project:Le.string().pattern(pi).custom(wh.bind(null,!0)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(I_).required(),function_content:Le.string().required()});return mi.validateBySchema(e,t)}a(Jne,"setCustomFunctionValidator");function Xne(e){let t=Le.object({project:Le.string().pattern(pi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),file:Le.string().custom(I_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mi.validateBySchema(e,t)}a(Xne,"setComponentFileValidator");function Zne(e){let t=Le.object({project:Le.string().pattern(pi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),file:Le.string().custom(I_).optional()});return mi.validateBySchema(e,t)}a(Zne,"dropComponentFileValidator");function ese(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(I_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mi.validateBySchema(e,t)}a(ese,"getComponentFileValidator");function tse(e){let t=Le.object({project:Le.string().pattern(pi).custom(wh.bind(null,!1)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME})});return mi.validateBySchema(e,t)}a(tse,"addComponentValidator");function rse(e){let t=Le.object({project:Le.string().pattern(pi).custom(wh.bind(null,!0)).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME})});return mi.validateBySchema(e,t)}a(rse,"dropCustomFunctionProjectValidator");function nse(e){let t=Le.object({project:Le.string().pattern(pi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return mi.validateBySchema(e,t)}a(nse,"packageComponentValidator");function sse(e){let t=Le.object({project:Le.string().pattern(pi).required().messages({"string.pattern.base":ar.BAD_PROJECT_NAME}),payload:Le.string().optional().messages({"string.pattern.base":ar.BAD_PACKAGE}),package:Le.string().optional()});return mi.validateBySchema(e,t)}a(sse,"deployComponentValidator")});var Ph=g((UOe,SH)=>{"use strict";var Ch=require("joi"),Lh=require("path"),dH=require("fs-extra"),{exec:ise}=require("child_process"),ose=require("util"),fH=ose.promisify(ise),w_=C(),{handleHDBError:Kc,hdb_errors:ase}=se(),{HTTP_STATUS_CODES:Wc}=ase,C_=J(),cse=rt(),Qc=G();C_.initSync();var vA=C_.get(w_.CONFIG_PARAMS.COMPONENTSROOT),EH="npm install --omit=dev --json",lse=`${EH} --dry-run`;SH.exports={installModules:fse,auditModules:Ese,installAllRootModules:use,uninstallRootModule:_se,linkHarperdb:dse};async function use(e=!1){await Dh(),await L_(e?"npm install --ignore-scripts":"npm install",C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(use,"installAllRootModules");async function _se(e){await L_(`npm uninstall ${e}`,C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(_se,"uninstallRootModule");async function dse(){await Dh(),await L_(`npm link ${w_.PACKAGE_ROOT}`,C_.get(w_.CONFIG_PARAMS.ROOTPATH))}a(dse,"linkHarperdb");async function L_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await fH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
13
13
|
`,""))}return n&&!n.includes("Debugger listening")&&Qc.error("Error running NPM command:",e,n),Qc.trace(r,n),r?.replace(`
|
|
14
|
-
`,"")}a(L_,"runCommand");async function
|
|
14
|
+
`,"")}a(L_,"runCommand");async function fse(e){Qc.info(`starting installModules for request: ${e}`);let t=mH(e);if(t)throw Kc(t,t.message,Wc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?lse:EH;await Dh(),await pH(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Lh.join(vA,l),u,d=null;try{let{stdout:f,stderr:E}=await fH(s,{cwd:_});u=f?f.replace(`
|
|
15
15
|
`,""):null,d=E?E.replace(`
|
|
16
|
-
`,""):null}catch(f){f.stderr?i[l].npm_error=
|
|
17
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(pH,"parseNPMStdErr");async function fse(e){Qc.info(`starting auditModules for request: ${e}`);let t=SH(e);if(t)throw Kc(t,t.message,Wc.BAD_REQUEST);let{projects:r}=e;await Dh(),await mH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Lh.join(UA,o);n[o]={npm_output:null,npm_error:null};try{let l=await L_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=pH(l.stderr)}}return Qc.info(`finished auditModules with response ${n}`),n}a(fse,"auditModules");async function Dh(){try{return await L_("npm -v"),!0}catch{throw Kc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Wc.BAD_REQUEST,void 0,void 0,!0)}}a(Dh,"checkNPMInstalled");async function mH(e){if(!Array.isArray(e)||e.length===0)throw Kc(new Error,"projects argument must be an array with at least 1 element",Wc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Lh.join(UA,i.toString());if(!await fH.pathExists(o)){t.push(i);continue}let l=Lh.join(o,"package.json");await fH.pathExists(l)||r.push(i)}if(t.length>0)throw Kc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Wc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Kc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Wc.BAD_REQUEST,void 0,void 0,!0)}a(mH,"checkProjectPaths");function SH(e){let t=Ch.object({projects:Ch.array().min(1).items(Ch.string()).required(),dry_run:Ch.boolean().default(!1)});return ase.validateBySchema(e,t)}a(SH,"modulesValidator")});var BA=g((BOe,NH)=>{"use strict";var jc=require("fs-extra"),vA=require("path"),Mh=G(),gH=W(),Uh=w(),OH=J(),Ese=Et();NH.exports=hse;async function hse(){let e=pse(),t=OH.get(Uh.CONFIG_PARAMS.ROOTPATH),r=vA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Uh.PACKAGE_ROOT}},s=vA.join(t,"node_modules");await jc.ensureDir(s);let i,o=!0,c=!1;try{i=await jc.readJson(r)}catch(l){if(gH.isEmptyOrZeroLength(e))return;if(l.code!==Uh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!gH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await RH(_);n.dependencies[l]=u+_}if(!o){Mh.notify("Installing components"),await AH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await RH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Mh.notify("Removing component",l),c=!0);c&&(Mh.notify("Updating components."),await AH(r,n,i))}a(hse,"installComponents");function pse(){let e=Ese.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(pse,"getComponentsConfig");async function RH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":vA.extname(e)||await jc.pathExists(e)?"file:":"github:"}a(RH,"getPkgPrefix");async function AH(e,t,r){Mh.trace("npm installing components package.json",t),await jc.writeFile(e,JSON.stringify(t,null," "));try{await Ph().installAllRootModules(OH.get(Uh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await jc.writeFile(e,JSON.stringify(r,null," ")):await jc.unlink(e),n}}a(AH,"installPackages")});var vh=g((xOe,wH)=>{"use strict";var Ye=require("fs-extra"),HA=require("fast-glob"),ge=require("path"),yH=require("tar-fs"),qOe=require("uuid").v4,qA=require("normalize-path"),vs=dH(),Mt=G(),Je=w(),Ot=J(),D_=Et(),mse=W(),{PACKAGE_ROOT:Sse}=w(),{handleHDBError:kt,hdb_errors:Tse}=se(),{basename:gse}=require("path"),Rse=BA(),IH=J(),Ase=w(),{Readable:Ose}=require("stream"),{isMainThread:Nse}=require("worker_threads"),{HDB_ERROR_MSGS:Ia,HTTP_STATUS_CODES:$t}=Tse,bse=ge.join(Sse,"application-template"),bH=ge.join(Ot.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function yse(){Mt.trace("getting custom api status");let e={};try{e={port:Ot.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw kt(new Error,Ia.FUNCTION_STATUS,$t.INTERNAL_SERVER_ERROR,Mt.ERR,t)}return e}a(yse,"customFunctionsStatus");function Ise(){Mt.trace("getting custom api endpoints");let e={},t=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{HA.sync(qA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:HA.sync(qA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:HA.sync(qA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw kt(new Error,Ia.GET_FUNCTIONS,$t.INTERNAL_SERVER_ERROR,Mt.ERR,r)}return e}a(Ise,"getCustomFunctions");function wse(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("getting custom api endpoint file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw kt(new Error,Ia.GET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,c)}}a(wse,"getCustomFunction");function Cse(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=vs.setCustomFunctionValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("setting custom function file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw kt(new Error,Ia.SET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,c)}}a(Cse,"setCustomFunction");function Lse(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("dropping custom function file");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw kt(new Error,Ia.DROP_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,o)}}a(Lse,"dropCustomFunction");function Dse(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.addComponentValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("adding component");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(bse,s),`Successfully added project: ${n}`}catch(s){throw kt(new Error,Ia.ADD_FUNCTION,$t.INTERNAL_SERVER_ERROR,Mt.ERR,s)}}a(Dse,"addComponent");function Pse(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.dropCustomFunctionProjectValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);Mt.trace("dropping custom function project");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(Je.CONFIG_PARAMS.APPS);if(!mse.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return D_.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw kt(new Error,Ia.DROP_FUNCTION_PROJECT,$t.INTERNAL_SERVER_ERROR,Mt.ERR,i)}}a(Pse,"dropCustomFunctionProject");async function Mse(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.packageComponentValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Mt.trace("packaging component",n);let s;try{s=await Ye.realpath(ge.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir(bH);let i=ge.join(bH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(ge.join(s,"node_modules"))}),yH.pack(s,o).pipe(Ye.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ye.readFileSync(i,{encoding:"base64"});return await Ye.remove(i),{project:n,payload:c}}a(Mse,"packageComponent");async function Use(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.deployComponentValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Mt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=Ose.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(yH.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(ge.join(o,"package"),o),await Ye.remove(ge.join(o,"package")))}if(await D_.addConfig(n,{package:i}),!s){await Rse();let f=IH.get(Ase.CONFIG_PARAMS.ROOTPATH);o=ge.join(f,"node_modules",n)}if(Nse)return;let c=new Map;c.isWorker=!0;let l=(Hh(),ie(Bh)),_;l.setErrorReporter(f=>_=f);let u=gse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Mt.info("Installed component"),`Successfully deployed: ${n}`}a(Use,"deployComponent");async function vse(){let e=D_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ge.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ye.stat(d),E={name:ge.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return Mt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Hh(),ie(Bh)).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 n}a(vse,"getComponents");async function Bse(e){let t=vs.getComponentFileValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let n=D_.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(IH.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(ge.join(n,e.project,e.file));return{message:await Ye.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(Bse,"getComponentFile");async function Hse(e){let t=vs.setComponentFileValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(Hse,"setComponentFile");async function qse(e){let t=vs.dropComponentFileValidator(e);if(t)throw kt(t,t.message,$t.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),D_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(qse,"dropComponent");wH.exports={customFunctionsStatus:yse,getCustomFunctions:Ise,getCustomFunction:wse,setCustomFunction:Cse,dropCustomFunction:Lse,addComponent:Dse,dropCustomFunctionProject:Pse,packageComponent:Mse,deployComponent:Use,getComponents:vse,getComponentFile:Bse,setComponentFile:Hse,dropComponent:qse}});var xA=g((FOe,LH)=>{"use strict";var Bs=require("joi"),CH=rt();LH.exports={readTransactionLogValidator:xse,deleteTransactionLogsBeforeValidator:Gse};function xse(e){let t=Bs.object({schema:Bs.string().required(),table:Bs.string().required(),from:Bs.date().timestamp(),to:Bs.date().timestamp(),limit:Bs.number().min(1)});return CH.validateBySchema(e,t)}a(xse,"readTransactionLogValidator");function Gse(e){let t=Bs.object({schema:Bs.string().required(),table:Bs.string().required(),timestamp:Bs.date().timestamp().required()});return CH.validateBySchema(e,t)}a(Gse,"deleteTransactionLogsBeforeValidator")});var xh=g(($Oe,vH)=>{"use strict";var GA=w(),qh=ht(),DH=W(),PH=J(),MH=ci(),{handleHDBError:zc,hdb_errors:Fse}=se(),{HTTP_STATUS_CODES:Jc}=Fse,{readTransactionLogValidator:kse,deleteTransactionLogsBeforeValidator:$se}=xA(),UH="This operation relies on clustering and cannot run with it disable.",Vse="Logs successfully deleted from transaction log.",Yse="All logs successfully deleted from transaction log.";vH.exports={readTransactionLog:Kse,deleteTransactionLogsBefore:Wse};async function*Kse(e){let t=kse(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST,void 0,void 0,!0);if(!PH.get(GA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw zc(new Error,UH,Jc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=DH.checkSchemaTableExist(r,n);if(s)throw zc(new Error,s,Jc.NOT_FOUND,void 0,void 0,!0);let i=MH.createNatsTableStreamName(r,n),o=await qh.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===GA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Kse,"readTransactionLog");async function Wse(e){let t=$se(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST,void 0,void 0,!0);if(!PH.get(GA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw zc(new Error,UH,Jc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=DH.checkSchemaTableExist(r,n);if(i)throw zc(new Error,i,Jc.NOT_FOUND,void 0,void 0,!0);let o=MH.createNatsTableStreamName(r,n),{jsm:c}=await qh.getNATSReferences(),l=await qh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=Vse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=Yse):d=(await qh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Wse,"deleteTransactionLogsBefore")});var HH=g((YOe,BH)=>{"use strict";var FA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};BH.exports=FA});var xH=g((WOe,qH)=>{"use strict";var kA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};qH.exports=kA});var VA=g((jOe,FH)=>{"use strict";var GH=HH(),Qse=xH(),{HDB_ERROR_MSGS:jse}=Vr(),$A=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=jse.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new GH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Qse(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new GH(r,n,[],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}};FH.exports=$A});var $h=g((JOe,nq)=>{"use strict";var YA=Ar(),Gh=Rr(),Hn=HE(),U_=ji(),KA=ta(),zse=fR(),Jse=rv(),v_=Nr(),Fh=FE(),Ut=G(),Xse=NR(),Zse=u_(),eie=iA(),tie=th(),rie=nh(),nie=oA(),sie=oh(),iie=ch(),WA=uh(),Si=W(),oie=X0(),QA=dh(),VH=Na(),Bn=w(),YH=JB(),aie=_i(),KH=o_(),WH=(Ih(),ie(y_)),QH=Et(),fn=vh(),cie=require("alasql"),jH=xh(),zH=Ph(),JH=VA(),{handleHDBError:vr,hdb_errors:XH}=se(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:P_}=XH,$=new Map,ZH="delete",ho="insert",Ti="read",wa="update",M_="describe",kH=U_.describeSchema.name,$H=U_.describeTable.name,eq={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},lie="catchup",uie="handleGetJob",_ie="handleGetJobsByStartDate",kh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},die=[Hn.createTable.name,Hn.createAttribute.name,Hn.dropTable.name,Hn.dropAttribute.name],tq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},j=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};$.set(YA.insert.name,new j(!1,[ho]));$.set(YA.update.name,new j(!1,[wa]));$.set(YA.upsert.name,new j(!1,[ho,wa]));$.set(Gh.searchByConditions.name,new j(!1,[Ti]));$.set(Gh.searchByHash.name,new j(!1,[Ti]));$.set(Gh.searchByValue.name,new j(!1,[Ti]));$.set(Gh.search.name,new j(!1,[Ti]));$.set(Hn.createSchema.name,new j(!0,[]));$.set(Hn.createTable.name,new j(!0,[]));$.set(Hn.createAttribute.name,new j(!1,[ho]));$.set(Hn.dropSchema.name,new j(!0,[]));$.set(Hn.dropTable.name,new j(!0,[]));$.set(Hn.dropAttribute.name,new j(!0,[]));$.set(U_.describeSchema.name,new j(!1,[Ti]));$.set(U_.describeTable.name,new j(!1,[Ti]));$.set(KA.deleteRecord.name,new j(!1,[ZH]));$.set(v_.addUser.name,new j(!0,[]));$.set(v_.alterUser.name,new j(!0,[]));$.set(v_.dropUser.name,new j(!0,[]));$.set(v_.listUsersExternal.name,new j(!0,[]));$.set(Fh.listRoles.name,new j(!0,[]));$.set(Fh.addRole.name,new j(!0,[]));$.set(Fh.alterRole.name,new j(!0,[]));$.set(Fh.dropRole.name,new j(!0,[]));$.set(Xse.name,new j(!0,[]));$.set(Zse.name,new j(!0,[]));$.set(eie.name,new j(!0,[]));$.set(tie.name,new j(!0,[]));$.set(rie.name,new j(!0,[]));$.set(nie.name,new j(!0,[]));$.set(WA.setRoutes.name,new j(!0,[]));$.set(WA.getRoutes.name,new j(!0,[]));$.set(WA.deleteRoutes.name,new j(!0,[]));$.set(QH.setConfiguration.name,new j(!0,[]));$.set(sie.clusterStatus.name,new j(!0,[]));$.set(iie.name,new j(!0,[]));$.set(QA.getFingerprint.name,new j(!0,[]));$.set(QA.setLicense.name,new j(!0,[]));$.set(KA.deleteFilesBefore.name,new j(!0,[]));$.set(KA.deleteAuditLogsBefore.name,new j(!0,[]));$.set(VH.restart.name,new j(!0,[]));$.set(VH.restartService.name,new j(!0,[]));$.set(zse.name,new j(!0,[]));$.set(Jse.name,new j(!0,[Ti]));$.set(aie.systemInformation.name,new j(!0,[]));$.set(QH.getConfiguration.name,new j(!0,[]));$.set(jH.readTransactionLog.name,new j(!0,[]));$.set(jH.deleteTransactionLogsBefore.name,new j(!0,[]));$.set(zH.installModules.name,new j(!0,[]));$.set(zH.auditModules.name,new j(!0,[]));$.set(KH.createTokens.name,new j(!1,[]));$.set(KH.refreshOperationToken.name,new j(!1,[]));$.set(WH.login.name,new j(!1,[]));$.set(WH.logout.name,new j(!1,[]));$.set(fn.customFunctionsStatus.name,new j(!0,[]));$.set(fn.getCustomFunctions.name,new j(!0,[]));$.set(fn.getComponents.name,new j(!0,[]));$.set(fn.getComponentFile.name,new j(!0,[]));$.set(fn.setComponentFile.name,new j(!0,[]));$.set(fn.dropComponent.name,new j(!0,[]));$.set(fn.getCustomFunction.name,new j(!0,[]));$.set(fn.setCustomFunction.name,new j(!0,[]));$.set(fn.dropCustomFunction.name,new j(!0,[]));$.set(fn.addComponent.name,new j(!0,[]));$.set(fn.dropCustomFunctionProject.name,new j(!0,[]));$.set(fn.packageComponent.name,new j(!0,[]));$.set(fn.deployComponent.name,new j(!0,[]));$.set(QA.getRegistrationInfo.name,new j(!1,[]));$.set(v_.userInfo.name,new j(!1,[]));$.set(U_.describeAll.name,new j(!1,[]));$.set(uie,new j(!1,[]));$.set(_ie,new j(!0,[]));$.set(lie,new j(!0,[]));$.set(kh.CSV_DATA_LOAD,new j(!1,[ho,wa]));$.set(kh.CSV_URL_LOAD,new j(!1,[ho,wa]));$.set(kh.CSV_FILE_LOAD,new j(!1,[ho,wa]));$.set(kh.IMPORT_FROM_S3,new j(!1,[ho,wa]));$.set(tq.EXPORT_TO_S3,new j(!0,[]));$.set(tq.EXPORT_LOCAL,new j(!0,[]));$.set(Bn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[ZH]));$.set(Bn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Ti]));$.set(Bn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[ho]));$.set(Bn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[wa]));nq.exports={verifyPerms:Eie,verifyPermsAst:fie,verifyBulkLoadAttributePerms:pie};function fie(e,t,r){if(Si.isEmptyOrZeroLength(e))throw Ut.info("verify_perms_ast has an empty user parameter"),vr(new Error);if(Si.isEmptyOrZeroLength(t))throw Ut.info("verify_perms_ast has an empty user parameter"),vr(new Error);if(Si.isEmptyOrZeroLength(r))throw Ut.info("verify_perms_ast has a null operation parameter"),vr(new Error);try{let n=new JH,s=new oie(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ut.info("No schemas defined in verifyPermsAst(), will not continue."),vr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&eq[r])throw vr(new Error,Jt.DROP_SYSTEM,P_.FORBIDDEN);if(c&&!l)return null;let _=YH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof cie.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=rq(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),m=zA(t.role.permission,f,d[E]);jA(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw vr(n)}}a(fie,"verifyPermsAst");function Eie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ut.info("null required parameter in verifyPerms"),vr(new Error,Jt.DEFAULT_INVALID_REQUEST,P_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new JH;if(Si.isEmptyOrZeroLength(e.hdb_user.role)||Si.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ut.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Jt.USER_HAS_NO_PERMS(e.hdb_user.username));let l=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,u=o.has(Bn.SYSTEM_SCHEMA_NAME)||s===Bn.SYSTEM_SCHEMA_NAME;if(u&&eq[r])throw vr(new Error,Jt.DROP_SYSTEM,P_.FORBIDDEN);if(l&&!u||_===!0&&(r===Hn.createSchema.name||r===Hn.dropSchema.name))return null;if(die.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=YH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===kH||r===$H){if(s===Bn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Jt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===kH&&(!d[s]||!d[s][M_]))return c.handleInvalidItem(Jt.SCHEMA_NOT_FOUND(s));if(r===$H&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][M_]))return c.handleInvalidItem(Jt.TABLE_NOT_FOUND(s,i))}}let f=rq(e.hdb_user,r,o,c,n);if(f)return f;if($.get(r)&&$.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Bn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Bn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Bn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=m)}let E=hie(e),h=zA(e.hdb_user.role.permission,s,i);return jA(E,h,r,i,s,c,n),c.getPermsResponse()}a(Eie,"verifyPerms");function rq(e,t,r,n,s){if(Si.arrayHasEmptyValues([e,t,r]))throw Ut.info("hasPermissions has an invalid parameter"),vr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||$.get(t).requires_su))return null;if(!$.get(t))throw Ut.info(`operation ${t} not found.`),vr(new Error,Jt.OP_NOT_FOUND(t),P_.BAD_REQUEST);if($.get(t)&&$.get(t).requires_su)return Ut.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Jt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][M_]===!1){n.addInvalidItem(Jt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Jt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[M_]===!1)n.addInvalidItem(Jt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=$.get(t).perms;!Si.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Ut.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Jt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Ut.error(E),Ut.error(f),vr(XH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(rq,"hasPermissions");function jA(e,t,r,n,s,i,o){if(!e||!t)throw Ut.info("no attributes specified in checkAttributePerms."),vr(new Error);let c=$.get(r).perms;if(!c||c==="")throw Ut.info(`no permissions found for ${r} in checkAttributePerms().`),vr(new Error);if(Si.isEmptyOrZeroLength(t))return Ut.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[M_]===!1){i.addInvalidItem(Jt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Bn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ti)throw vr(new Error,Jt.SYSTEM_TIMESTAMP_PERMS_ERR,P_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Jt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(jA,"checkAttributePerms");function hie(e){let t=new Set;try{if(e.action)return t;if(e.operation===Bn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Ut.info(r)}return t}a(hie,"getRecordAttributes");function zA(e,t,r){let n=new Map;if(Si.isEmpty(e))return Ut.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Ut.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(zA,"getAttributePermissions");function pie(e,t,r,n,s,i,o){let c=new Set(i),l=zA(e,n,s);jA(c,l,t,s,n,o,r)}a(pie,"verifyBulkLoadAttributePerms")});var Yh=g((ZOe,cq)=>{"use strict";cq.exports={evaluateSQL:Cie,processAST:aq,convertSQLToAST:oq,checkASTPermissions:iq};var mie=Ar(),sq=require("util"),Sie=sq.callbackify(mie.insert),Tie=Rr().search,gie=fU().update,Rie=sq.callbackify(gie),Aie=hU().convertDelete,po=require("alasql"),Oie=$h(),Vh=G(),Nie=Gf(),bie=W(),B_=w(),{hdb_errors:yie,handleHDBError:JA}=se(),{HTTP_STATUS_CODES:XA}=yie;Nie(po);var Iie=403,wie="There was a problem performing this insert. Please check the logs and try again.",ZA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Cie(e,t){let r=e.parsed_sql_object;if(!r){r=oq(e.sql);let n,s=r.ast.statements[0];if(s instanceof po.yy.Insert?n=s.into.databaseid:s instanceof po.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof po.yy.Update||s instanceof po.yy.Delete?n=s.table.databaseid:Vh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof po.yy.Select)&&bie.isEmptyOrZeroLength(n))return t("No schema specified",null)}aq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Cie,"evaluateSQL");function iq(e,t){let r;try{r=Oie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(iq,"checkASTPermissions");function oq(e){let t=new ZA;if(!e)throw JA(new Error,"The 'sql' parameter is missing from the request body",XA.BAD_REQUEST);try{let r=e.trim(),n=po.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
18
|
-
`);throw n[1]?JA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XA.BAD_REQUEST):JA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XA.BAD_REQUEST)}return t}a(oq,"convertSQLToAST");function aq(e,t,r){try{let n=Lie;if(!e.bypass_auth&&!t.permissions_checked){let i=iq(e,t);if(i&&i.length>0)return r(Iie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case B_.VALID_SQL_OPS_ENUM.SELECT:n=Tie,s=t.ast.statements[0];break;case B_.VALID_SQL_OPS_ENUM.INSERT:n=Die;break;case B_.VALID_SQL_OPS_ENUM.UPDATE:n=Rie;break;case B_.VALID_SQL_OPS_ENUM.DELETE:n=Aie;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(aq,"processAST");function Lie(e,t){Vh.info(e),t("unknown sql statement")}a(Lie,"nullFunction");function Die({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Pie(i,e.values)}catch(o){return r(o)}Sie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Vh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Die,"convertInsert");function Pie(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=po.compile(`SELECT ${s.toString()} AS [${B_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Vh.error(r),new Error(wie)}}a(Pie,"createDataObjects")});var eO=g((tNe,uq)=>{"use strict";var{S3:Mie,GetObjectCommand:Uie}=require("@aws-sdk/client-s3");uq.exports={getFileStreamFromS3:vie,getS3AuthObj:lq};async function vie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await lq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Uie(r))).Body}a(vie,"getFileStreamFromS3");function lq(e,t,r){return new Mie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(lq,"getS3AuthObj")});var Kh=g((nNe,Tq)=>{"use strict";var rO=Rr(),Bie=Yh(),Hie=eO(),{AsyncParser:qie,Transform:xie}=require("json2csv"),q_=require("stream"),En=W(),tO=require("fs-extra"),Gie=require("path"),qn=G(),{promisify:fq}=require("util"),H_=W(),{handleHDBError:Nt,hdb_errors:Fie}=se(),{HDB_ERROR_MSGS:Br,HTTP_STATUS_CODES:bt}=Fie,{streamAsJSON:kie}=(Xg(),ie(cU)),{Upload:$ie}=require("@aws-sdk/lib-storage"),_q=["search_by_value","search_by_hash","sql","search_by_conditions"],dq=["json","csv"],Eq="json",hq="csv",Vie="Successfully exported JSON locally.",Yie="Successfully exported CSV locally.",Kie=1e3,Wie=rO.searchByHash,Qie=rO.searchByValue,jie=fq(Bie.evaluateSQL),zie=fq(q_.finished);Tq.exports={export_to_s3:eoe,export_local:Jie,toCsvStream:pq};async function Jie(e){qn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=mq(e);if(!En.isEmpty(t))throw qn.error(t),Nt(new Error,t,bt.BAD_REQUEST,void 0,void 0,!0);if(En.isEmpty(e.path))throw qn.error(Br.MISSING_VALUE("path")),Nt(new Error,Br.MISSING_VALUE("path"),bt.BAD_REQUEST,void 0,void 0,!0);let r=(En.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Gie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=En.buildFolderPath(e.path,r);await Xie(e.path);let s=await Sq(e);return await Zie(n,e.format,s)}a(Jie,"export_local");async function Xie(e){if(qn.trace("in confirmPath"),En.isEmptyOrZeroLength(e))throw Nt(new Error,`Invalid path: ${e}`,bt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await tO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,qn.error(n),Nt(new Error,n,bt.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 qn.error(r),Nt(new Error,r,bt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Xie,"confirmPath");async function Zie(e,t,r){if(qn.trace("in saveToLocal"),H_.isEmptyOrZeroLength(e))throw Nt(new Error,Br.INVALID_VALUE("file_path"),bt.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmptyOrZeroLength(t))throw Nt(new Error,Br.INVALID_VALUE("Source format"),bt.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmpty(r))throw Nt(new Error,Br.NOT_FOUND("Data"),bt.BAD_REQUEST,void 0,void 0,!0);if(t===Eq){let n=tO.createWriteStream(e);return kie(r).pipe(n),await zie(n),{message:Vie,path:e}}else if(t===hq){let n=tO.createWriteStream(e),s=q_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new qie(i,c).fromInput(s).toOutput(n).promise(!1),{message:Yie,path:e}}throw Nt(new Error,Br.INVALID_VALUE("format"),bt.BAD_REQUEST)}a(Zie,"saveToLocal");async function eoe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Nt(new Error,Br.MISSING_VALUE("S3 object"),bt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Nt(new Error,Br.MISSING_VALUE("aws_access_key_id"),bt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Nt(new Error,Br.MISSING_VALUE("aws_secret_access_key"),bt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.bucket))throw Nt(new Error,Br.MISSING_VALUE("bucket"),bt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.key))throw Nt(new Error,Br.MISSING_VALUE("key"),bt.BAD_REQUEST);if(En.isEmptyOrZeroLength(e.s3.region))throw Nt(new Error,Br.MISSING_VALUE("region"),bt.BAD_REQUEST);let t=mq(e);if(!En.isEmpty(t))throw Nt(new Error,t,bt.BAD_REQUEST);qn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Sq(e)}catch(l){throw qn.error(l),l}let n,s=await Hie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new q_.PassThrough;if(e.format===hq){i=e.s3.key+".csv";let l=pq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===Eq){i=e.s3.key+".json";let l=new q_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%Kie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Nt(new Error,Br.INVALID_VALUE("format"),bt.BAD_REQUEST);return new $ie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(eoe,"export_to_s3");function pq(e,t){let r=q_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new xie(n,s);return r.pipe(i)}a(pq,"toCsvStream");function mq(e){if(qn.trace("in exportCoreValidation"),En.isEmpty(e.format))return"format missing";if(dq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${dq.join(", ")}`;let t=e.search_operation.operation;if(En.isEmpty(t))return"search_operation.operation missing";if(_q.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${_q.join(", ")}`}a(mq,"exportCoreValidation");async function Sq(e){qn.trace("in getRecords");let t,r;if(H_.isEmpty(e.search_operation)||H_.isEmptyOrZeroLength(e.search_operation.operation))throw Nt(new Error,Br.INVALID_VALUE("Search operation"),bt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Qie;break;case"search_by_hash":t=Wie;break;case"search_by_conditions":t=rO.searchByConditions;break;case"sql":t=jie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,qn.error(r),Nt(new Error,r,bt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Sq,"getRecords")});var Iq={};$e(Iq,{contentTypes:()=>aO,findBestSerializer:()=>Qh,getDeserializer:()=>La,registerContentHandlers:()=>cO,serialize:()=>jh,serializeMessage:()=>Eo});function toe(e){try{return e?.[0]===123?oO(e):e}catch{return e}}function cO(e){e.register(noe,{serializers:[{regex:/^application\/json$/,serializer:Qu},{regex:/^application\/cbor$/,serializer:function(t){return new Ca.EncoderStream(G_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Wh.Readable.from((0,Hs.encodeIter)(t,G_)):(0,Hs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,nO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Hs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ca.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Qh(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Vt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Vt.keys()).join(", "))}};n=Vt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function jh(e,t,r){let n=Rq&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Qh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,gi.createBrotliCompress)({params:{[gi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?gi.constants.BROTLI_MODE_TEXT:gi.constants.BROTLI_MODE_GENERIC,[gi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>Rq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,gi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Eo(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return x_(e);let r=t.serialize;if(r)return r(e);let n=Qh(t);return r=t.serialize=n.serializer.serialize,r(e)}function soe(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function La(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Vt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Vt.get(e)?.deserialize||Aq(e,n);return o=>soe(o).then(i)}return e&&Vt.get(e)?.deserialize||Aq(e,n)}function Aq(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return oO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function ioe(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var nO,Hs,Ca,gi,Wh,Oq,sO,iO,Nq,bq,x_,oO,G_,Vt,aO,gq,yq,roe,noe,Rq,Yc=Ne(()=>{Xg();nO=q(Kh()),Hs=require("msgpackr"),Ca=require("cbor-x"),gi=require("zlib"),Wh=require("stream");fr();Oq=require("../index"),sO=q(J()),iO=q(w()),Nq=q(require("yaml")),bq=sO.default.get(iO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,x_=bq?fa:JSON.stringify,oO=bq?Jg:JSON.parse,G_={useRecords:!1,useToJSON:!0},Vt=new Map,aO=Vt;it.contentTypes=aO;(0,Oq._assignPackageExport)("contentTypes",aO);Vt.set("application/json",{serializeStream:Qu,serialize:x_,deserialize:oO,q:.8});gq=new Ca.Encoder(G_);Vt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ca.EncoderStream(G_).end(e)},serialize:gq.encode,deserialize:gq.decode,q:1});Vt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Wh.Readable.from((0,Hs.encodeIter)(e,G_)):(0,Hs.pack)(e)},serialize:Hs.pack,deserialize:Hs.unpack,q:.9});Vt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,nO.toCsvStream)(e,e?.getColumns?.())},q:.1});Vt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Vt.set("text/yaml",{serialize(e){return Nq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Vt.set("text/event-stream",{serializeStream:function(e){return Wh.Readable.from(ioe(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
|
+
`,""):null}catch(f){f.stderr?i[l].npm_error=hH(f.stderr):i[l].npm_error=f.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return Qc.info(`finished installModules with response ${i}`),i}a(fse,"installModules");function hH(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
|
|
17
|
+
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(hH,"parseNPMStdErr");async function Ese(e){Qc.info(`starting auditModules for request: ${e}`);let t=mH(e);if(t)throw Kc(t,t.message,Wc.BAD_REQUEST);let{projects:r}=e;await Dh(),await pH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Lh.join(vA,o);n[o]={npm_output:null,npm_error:null};try{let l=await L_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=hH(l.stderr)}}return Qc.info(`finished auditModules with response ${n}`),n}a(Ese,"auditModules");async function Dh(){try{return await L_("npm -v"),!0}catch{throw Kc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Wc.BAD_REQUEST,void 0,void 0,!0)}}a(Dh,"checkNPMInstalled");async function pH(e){if(!Array.isArray(e)||e.length===0)throw Kc(new Error,"projects argument must be an array with at least 1 element",Wc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Lh.join(vA,i.toString());if(!await dH.pathExists(o)){t.push(i);continue}let l=Lh.join(o,"package.json");await dH.pathExists(l)||r.push(i)}if(t.length>0)throw Kc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Wc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Kc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Wc.BAD_REQUEST,void 0,void 0,!0)}a(pH,"checkProjectPaths");function mH(e){let t=Ch.object({projects:Ch.array().min(1).items(Ch.string()).required(),dry_run:Ch.boolean().default(!1)});return cse.validateBySchema(e,t)}a(mH,"modulesValidator")});var HA=g((BOe,OH)=>{"use strict";var jc=require("fs-extra"),BA=require("path"),Mh=G(),TH=W(),Uh=C(),AH=J(),hse=Et();OH.exports=pse;async function pse(){let e=mse(),t=AH.get(Uh.CONFIG_PARAMS.ROOTPATH),r=BA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Uh.PACKAGE_ROOT}},s=BA.join(t,"node_modules");await jc.ensureDir(s);let i,o=!0,c=!1;try{i=await jc.readJson(r)}catch(l){if(TH.isEmptyOrZeroLength(e))return;if(l.code!==Uh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!TH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await gH(_);n.dependencies[l]=u+_}if(!o){Mh.notify("Installing components"),await RH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await gH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Mh.notify("Removing component",l),c=!0);c&&(Mh.notify("Updating components."),await RH(r,n,i))}a(pse,"installComponents");function mse(){let e=hse.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(mse,"getComponentsConfig");async function gH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":BA.extname(e)||await jc.pathExists(e)?"file:":"github:"}a(gH,"getPkgPrefix");async function RH(e,t,r){Mh.trace("npm installing components package.json",t),await jc.writeFile(e,JSON.stringify(t,null," "));try{await Ph().installAllRootModules(AH.get(Uh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await jc.writeFile(e,JSON.stringify(r,null," ")):await jc.unlink(e),n}}a(RH,"installPackages")});var vh=g((xOe,IH)=>{"use strict";var Ye=require("fs-extra"),qA=require("fast-glob"),ge=require("path"),bH=require("tar-fs"),qOe=require("uuid").v4,xA=require("normalize-path"),vs=_H(),vt=G(),Je=C(),Ot=J(),D_=Et(),Sse=W(),{PACKAGE_ROOT:Tse}=C(),{handleHDBError:$t,hdb_errors:gse}=se(),{basename:Rse}=require("path"),Ase=HA(),yH=J(),Ose=C(),{Readable:Nse}=require("stream"),{isMainThread:bse}=require("worker_threads"),{HDB_ERROR_MSGS:Ia,HTTP_STATUS_CODES:Vt}=gse,yse=ge.join(Tse,"application-template"),NH=ge.join(Ot.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Ise(){vt.trace("getting custom api status");let e={};try{e={port:Ot.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw $t(new Error,Ia.FUNCTION_STATUS,Vt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(Ise,"customFunctionsStatus");function wse(){vt.trace("getting custom api endpoints");let e={},t=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{qA.sync(xA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:qA.sync(xA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qA.sync(xA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw $t(new Error,Ia.GET_FUNCTIONS,Vt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(wse,"getCustomFunctions");function Cse(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=ge.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw $t(new Error,Ia.GET_FUNCTION,Vt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Cse,"getCustomFunction");function Lse(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=vs.setCustomFunctionValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);vt.trace("setting custom function file content");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(ge.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw $t(new Error,Ia.SET_FUNCTION,Vt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Lse,"setCustomFunction");function Dse(e){e.project&&(e.project=ge.parse(e.project).name),e.file&&(e.file=ge.parse(e.file).name);let t=vs.getDropCustomFunctionValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);vt.trace("dropping custom function file");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(ge.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw $t(new Error,Ia.DROP_FUNCTION,Vt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(Dse,"dropCustomFunction");function Pse(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.addComponentValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);vt.trace("adding component");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=ge.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(yse,s),`Successfully added project: ${n}`}catch(s){throw $t(new Error,Ia.ADD_FUNCTION,Vt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(Pse,"addComponent");function Mse(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.dropCustomFunctionProjectValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);vt.trace("dropping custom function project");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ot.get(Je.CONFIG_PARAMS.APPS);if(!Sse.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return D_.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=ge.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw $t(new Error,Ia.DROP_FUNCTION_PROJECT,Vt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(Mse,"dropCustomFunctionProject");async function Use(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.packageComponentValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Ye.realpath(ge.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ye.ensureDir(NH);let i=ge.join(NH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(ge.join(s,"node_modules"))}),bH.pack(s,o).pipe(Ye.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ye.readFileSync(i,{encoding:"base64"});return await Ye.remove(i),{project:n,payload:c}}a(Use,"packageComponent");async function vse(e){e.project&&(e.project=ge.parse(e.project).name);let t=vs.deployComponentValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=ge.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=Nse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe(bH.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(ge.join(o,"package"),o),await Ye.remove(ge.join(o,"package")))}if(await D_.addConfig(n,{package:i}),!s){await Ase();let f=yH.get(Ose.CONFIG_PARAMS.ROOTPATH);o=ge.join(f,"node_modules",n)}if(bse)return;let c=new Map;c.isWorker=!0;let l=(Hh(),ie(Bh)),_;l.setErrorReporter(f=>_=f);let u=Rse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return vt.info("Installed component"),`Successfully deployed: ${n}`}a(vse,"deployComponent");async function Bse(){let e=D_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ye.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=ge.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ye.stat(d),E={name:ge.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return vt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(ge.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(ge.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Hh(),ie(Bh)).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 n}a(Bse,"getComponents");async function Hse(e){let t=vs.getComponentFileValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let n=D_.getConfigObj()[e.project]||e.project==="harperdb"?ge.join(yH.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(ge.join(n,e.project,e.file));return{message:await Ye.readFile(ge.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${ge.join(e.project,e.file)}'`):i}}a(Hse,"getComponentFile");async function qse(e){let t=vs.setComponentFileValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ye.ensureFile(n),await Ye.outputFile(n,e.payload,r)):await Ye.ensureDir(n),"Successfully set component: "+e.file}a(qse,"setComponentFile");async function xse(e){let t=vs.dropComponentFileValidator(e);if(t)throw $t(t,t.message,Vt.BAD_REQUEST);let r=e.file?ge.join(e.project,e.file):e.project,n=ge.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),D_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(xse,"dropComponent");IH.exports={customFunctionsStatus:Ise,getCustomFunctions:wse,getCustomFunction:Cse,setCustomFunction:Lse,dropCustomFunction:Dse,addComponent:Pse,dropCustomFunctionProject:Mse,packageComponent:Use,deployComponent:vse,getComponents:Bse,getComponentFile:Hse,setComponentFile:qse,dropComponent:xse}});var GA=g((FOe,CH)=>{"use strict";var Bs=require("joi"),wH=rt();CH.exports={readTransactionLogValidator:Gse,deleteTransactionLogsBeforeValidator:Fse};function Gse(e){let t=Bs.object({schema:Bs.string().required(),table:Bs.string().required(),from:Bs.date().timestamp(),to:Bs.date().timestamp(),limit:Bs.number().min(1)});return wH.validateBySchema(e,t)}a(Gse,"readTransactionLogValidator");function Fse(e){let t=Bs.object({schema:Bs.string().required(),table:Bs.string().required(),timestamp:Bs.date().timestamp().required()});return wH.validateBySchema(e,t)}a(Fse,"deleteTransactionLogsBeforeValidator")});var xh=g(($Oe,UH)=>{"use strict";var FA=C(),qh=ht(),LH=W(),DH=J(),PH=ci(),{handleHDBError:zc,hdb_errors:kse}=se(),{HTTP_STATUS_CODES:Jc}=kse,{readTransactionLogValidator:$se,deleteTransactionLogsBeforeValidator:Vse}=GA(),MH="This operation relies on clustering and cannot run with it disable.",Yse="Logs successfully deleted from transaction log.",Kse="All logs successfully deleted from transaction log.";UH.exports={readTransactionLog:Wse,deleteTransactionLogsBefore:Qse};async function*Wse(e){let t=$se(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST,void 0,void 0,!0);if(!DH.get(FA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw zc(new Error,MH,Jc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=LH.checkSchemaTableExist(r,n);if(s)throw zc(new Error,s,Jc.NOT_FOUND,void 0,void 0,!0);let i=PH.createNatsTableStreamName(r,n),o=await qh.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===FA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Wse,"readTransactionLog");async function Qse(e){let t=Vse(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST,void 0,void 0,!0);if(!DH.get(FA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw zc(new Error,MH,Jc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=LH.checkSchemaTableExist(r,n);if(i)throw zc(new Error,i,Jc.NOT_FOUND,void 0,void 0,!0);let o=PH.createNatsTableStreamName(r,n),{jsm:c}=await qh.getNATSReferences(),l=await qh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=Yse,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=Kse):d=(await qh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Qse,"deleteTransactionLogsBefore")});var BH=g((YOe,vH)=>{"use strict";var kA=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};vH.exports=kA});var qH=g((WOe,HH)=>{"use strict";var $A=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};HH.exports=$A});var YA=g((jOe,GH)=>{"use strict";var xH=BH(),jse=qH(),{HDB_ERROR_MSGS:zse}=Kr(),VA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=zse.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new xH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new jse(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new xH(r,n,[],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}};GH.exports=VA});var $h=g((JOe,rq)=>{"use strict";var KA=Or(),Gh=Ar(),Hn=HE(),U_=ji(),WA=ta(),Jse=ER(),Xse=tv(),v_=yr(),Fh=FE(),Bt=G(),Zse=bR(),eie=u_(),tie=oA(),rie=th(),nie=nh(),sie=aA(),iie=oh(),oie=ch(),QA=uh(),Si=W(),aie=JB(),jA=dh(),$H=Na(),Bn=C(),VH=z0(),cie=_i(),YH=o_(),KH=(Ih(),ie(y_)),WH=Et(),En=vh(),lie=require("alasql"),QH=xh(),jH=Ph(),zH=YA(),{handleHDBError:Hr,hdb_errors:JH}=se(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:P_}=JH,$=new Map,XH="delete",ho="insert",Ti="read",wa="update",M_="describe",FH=U_.describeSchema.name,kH=U_.describeTable.name,ZH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},uie="catchup",_ie="handleGetJob",die="handleGetJobsByStartDate",kh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},fie=[Hn.createTable.name,Hn.createAttribute.name,Hn.dropTable.name,Hn.dropAttribute.name],eq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},j=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};$.set(KA.insert.name,new j(!1,[ho]));$.set(KA.update.name,new j(!1,[wa]));$.set(KA.upsert.name,new j(!1,[ho,wa]));$.set(Gh.searchByConditions.name,new j(!1,[Ti]));$.set(Gh.searchByHash.name,new j(!1,[Ti]));$.set(Gh.searchByValue.name,new j(!1,[Ti]));$.set(Gh.search.name,new j(!1,[Ti]));$.set(Hn.createSchema.name,new j(!0,[]));$.set(Hn.createTable.name,new j(!0,[]));$.set(Hn.createAttribute.name,new j(!1,[ho]));$.set(Hn.dropSchema.name,new j(!0,[]));$.set(Hn.dropTable.name,new j(!0,[]));$.set(Hn.dropAttribute.name,new j(!0,[]));$.set(U_.describeSchema.name,new j(!1,[Ti]));$.set(U_.describeTable.name,new j(!1,[Ti]));$.set(WA.deleteRecord.name,new j(!1,[XH]));$.set(v_.addUser.name,new j(!0,[]));$.set(v_.alterUser.name,new j(!0,[]));$.set(v_.dropUser.name,new j(!0,[]));$.set(v_.listUsersExternal.name,new j(!0,[]));$.set(Fh.listRoles.name,new j(!0,[]));$.set(Fh.addRole.name,new j(!0,[]));$.set(Fh.alterRole.name,new j(!0,[]));$.set(Fh.dropRole.name,new j(!0,[]));$.set(Zse.name,new j(!0,[]));$.set(eie.name,new j(!0,[]));$.set(tie.name,new j(!0,[]));$.set(rie.name,new j(!0,[]));$.set(nie.name,new j(!0,[]));$.set(sie.name,new j(!0,[]));$.set(QA.setRoutes.name,new j(!0,[]));$.set(QA.getRoutes.name,new j(!0,[]));$.set(QA.deleteRoutes.name,new j(!0,[]));$.set(WH.setConfiguration.name,new j(!0,[]));$.set(iie.clusterStatus.name,new j(!0,[]));$.set(oie.name,new j(!0,[]));$.set(jA.getFingerprint.name,new j(!0,[]));$.set(jA.setLicense.name,new j(!0,[]));$.set(WA.deleteFilesBefore.name,new j(!0,[]));$.set(WA.deleteAuditLogsBefore.name,new j(!0,[]));$.set($H.restart.name,new j(!0,[]));$.set($H.restartService.name,new j(!0,[]));$.set(Jse.name,new j(!0,[]));$.set(Xse.name,new j(!0,[Ti]));$.set(cie.systemInformation.name,new j(!0,[]));$.set(WH.getConfiguration.name,new j(!0,[]));$.set(QH.readTransactionLog.name,new j(!0,[]));$.set(QH.deleteTransactionLogsBefore.name,new j(!0,[]));$.set(jH.installModules.name,new j(!0,[]));$.set(jH.auditModules.name,new j(!0,[]));$.set(YH.createTokens.name,new j(!1,[]));$.set(YH.refreshOperationToken.name,new j(!1,[]));$.set(KH.login.name,new j(!1,[]));$.set(KH.logout.name,new j(!1,[]));$.set(En.customFunctionsStatus.name,new j(!0,[]));$.set(En.getCustomFunctions.name,new j(!0,[]));$.set(En.getComponents.name,new j(!0,[]));$.set(En.getComponentFile.name,new j(!0,[]));$.set(En.setComponentFile.name,new j(!0,[]));$.set(En.dropComponent.name,new j(!0,[]));$.set(En.getCustomFunction.name,new j(!0,[]));$.set(En.setCustomFunction.name,new j(!0,[]));$.set(En.dropCustomFunction.name,new j(!0,[]));$.set(En.addComponent.name,new j(!0,[]));$.set(En.dropCustomFunctionProject.name,new j(!0,[]));$.set(En.packageComponent.name,new j(!0,[]));$.set(En.deployComponent.name,new j(!0,[]));$.set(jA.getRegistrationInfo.name,new j(!1,[]));$.set(v_.userInfo.name,new j(!1,[]));$.set(U_.describeAll.name,new j(!1,[]));$.set(_ie,new j(!1,[]));$.set(die,new j(!0,[]));$.set(uie,new j(!0,[]));$.set(kh.CSV_DATA_LOAD,new j(!1,[ho,wa]));$.set(kh.CSV_URL_LOAD,new j(!1,[ho,wa]));$.set(kh.CSV_FILE_LOAD,new j(!1,[ho,wa]));$.set(kh.IMPORT_FROM_S3,new j(!1,[ho,wa]));$.set(eq.EXPORT_TO_S3,new j(!0,[]));$.set(eq.EXPORT_LOCAL,new j(!0,[]));$.set(Bn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[XH]));$.set(Bn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Ti]));$.set(Bn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[ho]));$.set(Bn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[wa]));rq.exports={verifyPerms:hie,verifyPermsAst:Eie,verifyBulkLoadAttributePerms:mie};function Eie(e,t,r){if(Si.isEmptyOrZeroLength(e))throw Bt.info("verify_perms_ast has an empty user parameter"),Hr(new Error);if(Si.isEmptyOrZeroLength(t))throw Bt.info("verify_perms_ast has an empty user parameter"),Hr(new Error);if(Si.isEmptyOrZeroLength(r))throw Bt.info("verify_perms_ast has a null operation parameter"),Hr(new Error);try{let n=new zH,s=new aie(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Bt.info("No schemas defined in verifyPermsAst(), will not continue."),Hr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&ZH[r])throw Hr(new Error,Xt.DROP_SYSTEM,P_.FORBIDDEN);if(c&&!l)return null;let _=VH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof lie.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=tq(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),m=JA(t.role.permission,f,d[E]);zA(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Hr(n)}}a(Eie,"verifyPermsAst");function hie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Bt.info("null required parameter in verifyPerms"),Hr(new Error,Xt.DEFAULT_INVALID_REQUEST,P_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new zH;if(Si.isEmptyOrZeroLength(e.hdb_user.role)||Si.isEmptyOrZeroLength(e.hdb_user.role.permission))return Bt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Xt.USER_HAS_NO_PERMS(e.hdb_user.username));let l=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,u=o.has(Bn.SYSTEM_SCHEMA_NAME)||s===Bn.SYSTEM_SCHEMA_NAME;if(u&&ZH[r])throw Hr(new Error,Xt.DROP_SYSTEM,P_.FORBIDDEN);if(l&&!u||_===!0&&(r===Hn.createSchema.name||r===Hn.dropSchema.name))return null;if(fie.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=VH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===FH||r===kH){if(s===Bn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Xt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===FH&&(!d[s]||!d[s][M_]))return c.handleInvalidItem(Xt.SCHEMA_NOT_FOUND(s));if(r===kH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][M_]))return c.handleInvalidItem(Xt.TABLE_NOT_FOUND(s,i))}}let f=tq(e.hdb_user,r,o,c,n);if(f)return f;if($.get(r)&&$.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Bn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Bn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Bn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=m)}let E=pie(e),h=JA(e.hdb_user.role.permission,s,i);return zA(E,h,r,i,s,c,n),c.getPermsResponse()}a(hie,"verifyPerms");function tq(e,t,r,n,s){if(Si.arrayHasEmptyValues([e,t,r]))throw Bt.info("hasPermissions has an invalid parameter"),Hr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||$.get(t).requires_su))return null;if(!$.get(t))throw Bt.info(`operation ${t} not found.`),Hr(new Error,Xt.OP_NOT_FOUND(t),P_.BAD_REQUEST);if($.get(t)&&$.get(t).requires_su)return Bt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Xt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][M_]===!1){n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Xt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[M_]===!1)n.addInvalidItem(Xt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=$.get(t).perms;!Si.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Bt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Xt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Bt.error(E),Bt.error(f),Hr(JH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(tq,"hasPermissions");function zA(e,t,r,n,s,i,o){if(!e||!t)throw Bt.info("no attributes specified in checkAttributePerms."),Hr(new Error);let c=$.get(r).perms;if(!c||c==="")throw Bt.info(`no permissions found for ${r} in checkAttributePerms().`),Hr(new Error);if(Si.isEmptyOrZeroLength(t))return Bt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[M_]===!1){i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Bn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ti)throw Hr(new Error,Xt.SYSTEM_TIMESTAMP_PERMS_ERR,P_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(zA,"checkAttributePerms");function pie(e){let t=new Set;try{if(e.action)return t;if(e.operation===Bn.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 n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Bt.info(r)}return t}a(pie,"getRecordAttributes");function JA(e,t,r){let n=new Map;if(Si.isEmpty(e))return Bt.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Bt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(JA,"getAttributePermissions");function mie(e,t,r,n,s,i,o){let c=new Set(i),l=JA(e,n,s);zA(c,l,t,s,n,o,r)}a(mie,"verifyBulkLoadAttributePerms")});var Yh=g((ZOe,aq)=>{"use strict";aq.exports={evaluateSQL:Lie,processAST:oq,convertSQLToAST:iq,checkASTPermissions:sq};var Sie=Or(),nq=require("util"),Tie=nq.callbackify(Sie.insert),gie=Ar().search,Rie=dU().update,Aie=nq.callbackify(Rie),Oie=EU().convertDelete,po=require("alasql"),Nie=$h(),Vh=G(),bie=Gf(),yie=W(),B_=C(),{hdb_errors:Iie,handleHDBError:XA}=se(),{HTTP_STATUS_CODES:ZA}=Iie;bie(po);var wie=403,Cie="There was a problem performing this insert. Please check the logs and try again.",eO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Lie(e,t){let r=e.parsed_sql_object;if(!r){r=iq(e.sql);let n,s=r.ast.statements[0];if(s instanceof po.yy.Insert?n=s.into.databaseid:s instanceof po.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof po.yy.Update||s instanceof po.yy.Delete?n=s.table.databaseid:Vh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof po.yy.Select)&&yie.isEmptyOrZeroLength(n))return t("No schema specified",null)}oq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Lie,"evaluateSQL");function sq(e,t){let r;try{r=Nie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(sq,"checkASTPermissions");function iq(e){let t=new eO;if(!e)throw XA(new Error,"The 'sql' parameter is missing from the request body",ZA.BAD_REQUEST);try{let r=e.trim(),n=po.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
18
|
+
`);throw n[1]?XA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ZA.BAD_REQUEST):XA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ZA.BAD_REQUEST)}return t}a(iq,"convertSQLToAST");function oq(e,t,r){try{let n=Die;if(!e.bypass_auth&&!t.permissions_checked){let i=sq(e,t);if(i&&i.length>0)return r(wie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case B_.VALID_SQL_OPS_ENUM.SELECT:n=gie,s=t.ast.statements[0];break;case B_.VALID_SQL_OPS_ENUM.INSERT:n=Pie;break;case B_.VALID_SQL_OPS_ENUM.UPDATE:n=Aie;break;case B_.VALID_SQL_OPS_ENUM.DELETE:n=Oie;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(oq,"processAST");function Die(e,t){Vh.info(e),t("unknown sql statement")}a(Die,"nullFunction");function Pie({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=Mie(i,e.values)}catch(o){return r(o)}Tie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Vh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Pie,"convertInsert");function Mie(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=po.compile(`SELECT ${s.toString()} AS [${B_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Vh.error(r),new Error(Cie)}}a(Mie,"createDataObjects")});var tO=g((tNe,lq)=>{"use strict";var{S3:Uie,GetObjectCommand:vie}=require("@aws-sdk/client-s3");lq.exports={getFileStreamFromS3:Bie,getS3AuthObj:cq};async function Bie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await cq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new vie(r))).Body}a(Bie,"getFileStreamFromS3");function cq(e,t,r){return new Uie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(cq,"getS3AuthObj")});var Kh=g((nNe,Sq)=>{"use strict";var nO=Ar(),Hie=Yh(),qie=tO(),{AsyncParser:xie,Transform:Gie}=require("json2csv"),q_=require("stream"),hn=W(),rO=require("fs-extra"),Fie=require("path"),qn=G(),{promisify:dq}=require("util"),H_=W(),{handleHDBError:Nt,hdb_errors:kie}=se(),{HDB_ERROR_MSGS:qr,HTTP_STATUS_CODES:bt}=kie,{streamAsJSON:$ie}=(Zg(),ie(aU)),{Upload:Vie}=require("@aws-sdk/lib-storage"),uq=["search_by_value","search_by_hash","sql","search_by_conditions"],_q=["json","csv"],fq="json",Eq="csv",Yie="Successfully exported JSON locally.",Kie="Successfully exported CSV locally.",Wie=1e3,Qie=nO.searchByHash,jie=nO.searchByValue,zie=dq(Hie.evaluateSQL),Jie=dq(q_.finished);Sq.exports={export_to_s3:toe,export_local:Xie,toCsvStream:hq};async function Xie(e){qn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=pq(e);if(!hn.isEmpty(t))throw qn.error(t),Nt(new Error,t,bt.BAD_REQUEST,void 0,void 0,!0);if(hn.isEmpty(e.path))throw qn.error(qr.MISSING_VALUE("path")),Nt(new Error,qr.MISSING_VALUE("path"),bt.BAD_REQUEST,void 0,void 0,!0);let r=(hn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Fie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hn.buildFolderPath(e.path,r);await Zie(e.path);let s=await mq(e);return await eoe(n,e.format,s)}a(Xie,"export_local");async function Zie(e){if(qn.trace("in confirmPath"),hn.isEmptyOrZeroLength(e))throw Nt(new Error,`Invalid path: ${e}`,bt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await rO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,qn.error(n),Nt(new Error,n,bt.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 qn.error(r),Nt(new Error,r,bt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Zie,"confirmPath");async function eoe(e,t,r){if(qn.trace("in saveToLocal"),H_.isEmptyOrZeroLength(e))throw Nt(new Error,qr.INVALID_VALUE("file_path"),bt.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmptyOrZeroLength(t))throw Nt(new Error,qr.INVALID_VALUE("Source format"),bt.BAD_REQUEST,void 0,void 0,!0);if(H_.isEmpty(r))throw Nt(new Error,qr.NOT_FOUND("Data"),bt.BAD_REQUEST,void 0,void 0,!0);if(t===fq){let n=rO.createWriteStream(e);return $ie(r).pipe(n),await Jie(n),{message:Yie,path:e}}else if(t===Eq){let n=rO.createWriteStream(e),s=q_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new xie(i,c).fromInput(s).toOutput(n).promise(!1),{message:Kie,path:e}}throw Nt(new Error,qr.INVALID_VALUE("format"),bt.BAD_REQUEST)}a(eoe,"saveToLocal");async function toe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Nt(new Error,qr.MISSING_VALUE("S3 object"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Nt(new Error,qr.MISSING_VALUE("aws_access_key_id"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Nt(new Error,qr.MISSING_VALUE("aws_secret_access_key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.bucket))throw Nt(new Error,qr.MISSING_VALUE("bucket"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.key))throw Nt(new Error,qr.MISSING_VALUE("key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.region))throw Nt(new Error,qr.MISSING_VALUE("region"),bt.BAD_REQUEST);let t=pq(e);if(!hn.isEmpty(t))throw Nt(new Error,t,bt.BAD_REQUEST);qn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await mq(e)}catch(l){throw qn.error(l),l}let n,s=await qie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new q_.PassThrough;if(e.format===Eq){i=e.s3.key+".csv";let l=hq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===fq){i=e.s3.key+".json";let l=new q_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%Wie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Nt(new Error,qr.INVALID_VALUE("format"),bt.BAD_REQUEST);return new Vie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(toe,"export_to_s3");function hq(e,t){let r=q_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Gie(n,s);return r.pipe(i)}a(hq,"toCsvStream");function pq(e){if(qn.trace("in exportCoreValidation"),hn.isEmpty(e.format))return"format missing";if(_q.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${_q.join(", ")}`;let t=e.search_operation.operation;if(hn.isEmpty(t))return"search_operation.operation missing";if(uq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${uq.join(", ")}`}a(pq,"exportCoreValidation");async function mq(e){qn.trace("in getRecords");let t,r;if(H_.isEmpty(e.search_operation)||H_.isEmptyOrZeroLength(e.search_operation.operation))throw Nt(new Error,qr.INVALID_VALUE("Search operation"),bt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=jie;break;case"search_by_hash":t=Qie;break;case"search_by_conditions":t=nO.searchByConditions;break;case"sql":t=zie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,qn.error(r),Nt(new Error,r,bt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(mq,"getRecords")});var yq={};$e(yq,{contentTypes:()=>cO,findBestSerializer:()=>Qh,getDeserializer:()=>La,registerContentHandlers:()=>lO,serialize:()=>jh,serializeMessage:()=>Eo});function roe(e){try{return e?.[0]===123?aO(e):e}catch{return e}}function lO(e){e.register(soe,{serializers:[{regex:/^application\/json$/,serializer:Qu},{regex:/^application\/cbor$/,serializer:function(t){return new Ca.EncoderStream(G_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Wh.Readable.from((0,Hs.encodeIter)(t,G_)):(0,Hs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Hs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ca.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Qh(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Yt.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Yt.keys()).join(", "))}};n=Yt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function jh(e,t,r){let n=gq&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=Qh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,gi.createBrotliCompress)({params:{[gi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?gi.constants.BROTLI_MODE_TEXT:gi.constants.BROTLI_MODE_GENERIC,[gi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>gq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,gi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Eo(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return x_(e);let r=t.serialize;if(r)return r(e);let n=Qh(t);return r=t.serialize=n.serializer.serialize,r(e)}function ioe(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function La(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Yt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Yt.get(e)?.deserialize||Rq(e,n);return o=>ioe(o).then(i)}return e&&Yt.get(e)?.deserialize||Rq(e,n)}function Rq(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return aO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function ooe(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}var sO,Hs,Ca,gi,Wh,Aq,iO,oO,Oq,Nq,x_,aO,G_,Yt,cO,Tq,bq,noe,soe,gq,Yc=Ne(()=>{Zg();sO=q(Kh()),Hs=require("msgpackr"),Ca=require("cbor-x"),gi=require("zlib"),Wh=require("stream");Er();Aq=require("../index"),iO=q(J()),oO=q(C()),Oq=q(require("yaml")),Nq=iO.default.get(oO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,x_=Nq?fa:JSON.stringify,aO=Nq?Xg:JSON.parse,G_={useRecords:!1,useToJSON:!0},Yt=new Map,cO=Yt;it.contentTypes=cO;(0,Aq._assignPackageExport)("contentTypes",cO);Yt.set("application/json",{serializeStream:Qu,serialize:x_,deserialize:aO,q:.8});Tq=new Ca.Encoder(G_);Yt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Ca.EncoderStream(G_).end(e)},serialize:Tq.encode,deserialize:Tq.decode,q:1});Yt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Wh.Readable.from((0,Hs.encodeIter)(e,G_)):(0,Hs.pack)(e)},serialize:Hs.pack,deserialize:Hs.unpack,q:.9});Yt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,sO.toCsvStream)(e,e?.getColumns?.())},q:.1});Yt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Yt.set("text/yaml",{serialize(e){return Oq.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Yt.set("text/event-stream",{serializeStream:function(e){return Wh.Readable.from(ooe(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+`
|
|
19
19
|
`),e.data){let r=e.data;typeof r=="object"&&(r=x_(r)),t+="data: "+r+`
|
|
20
20
|
`}return e.id&&(t+="id: "+e.id+`
|
|
21
21
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
|
|
25
25
|
`:`data: ${e}
|
|
26
26
|
|
|
27
|
-
`},compressible:!1,q:.8});Vt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});yq={type:"application/json",serializeStream:Qu,serialize:x_,deserialize:toe,q:.8};Vt.set("*/*",yq);Vt.set("",yq);a(toe,"tryJSONParse");a(cO,"registerContentHandlers");roe=require("fastify-plugin"),noe=roe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Qh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(Qh,"findBestSerializer");Rq=sO.default.get(iO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(jh,"serialize");a(Eo,"serializeMessage");a(soe,"streamToBuffer");a(La,"getDeserializer");a(Aq,"deserializerUnknownType");a(ioe,"transformIterable")});function Pq(e){let t={openapi:ooe,info:{title:"HarperDB HTTP REST interface",version:(0,Dq.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:R,name:U,elements:B,relationship:v,definition:P}of o){if(v)R==="array"?_[U]={type:"array",items:{$ref:mo+B.type}}:_[U]={$ref:mo+R};else{let V=P??B?.definition;if(V){if(!t.components.schemas[V.type]){let Y={};V.properties.forEach(z=>{Y[z.name]=new dO(lO[z.type],z.type)}),t.components.schemas[V.type]=new Lq(Y)}R==="array"?_[U]={type:"array",items:{$ref:mo+V.type}}:_[U]={$ref:mo+V.type}}else R==="array"?B.type==="Any"||B.type=="ID"?_[U]={type:"array",items:{format:B.type}}:_[U]={type:"array",items:new dO(lO[B.type],B.type)}:R==="Any"||R=="ID"?_[U]={format:R}:_[U]=new dO(lO[R],R)}u.push(new fO(U,"query",_[U]))}let d=Object.keys(_),f=new fO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new fO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new Lq(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",A=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new aoe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new uO(u,r,{200:new _O({$ref:mo+i})},"search for records by the specified property name and value pairs")),A&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Cq(u,r,"delete all the records that match the provided query",{204:new wq})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new uO([f],r,{200:new _O({$ref:mo+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new coe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),A&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Cq([f],r,"delete a record with the given primary key",{204:new wq})),S&&E.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new uO([f,E],r,{200:new _O({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function aoe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:mo+e}}}},this.security=t,this.responses={200:{description:EO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function uO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function _O(e){this.description=EO,this.content={"application/json":{schema:e}}}function wq(){this.description="successfully processed request, no content returned to client"}function coe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:mo+r}}}},this.responses={200:{description:EO}}}function Cq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Lq(e){this.type="object",this.properties=e}function dO(e,t){this.type=e,this.format=t}function fO(e,t,r){this.name=e,this.in=t,this.schema=r}var Dq,ooe,lO,mo,EO,Mq=Ne(()=>{Dq=q(Gi()),ooe="3.0.3",lO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},mo="#/components/schemas/",EO="successful operation";a(Pq,"generateJsonApi");a(aoe,"Post");a(uO,"Get");a(_O,"Response200");a(wq,"Response204");a(coe,"Put");a(Cq,"Delete");a(Lq,"ResourceSchema");a(dO,"Type");a(fO,"Parameter")});var Jh={};$e(Jh,{start:()=>_oe});async function uoe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&cf(e);let s=new to;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Uq){let h=zh.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=La(r["content-type"],!0)(e.body)}catch(h){throw new Xc.ClientError(h,400)}if(e.authorize=!0,i===Uq&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Pq(zh);throw new Xc.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Xc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Xc.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,hO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){loe[0]=d;let h=String.fromCharCode(34,(Xt[0]&63)+62,(Xt[0]>>6)+(Xt[1]<<2&63)+62,(Xt[1]>>4)+(Xt[2]<<4&63)+62,(Xt[2]>>2)+62,(Xt[3]&63)+62,(Xt[3]>>6)+(Xt[4]<<2&63)+62,(Xt[4]>>4)+(Xt[5]<<4&63)+62,(Xt[5]>>2)+62,(Xt[6]&63)+62,(Xt[6]>>6)+(Xt[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),hO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=jh(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Da.warn(i):Da.info(i):Da.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=jh(i.contentType?i:i.toString(),e,o),o}}function _oe(e){hO=e,!vq&&(vq=!0,zh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return uoe(t,r)}),e.server.ws(async(t,r,n)=>{F_++;let s=new Kn;Bq||(Bq=!0,Du(u=>{F_>0&&u.push({metric:"ws-connections",connections:F_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Da.warn(u)});let o;t.on("message",a(function(d){o||(o=La(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{F_--,Cn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=zh.getMatch(l);if(Cn(!!_,"connection","ws","connect"),!_)t.send(Eo(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,nn(h=>({count:h.count,total:F_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ze(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Eo(E.value,r);t.send(h),nn(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Da,Xc,Xt,loe,hO,Uq,vq,zh,Bq,F_,Hq=Ne(()=>{Yc();li();Da=q(G()),Xc=q(se());lf();Gl();$o();Mu();Mq();Xt=new Uint8Array(8),loe=new Float64Array(Xt.buffer,0,1),hO={},Uq="openapi";a(uoe,"http");F_=0;a(_oe,"start")});var pO=g((SNe,qq)=>{var{recordAction:Xh,recordActionBinary:doe}=(li(),ie(Pu)),foe=require("fastify-plugin"),Eoe=200;qq.exports=foe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),Xh(o,"duration",_,d,u),doe(s.raw.statusCode<400,"success",_,d,u);let f=Eoe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Xh(performance.now()-c,"transfer",_,d,u),Xh(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,Xh(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var AO=g((RNe,kq)=>{var rp=require("clone"),np=rt(),hoe=W(),ep=w(),TNe=G(),mO=require("fs"),TO=require("joi"),{string:tp}=TO.types(),{hdb_errors:poe,handleHDBError:Zh}=se(),{HDB_ERROR_MSGS:gNe,HTTP_STATUS_CODES:SO}=poe,{common_validators:Zc}=Os(),xq=" is required",moe=["insert","update","upsert"],gO={database:{presence:!1,format:Zc.schema_format,length:Zc.schema_length},schema:{presence:!1,format:Zc.schema_format,length:Zc.schema_length},table:{presence:!0,format:Zc.schema_format,length:Zc.schema_length},action:{inclusion:{within:moe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Soe={schema:tp.required(),table:tp.required(),action:tp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Toe,AWS_SECRET:goe,AWS_BUCKET:Roe,AWS_FILE_KEY:Aoe,REGION:Ooe}=ep.S3_BUCKET_AUTH_KEYS,Noe={s3:{presence:!0},[`s3.${Toe}`]:{presence:!0,type:"String"},[`s3.${goe}`]:{presence:!0,type:"String"},[`s3.${Roe}`]:{presence:!0,type:"String"},[`s3.${Aoe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Ooe}`]:{presence:!0,type:"String"}},Gq=rp(gO);Gq.data.presence={message:xq};var Fq=rp(gO);Fq.file_path.presence={message:xq};var boe=Object.assign(rp(gO),Noe),RO=rp(Soe);RO.csv_url=tp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();RO.passthrough_headers=TO.object();function yoe(e){let t=np.validateObject(e,Gq);return sp(e,t)}a(yoe,"dataObject");function Ioe(e){let t=np.validateBySchema(e,TO.object(RO));return sp(e,t)}a(Ioe,"urlObject");function woe(e){let t=np.validateObject(e,Fq);return sp(e,t)}a(woe,"fileObject");function Coe(e){let t=np.validateObject(e,boe);return sp(e,t)}a(Coe,"s3FileObject");function sp(e,t){if(!t){let r=hoe.checkGlobalSchemaTable(e.schema,e.table);if(r)return Zh(new Error,r,SO.BAD_REQUEST);if(e.operation===ep.OPERATIONS_ENUM.CSV_FILE_LOAD)try{mO.accessSync(e.file_path,mO.constants.R_OK|mO.constants.F_OK)}catch(n){return n.code===ep.NODE_ERROR_CODES.ENOENT?Zh(n,`No such file or directory ${n.path}`,SO.BAD_REQUEST):n.code===ep.NODE_ERROR_CODES.EACCES?Zh(n,`Permission denied ${n.path}`,SO.BAD_REQUEST):Zh(n)}}return t}a(sp,"postValidateChecks");kq.exports={dataObject:yoe,urlObject:Ioe,fileObject:woe,s3FileObject:Coe}});var OO=g((ONe,$q)=>{"use strict";var k_=G(),ip=w();async function Loe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===ip.OPERATIONS_ENUM.INSERT||t.operation===ip.OPERATIONS_ENUM.UPDATE||t.operation===ip.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ip.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(k_.info(i.message),i):i.http_resp_msg?(k_.error(`Error calling operation: ${e.name}`),k_.error(i.http_resp_msg),i):(k_.error(`Error calling operation: ${e.name}`),k_.error(i),i)}}a(Loe,"callOperationFunctionAsAwait");$q.exports={callOperationFunctionAsAwait:Loe}});var Yq=g((bNe,Vq)=>{"use strict";var NO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},bO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Vq.exports={BulkLoadFileObject:NO,BulkLoadDataObject:bO}});var Wq=g((INe,Kq)=>{"use strict";var yO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Kq.exports=yO});var PO=g((MNe,ux)=>{"use strict";var op=Ar(),cp=AO(),Doe=require("needle"),cs=w(),CNe=et(),el=W(),{handleHDBError:lt,hdb_errors:rx}=se(),{HTTP_STATUS_CODES:Zt,HDB_ERROR_MSGS:vt,CHECK_LOGS_WRAPPER:Ma}=rx,tl=G(),IO=require("papaparse");el.promisifyPapaParse();var ls=require("fs-extra"),Poe=require("path"),{chain:Qq}=require("stream-chain"),jq=require("stream-json/streamers/StreamArray"),zq=require("stream-json/utils/Batch"),Jq=require("stream-chain/utils/comp"),{finished:Xq}=require("stream"),Moe=J(),nx=OO(),Uoe=eO(),{BulkLoadFileObject:CO,BulkLoadDataObject:voe}=Yq(),LO=VA(),{verifyBulkLoadAttributePerms:sx}=$h(),LNe=Wq(),DNe=ht(),PNe=ci(),{databases:Boe}=(Re(),ie(Ge)),{coerceType:Hoe}=(pE(),ie(Pg)),Zq="No records parsed from csv file.",Pa=`${Moe.get("HDB_ROOT")}/tmp`,{schema_regex:qoe}=Os(),ex=1024*1024*2,tx=5e3,xoe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ux.exports={csvDataLoad:Goe,csvURLLoad:Foe,csvFileLoad:koe,importFromS3:$oe};async function Goe(e,t){let r=cp.dataObject(e);if(r)throw lt(r,r.message,Zt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=ax(e.schema,e.table),i=IO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:wO.bind(null,s),dynamicTyping:!1}),o=new LO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&sx(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 lt(new Error,c,Zt.BAD_REQUEST,void 0,void 0,!0);let l=new voe(e.action,e.schema,e.table,i.data);return n=await nx.callOperationFunctionAsAwait(cx,l,null),n.message===Zq?Zq:lx(n.records,n.number_written)}catch(s){throw Ua(s)}}a(Goe,"csvDataLoad");async function Foe(e){let t=cp.urlObject(e);if(t)throw lt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Pa}/${r}`;try{await Voe(e,r)}catch(s){throw tl.error(vt.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,Ma(vt.DOWNLOAD_FILE_ERR(r)))}try{let s=new CO(this.job_operation_function.name,e.action,e.schema,e.table,n,cs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await DO(s);return await ap(n),i}catch(s){throw await ap(n),Ua(s)}}a(Foe,"csvURLLoad");async function koe(e){let t=cp.fileObject(e);if(t)throw lt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);let r=new CO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,cs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await DO(r)}catch(n){throw Ua(n)}}a(koe,"csvFileLoad");async function $oe(e){let t=cp.s3FileObject(e);if(t)throw lt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Poe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Pa}/${s}`;let i=new CO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Yoe(s,e);let o=await DO(i);return await ap(r),o}catch(n){throw await ap(r),Ua(n)}}a($oe,"importFromS3");async function Voe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Doe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw lt(n,s,n.statusCode,cs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Woe(r,e.csv_url),await Koe(t,r.raw)}a(Voe,"downloadCSVFile");async function Yoe(e,t){try{let r=`${Pa}/${e}`;await ls.mkdirp(Pa),await ls.writeFile(`${Pa}/${e}`,"",{flag:"a+"});let n=await ls.createWriteStream(r),s=await Uoe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){tl.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw tl.error(vt.S3_DOWNLOAD_ERR+" - "+r),lt(r,Ma(vt.S3_DOWNLOAD_ERR))}}a(Yoe,"downloadFileFromS3");async function Koe(e,t){try{await ls.mkdirp(Pa),await ls.writeFile(`${Pa}/${e}`,t)}catch(r){throw tl.error(vt.WRITE_TEMP_FILE_ERR),lt(r,Ma(vt.DEFAULT_BULK_LOAD_ERR))}}a(Koe,"writeFileToTempFolder");async function ap(e){if(e)try{await ls.access(e),await ls.unlink(e)}catch{tl.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(ap,"deleteTempFile");function Woe(e,t){if(e.statusCode!==rx.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Zt.BAD_REQUEST);if(!xoe[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Zt.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Zt.BAD_REQUEST)}a(Woe,"validateURLResponse");async function DO(e){try{let t;switch(e.file_type){case cs.VALID_S3_FILE_TYPES.CSV:t=await Qoe(e);break;case cs.VALID_S3_FILE_TYPES.JSON:t=await joe(e);break;default:throw lt(new Error,vt.DEFAULT_BULK_LOAD_ERR,Zt.BAD_REQUEST,cs.LOG_LEVELS.ERROR,vt.INVALID_FILE_EXT_ERR(e))}return lx(t.records,t.number_written)}catch(t){throw Ua(t)}}a(DO,"fileLoad");async function ix(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await op.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&sx(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=lt(c);r(l)}}a(ix,"validateChunk");async function ox(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;el.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!el.isEmpty(c)&&!el.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await nx.callOperationFunctionAsAwait(cx,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=lt(c,Ma(vt.INSERT_CSV_ERR),Zt.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,vt.INSERT_CSV_ERR+" - "+c);r(l)}}a(ox,"insertChunk");async function Qoe(e){let t={records:0,number_written:0},r=ax(e.schema,e.table);try{let n=new LO,s=ls.createReadStream(e.file_path,{highWaterMark:ex});s.setEncoding("utf8"),await IO.parsePromise(s,ix.bind(null,e,n),wO.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,Zt.BAD_REQUEST);return s=ls.createReadStream(e.file_path,{highWaterMark:ex}),s.setEncoding("utf8"),await IO.parsePromise(s,ox.bind(null,e,t),wO.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,Ma(vt.PAPA_PARSE_ERR),Zt.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,vt.PAPA_PARSE_ERR+n)}}a(Qoe,"callPapaParse");function ax(e,t){let r=Boe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Hoe(i,s));return n}a(ax,"createTransformMap");function wO(e,t,r){let n=e.get(r);return n?n(t):el.autoCast(t)}a(wO,"typeFunction");async function joe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new LO,s=Qq([ls.createReadStream(e.file_path,{encoding:"utf-8"}),jq.withParser(),c=>c.value,new zq({batchSize:tx}),Jq(async c=>{await ix(e,n,r,c)})]);await new Promise((c,l)=>{Xq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,Zt.BAD_REQUEST);let o=Qq([ls.createReadStream(e.file_path,{encoding:"utf-8"}),jq.withParser(),c=>c.value,new zq({batchSize:tx}),Jq(async c=>{await ox(e,t,r,c)})]);return await new Promise((c,l)=>{Xq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw lt(n,Ma(vt.INSERT_JSON_ERR),Zt.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,vt.INSERT_JSON_ERR+n)}}a(joe,"insertJson");async function cx(e){let t={};try{e.data&&e.data.length>0&&zoe(e.data[0])?t=await Joe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",tl.info(t.message))}catch(r){throw Ua(r)}return t}a(cx,"callBulkFileLoad");function zoe(e){let t=Object.keys(e);for(let r of t)if(!qoe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(zoe,"validateColumnNames");async function Joe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=op.insert;break;case"update":i=op.update;break;case"upsert":i=op.upsert;break;default:throw lt(new Error,vt.INVALID_ACTION_PARAM_ERR(n),Zt.BAD_REQUEST,cs.LOG_LEVELS.ERROR,vt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){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 u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=el.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ua(o)}}a(Joe,"bulkFileLoad");function lx(e,t){return`successfully loaded ${t} of ${e} records`}a(lx,"buildResponseMsg");function Ua(e){return lt(e,Ma(vt.DEFAULT_BULK_LOAD_ERR),Zt.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,vt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ua,"buildTopLevelErrMsg")});var dx=g((vNe,_x)=>{"use strict";var MO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};_x.exports=MO});var hx=g((HNe,Ex)=>{"use strict";var Xoe=w(),fx=require("moment"),Zoe=require("uuid").v4,UO=class{static{a(this,"JobObject")}constructor(){this.id=Zoe(),this.type=void 0,this.start_datetime=fx().valueOf(),this.created_datetime=fx().valueOf(),this.end_datetime=void 0,this.status=Xoe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Ex.exports=UO});var vO=g((xNe,Rx)=>{"use strict";var eae=require("uuid").v4,Sx=Ar(),Tx=Rr(),tae=Xn(),rae=pc(),nae=dx(),ut=w(),sae=hx(),iae=VE(),xn=G(),oae=ru(),rl=W(),{promisify:aae}=require("util"),va=require("moment"),cae=Yh(),lp=AO(),px=WT(),{deleteTransactionLogsBeforeValidator:lae}=xA(),{handleHDBError:uae,hdb_errors:_ae}=se(),{HTTP_STATUS_CODES:dae}=_ae,mx=Tx.searchByValue,fae=Tx.searchByHash,Eae=Sx.insert,hae=aae(cae.evaluateSQL),pae=Sx.update;Rx.exports={addJob:Tae,updateJob:Rae,handleGetJob:mae,handleGetJobsByStartDate:Sae,getJobById:gx};async function mae(e){try{let t=await gx(e.id);return rl.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 xn.error("There was an error getting job",t),new Error(r)}}a(mae,"handleGetJob");async function Sae(e){try{let t=await gae(e);if(xn.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=va(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=va(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 xn.error(r),new Error(r)}}a(Sae,"handleGetJobsByStartDate");async function Tae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||rl.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return xn.info(u),t.error=u,t}if(!ut.JOB_TYPE_ENUM[e.operation])return xn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=lp.fileObject(e);break;case ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=lp.urlObject(e);break;case ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=lp.dataObject(e);break;case ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=lp.s3FileObject(e);break;case ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=px(e,"date");break;case ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=px(e,"timestamp");break;case ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=lae(e);break;default:break}if(n)throw uae(n,n.message,dae.BAD_REQUEST,void 0,void 0,!0);let s=new sae;s.type=e.operation===ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new tae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await mx(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=eae();try{o=await mx(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new oae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Eae(l)}catch(u){return xn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,xn.trace(u)}return t}a(Tae,"addJob");async function gae(e){let t=va(e.from_date,va.ISO_8601),r=va(e.to_date,va.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new nae(n,e.hdb_user);try{return await hae(s)}catch(i){throw xn.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(gae,"getJobsInDateRange");async function gx(e){if(rl.isEmptyOrZeroLength(e))return rl.errorizeMessage("Invalid job ID specified.");let t=new rae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await fae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xn.error(n),rl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(gx,"getJobById");async function Rae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(rl.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ut.JOB_STATUS_ENUM.COMPLETE||e.status===ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=va().valueOf());let t=new iae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await pae(t),r}a(Rae,"updateJob")});var Ix=g((FNe,yx)=>{"use strict";var Ax=W(),Hr=w(),Aae=require("moment"),up=PO(),_p=G(),Ox=vO(),Nx=Kh(),bx=ta(),Oae=tt(),Nae=xh(),BO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function bae(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(Ax.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Ax.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Hr.JOB_TYPE_ENUM.csv_file_load:await Ri(e,up.csvFileLoad);break;case Hr.JOB_TYPE_ENUM.csv_url_load:await Ri(e,up.csvURLLoad);break;case Hr.JOB_TYPE_ENUM.csv_data_load:await Ri(e,up.csvDataLoad);break;case Hr.JOB_TYPE_ENUM.import_from_s3:await Ri(e,up.importFromS3);break;case Hr.JOB_TYPE_ENUM.empty_trash:break;case Hr.JOB_TYPE_ENUM.export_local:await Ri(e,Nx.export_local);break;case Hr.JOB_TYPE_ENUM.export_to_s3:await Ri(e,Nx.export_to_s3);break;case Hr.JOB_TYPE_ENUM.delete_files_before:case Hr.JOB_TYPE_ENUM.delete_records_before:await Ri(e,bx.deleteFilesBefore);break;case Hr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ri(e,bx.deleteAuditLogsBefore);break;case Hr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ri(e,Nae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(bae,"parseMessage");async function Ri(e,t){try{e.job.status=Hr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Aae().valueOf(),await Ox.updateJob(e.job),await yae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):_p.error(`There was an error running ${t.name} job with id ${e.job.id}`),_p.error(n),e.job.message=n,e.job.status=Hr.JOB_STATUS_ENUM.ERROR;try{await Ox.updateJob(e.job)}catch(s){throw _p.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ri,"runJob");async function yae(e){_p.trace("launching job thread:",e),Oae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Hr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(yae,"launchJobThread");yx.exports={parseMessage:bae,RunnerMessage:BO}});var Cx=g(($Ne,wx)=>{"use strict";var HO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};wx.exports=HO});var Kx=g((YNe,$O)=>{"use strict";var hp=Rr(),GO=Yh(),dp=PO(),Ai=HE(),fp=ji(),V_=ta(),Iae=fR(),$_=Nr(),Ep=FE(),er=vh(),Bt=G(),wae=NR(),Cae=u_(),Lx=iA(),Lae=th(),Dae=nh(),Pae=oA(),Mae=oh(),Uae=ch(),qO=uh(),Dx=Kh(),vae=$h(),FO=vO(),x=w(),{hdb_errors:K_,handleHDBError:Y_}=se(),{HTTP_STATUS_CODES:Px}=K_,xO=dh(),Mx=Na(),kx=require("util"),nl=Ar(),Bae=wn(),Hae=_i(),Ux=Ix(),vx=o_(),Bx=(Ih(),ie(y_)),Hx=Et(),qx=xh(),xx=Ph(),{setServerUtilities:qae}=(pE(),ie(Pg)),{CONTEXT:xae}=(Wn(),ie(fS)),{_assignPackageExport:Gae}=require("../index"),{transformReq:Fae}=W(),{server:kae}=(fr(),ie(Ho)),$ae=OO(),Gx=hp.searchByHash,Vae=hp.searchByValue,Yae=kx.promisify(hp.search),Kae=kx.promisify(GO.evaluateSQL),Wae={[x.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[x.OPERATIONS_ENUM.CREATE_TABLE]:!0,[x.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[x.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[x.OPERATIONS_ENUM.DROP_TABLE]:!0,[x.OPERATIONS_ENUM.DROP_SCHEMA]:!0},K=Cx();async function $x(e,t){try{if(e.body.operation!=="read_log"&&(Bt.log_level===x.LOG_LEVELS.INFO||Bt.log_level===x.LOG_LEVELS.DEBUG||Bt.log_level===x.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Bt.info(o)}}catch(n){Bt.error(n)}let r=await $ae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Wae[e.body.operation]&&Bae.setSchemaDataToGlobal(n=>{n&&Bt.error(n)}),r}a($x,"processLocalTransaction");var Fx=jae();$O.exports={chooseOperation:Vx,getOperationFunction:Yx,operation:kO,processLocalTransaction:$x};qae($O.exports);kae.operation=kO;function Vx(e){let t;try{t=Yx(e)}catch(s){throw Bt.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=GO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=GO.checkASTPermissions(e,i);if(o)throw Bt.error(`${Px.FORBIDDEN} from operation ${e.operation}`),Bt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Y_(new Error,o,K_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==x.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==x.OPERATIONS_ENUM.LOGIN&&e.operation!==x.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=vae.verifyPerms(i,s);if(o)throw Bt.error(`${Px.FORBIDDEN} from operation ${e.operation}`),Bt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Y_(new Error,o,K_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Y_(s,"There was an error when trying to choose an operation path")}return r}a(Vx,"chooseOperation");function Yx(e){if(Bt.trace(`getOperationFunction with operation: ${e.operation}`),Fx.has(e.operation))return Fx.get(e.operation);throw Y_(new Error,K_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),K_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Yx,"getOperationFunction");Gae("operation",kO);function kO(e,t){e.hdb_user=this[xae]?.user,e.bypass_auth=!t;let r=Vx(e);return $x({body:e},r)}a(kO,"operation");async function Qae(e){Bt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[x.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case x.OPERATIONS_ENUM.INSERT:o=await nl.insert(i);break;case x.OPERATIONS_ENUM.UPDATE:o=await nl.update(i);break;case x.OPERATIONS_ENUM.UPSERT:o=await nl.upsert(i);break;case x.OPERATIONS_ENUM.DELETE:o=await V_.deleteRecord(i);break;default:Bt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Bt.info("Invalid operation in transaction"),Bt.error(o)}}a(Qae,"catchup");async function qs(e){Fae(e);let t,r;try{r=await FO.addJob(e),t=r.createdJob,Bt.info("addJob result",r);let n=new Ux.RunnerMessage(t,e);return await Ux.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Bt.error(s),Y_(n,s)}}a(qs,"executeJob");function jae(){let e=new Map;return e.set(x.OPERATIONS_ENUM.INSERT,new K(nl.insert)),e.set(x.OPERATIONS_ENUM.UPDATE,new K(nl.update)),e.set(x.OPERATIONS_ENUM.UPSERT,new K(nl.upsert)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(hp.searchByConditions)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(Gx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_ID,new K(Gx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Vae)),e.set(x.OPERATIONS_ENUM.SEARCH,new K(Yae)),e.set(x.OPERATIONS_ENUM.SQL,new K(Kae)),e.set(x.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(qs,dp.csvDataLoad)),e.set(x.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(qs,dp.csvFileLoad)),e.set(x.OPERATIONS_ENUM.CSV_URL_LOAD,new K(qs,dp.csvURLLoad)),e.set(x.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(qs,dp.importFromS3)),e.set(x.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ai.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ai.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_TABLE,new K(Ai.createTable)),e.set(x.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ai.createAttribute)),e.set(x.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ai.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_DATABASE,new K(Ai.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_TABLE,new K(Ai.dropTable)),e.set(x.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ai.dropAttribute)),e.set(x.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(fp.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(fp.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(fp.describeTable)),e.set(x.OPERATIONS_ENUM.DESCRIBE_ALL,new K(fp.describeAll)),e.set(x.OPERATIONS_ENUM.DELETE,new K(V_.deleteRecord)),e.set(x.OPERATIONS_ENUM.ADD_USER,new K($_.addUser)),e.set(x.OPERATIONS_ENUM.ALTER_USER,new K($_.alterUser)),e.set(x.OPERATIONS_ENUM.DROP_USER,new K($_.dropUser)),e.set(x.OPERATIONS_ENUM.LIST_USERS,new K($_.listUsersExternal)),e.set(x.OPERATIONS_ENUM.LIST_ROLES,new K(Ep.listRoles)),e.set(x.OPERATIONS_ENUM.ADD_ROLE,new K(Ep.addRole)),e.set(x.OPERATIONS_ENUM.ALTER_ROLE,new K(Ep.alterRole)),e.set(x.OPERATIONS_ENUM.DROP_ROLE,new K(Ep.dropRole)),e.set(x.OPERATIONS_ENUM.USER_INFO,new K($_.userInfo)),e.set(x.OPERATIONS_ENUM.READ_LOG,new K(wae)),e.set(x.OPERATIONS_ENUM.ADD_NODE,new K(Cae)),e.set(x.OPERATIONS_ENUM.UPDATE_NODE,new K(Lx)),e.set(x.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(Lx)),e.set(x.OPERATIONS_ENUM.REMOVE_NODE,new K(Lae)),e.set(x.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(Dae)),e.set(x.OPERATIONS_ENUM.PURGE_STREAM,new K(Pae)),e.set(x.OPERATIONS_ENUM.SET_CONFIGURATION,new K(Hx.setConfiguration)),e.set(x.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Mae.clusterStatus)),e.set(x.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(Uae)),e.set(x.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(qO.setRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(qO.getRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(qO.deleteRoutes)),e.set(x.OPERATIONS_ENUM.EXPORT_TO_S3,new K(qs,Dx.export_to_s3)),e.set(x.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(qs,V_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(qs,V_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.EXPORT_LOCAL,new K(qs,Dx.export_local)),e.set(x.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(FO.handleGetJobsByStartDate)),e.set(x.OPERATIONS_ENUM.GET_JOB,new K(FO.handleGetJob)),e.set(x.OPERATIONS_ENUM.GET_FINGERPRINT,new K(xO.getFingerprint)),e.set(x.OPERATIONS_ENUM.SET_LICENSE,new K(xO.setLicense)),e.set(x.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(xO.getRegistrationInfo)),e.set(x.OPERATIONS_ENUM.RESTART,new K(Mx.restart)),e.set(x.OPERATIONS_ENUM.RESTART_SERVICE,new K(Mx.restartService)),e.set(x.OPERATIONS_ENUM.CATCHUP,new K(Qae)),e.set(x.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(Hae.systemInformation)),e.set(x.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(qs,V_.deleteAuditLogsBefore)),e.set(x.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(Iae)),e.set(x.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(vx.createTokens)),e.set(x.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(vx.refreshOperationToken)),e.set(x.OPERATIONS_ENUM.LOGIN,new K(Bx.login)),e.set(x.OPERATIONS_ENUM.LOGOUT,new K(Bx.logout)),e.set(x.OPERATIONS_ENUM.GET_CONFIGURATION,new K(Hx.getConfiguration)),e.set(x.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(er.customFunctionsStatus)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(er.getCustomFunctions)),e.set(x.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(er.getComponentFile)),e.set(x.OPERATIONS_ENUM.GET_COMPONENTS,new K(er.getComponents)),e.set(x.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(er.setComponentFile)),e.set(x.OPERATIONS_ENUM.DROP_COMPONENT,new K(er.dropComponent)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(er.getCustomFunction)),e.set(x.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(er.setCustomFunction)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(er.dropCustomFunction)),e.set(x.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(er.addComponent)),e.set(x.OPERATIONS_ENUM.ADD_COMPONENT,new K(er.addComponent)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(er.dropCustomFunctionProject)),e.set(x.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(er.packageComponent)),e.set(x.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(er.packageComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(er.deployComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(er.deployComponent)),e.set(x.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(qx.readTransactionLog)),e.set(x.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(qs,qx.deleteTransactionLogsBefore)),e.set(x.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(xx.installModules)),e.set(x.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(xx.auditModules)),e.set(x.OPERATIONS_ENUM.GET_BACKUP,new K(Ai.getBackup)),e}a(jae,"initializeOperationFunctionMap")});var mp=g((WNe,jx)=>{"use strict";var VO=w(),zae=W(),W_=G(),{handleHDBError:YO,hdb_errors:pp}=se(),{isMainThread:Jae}=require("worker_threads"),{Readable:Xae}=require("stream"),Wx=require("os"),Zae=require("util"),ece=UR(),tce=Zae.promisify(ece.authorize),Qx=Kx(),{createGzip:rce,constants:nce}=require("zlib");function sce(e){let t=`Found an uncaught exception with message: ${e.message}. ${Wx.EOL}Stack: ${e.stack} ${Wx.EOL}Terminating ${Jae?"HDB":"thread"}.`;console.error(t),W_.fatal(t),process.exit(1)}a(sce,"handleServerUncaughtException");function ice(e,t,r){if(W_[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 n=e.statusCode?e.statusCode:pp.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(ice,"serverErrorHandler");function oce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=YO(new Error,"Invalid JSON.",pp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(zae.isEmpty(e.body.operation)){let n=YO(new Error,"Request body must include an 'operation' property.",pp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(oce,"reqBodyValidationHandler");function ace(e,t,r){let n;e.body.operation!==VO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==VO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==VO.OPERATIONS_ENUM.LOGOUT?tce(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{W_.warn(s),W_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(YO(s,i,pp.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(ace,"authHandler");async function cce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Qx.chooseOperation(e.body);let s=await Qx.processLocalTransaction(e,n);if(s instanceof Xae&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(rce({level:nce.Z_BEST_SPEED})))}return s}catch(s){throw W_.error(s),s}}a(cce,"handlePostRequest");jx.exports={authHandler:ace,handlePostRequest:cce,handleServerUncaughtException:sce,serverErrorHandler:ice,reqBodyValidationHandler:oce}});var Zx=g((jNe,Xx)=>{"use strict";var lce=require("fastify-plugin"),{handlePostRequest:zx,authHandler:uce,reqBodyValidationHandler:_ce}=mp();async function dce(e){e.decorate("hdbCore",{preValidation:[_ce,uce],request:t=>Jx(zx(t,response)),requestWithoutAuthentication:(t,r)=>Jx(zx(t,r,!0))})}a(dce,"hdbCore");async function Jx(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(Jx,"convertAsyncIterators");Xx.exports=lce(dce)});var rG=g((XNe,tG)=>{"use strict";var JNe=require("fs"),KO=J();KO.initSync();var{CONFIG_PARAMS:eG}=w(),fce=1024*1024*1024;function Ece(e){let t=KO.get(eG.HTTP_TIMEOUT),r=KO.get(eG.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:fce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Ece,"getServerOptions");tG.exports=Ece});var iG=g((ebe,sG)=>{"use strict";var WO=J();WO.initSync();var{CONFIG_PARAMS:nG}=w();function hce(){let e=WO.get(nG.HTTP_CORSACCESSLIST),t=WO.get(nG.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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(hce,"getCORSOptions");sG.exports=hce});var cG=g((rbe,aG)=>{"use strict";var oG=J();oG.initSync();var pce=w();function mce(){return oG.get(pce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(mce,"getHeaderTimeoutConfig");aG.exports=mce});var jO={};$e(jO,{customFunctionsServer:()=>gce,ready:()=>OG,start:()=>Tce});function Tce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Oi||(Oi=AG(t),it.http((await Oi).server));let o=await Oi,c=(0,QO.dirname)(s),l=(0,QO.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!lG.has(c)){lG.add(c);try{o.register(Ace(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:OG}}async function gce(){try{Ke.info("In Custom Functions Fastify server"+process.cwd()),Ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ke.debug(`Custom Functions server process ${process.pid} starting up.`),await Rce();let e=hG.get(pG.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Oi=await AG(e)}catch(r){throw Ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ke.error(`Custom Functions ${process.pid} Error: ${e}`),Ke.error(e),process.exit(1)}}async function Rce(){try{Ke.info("Custom Functions starting configuration."),await mG.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Ace(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,uG.existsSync)(e)&&r.register(EG.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ke.error(s.message):s&&Ke.error(s),o()})}catch(n){Ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function AG(e){Ke.info("Custom Functions starting buildServer.");let t=(0,SG.default)(e),r=(0,_G.default)(t);r.server.headersTimeout=(0,gG.default)(),r.setErrorHandler(RG.serverErrorHandler);let n=(0,TG.default)();return n&&r.register(dG.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(fG.default),await r.register(Sce),await r.after(),cO(r),Ke.info("Custom Functions completed buildServer."),r}function OG(){if(Oi)return Oi.then?Oi.then(e=>e.ready()):Oi.ready()}var QO,uG,_G,dG,fG,EG,hG,pG,Ke,Sce,mG,SG,TG,gG,RG,Oi,lG,NG=Ne(()=>{QO=require("path"),uG=require("fs"),_G=q(require("fastify")),dG=q(require("@fastify/cors")),fG=q(pO()),EG=q(require("@fastify/autoload")),hG=q(J()),pG=q(w()),Ke=q(G()),Sce=q(Zx()),mG=q(Nr()),SG=q(rG()),TG=q(iG()),gG=q(cG()),RG=q(mp());Yc();fr();lG=new Set;a(Tce,"start");a(gce,"customFunctionsServer");a(Rce,"setUp");a(Ace,"buildRouteFolder");a(AG,"buildServer");a(OG,"ready")});var zO={};$e(zO,{start:()=>Oce});function Oce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,CG.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){yG||(yG=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=bG.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,IG.default)(s,(0,wG.realpathSync)(o))}}return i(s)},{runFirst:!0})),bG.set(r,n)}}}var IG,wG,CG,bG,yG,LG=Ne(()=>{IG=q(require("send")),wG=require("fs"),CG=q(require("serve-static")),bG=new Map;a(Oce,"start")});var eN={};$e(eN,{Request:()=>JO,createReuseportFd:()=>Sp});var DG,JO,XO,ZO,Sp,Tp=Ne(()=>{DG=require("os"),JO=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new ZO(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new XO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},XO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},ZO=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,n]of this)t(n,r,this)}};(0,DG.platform)()!="win32"&&(Sp=require("node-unix-socket").createReuseportFd)});var vG=g((Ebe,UG)=>{"use strict";var Nce=require("cluster"),Ba=J();Ba.initSync();var MG=w(),lbe=require("util"),Ni=G(),ube=require("fs"),bce=require("fastify"),_be=Bo(),yce=require("@fastify/cors"),Ice=require("@fastify/compress"),wce=require("@fastify/static"),Cce=pO(),Lce=require("path"),{PACKAGE_ROOT:Dce}=w(),Pce=wn(),Mce=W(),Uce=Nr(),vce=ia(),{server:Bce}=(fr(),ie(Ho)),{node_request_key:dbe}=(Tp(),ie(eN)),{authHandler:Hce,handlePostRequest:qce,serverErrorHandler:xce,reqBodyValidationHandler:Gce}=mp(),fbe=require("net"),{registerContentHandlers:Fce}=(Yc(),ie(Iq)),kce=6e4,$ce=1024*1024*1024,Vce="TRUE",{CONFIG_PARAMS:Q_}=MG,sl;UG.exports={hdbServer:PG,start:PG};async function PG(e){try{Ni.info("In Fastify server"+process.cwd()),Ni.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ni.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Nce.isMaster,await Yce();let t=e.securePort>0;sl=Kce(t),await sl.ready(),e||(e={}),e.isOperationsServer=!0;try{Bce.http(sl.server,e),sl.server.closeIdleConnections||await sl.listen({port:0,host:"::"})}catch(r){throw sl.close(),Ni.error(r),Ni.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ni.fatal(t),process.exit(1)}}a(PG,"operationsServer");async function Yce(){Ni.trace("Configuring HarperDB process."),Pce.setSchemaDataToGlobal(),await Uce.setUsersToGlobal(),await vce.getLicense()}a(Yce,"setUp");function Kce(e){Ni.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Wce(e),r=bce(t);r.server.headersTimeout=jce(),r.setErrorHandler(xce);let n=Qce();n&&r.register(yce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Cce),r.register(Ice),r.register(wce,{root:Lce.join(Dce,"studio/build-local")}),Fce(r);let s=Ba.get(MG.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Mce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Gce,Hce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),qce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ni.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Kce,"buildServer");function Wce(e){let t=Ba.get(Q_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ba.get(Q_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:$ce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Wce,"getServerOptions");function Qce(){let e=Ba.get(Q_.OPERATIONSAPI_NETWORK_CORS),t=Ba.get(Q_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Vce)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(Qce,"getCORSOpts");function jce(){return Ba.get(Q_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??kce}a(jce,"getHeaderTimeoutConfig")});var YG=g((Tbe,VG)=>{"use strict";var{decode:zce}=require("msgpackr"),{isMainThread:pbe,parentPort:Jce,threadId:mbe}=require("worker_threads"),rN=ht(),bi=et(),Xce=w(),So=G(),BG=J(),qG=w();tt();var Zce=ci(),{recordAction:ele,recordActionBinary:tle}=(li(),ie(Pu)),{publishToStream:rle}=rN,{ConsumerEvents:nle}=require("nats"),Sbe={durable:bi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:bi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},sle,ile,ole,xG,GG;VG.exports={initialize:nN,workQueueListener:$G,setSubscription:ale,setIgnoreOrigin:lle,getDatabaseSubscriptions:cle};async function nN(){GG=!0,So.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await rN.getNATSReferences();sle=e,ile=e.info.server_name,ole=t,xG=r}a(nN,"initialize");var Rp=new Map;function ale(e,t,r){let n=Rp.get(e);n||Rp.set(e,n=new Map),n.set(t,r),GG||nN().then($G)}a(ale,"setSubscription");function cle(){return Rp}a(cle,"getDatabaseSubscriptions");var FG;function lle(e){FG=e}a(lle,"setIgnoreOrigin");var kG=100,HG=new Array(kG),gp=0;async function $G(){let e=await xG.consumers.get(bi.WORK_QUEUE_CONSUMER_NAMES.stream_name,bi.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Jce?.on("message",async n=>{let{type:s}=n;s===qG.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===nle.HeartbeatsMissed){let s=n.data;So.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(So.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await HG[gp],HG[gp]=ule(n).catch(s=>{So.error(s)}),++gp>=kG&&(gp=0)}catch(n){So.error("Error consuming clustering ingest, restarting consumer",n)}rN.clearClientCache(),await nN()}}a($G,"workQueueListener");async function ule(e){let t=zce(e.data);ele(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=BG.get(Xce.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bi.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bi.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(bi.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!FG),tle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(bi.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;So.trace("processing message:",o,c,_,(u?"records: "+u.map(R=>R?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),So.trace(`messageProcessor nats msg id: ${e.headers.get(bi.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let{timestamp:m,user:S,node_name:A}=f||{},T=Rp.get(c)?.get(_);if(!T)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,T.send(t);else if(u.length===1&&!l)T.send({type:tN(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:m,table:_,onCommit:h,user:S,nodeName:A});else{let R=u.map((U,B)=>({type:tN(o),value:U,expiresAt:E,id:d?.[B],table:_}));for(;l;)R.push({type:tN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:R,table:_,timestamp:m,onCommit:h,user:S,nodeName:A})}BG.get(qG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&rle(e.subject.split(".").slice(0,-1).join("."),Zce.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){So.error(o)}e.ack()}a(ule,"messageProcessor");function tN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(tN,"convertOperation")});var lN={};$e(lN,{disableNATS:()=>dle,publishToStream:()=>yp,setNATSReplicator:()=>sN,setPublishToStream:()=>fle,setSubscription:()=>cN,start:()=>_le});function _le(){Op.default.get(Np.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&hle()}function dle(e=!0){zG=e}function fle(e,t){yp=e,cN=t}function hle(){if(zG||process.env._DISABLE_NATS)return;let e=es(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];sN(s,r,i)}}Hg((r,n)=>{sN(r.tableName,r.databaseName,r),n&&XG(r)}),!KG&&(KG=!0)}function sN(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Wt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Pe],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Pe]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Pe],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Pe],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Pe]})}static defineSchema(i){XG(i)}static subscribe(){let i=new Kn;return cN(t,e,i),i}static subscribeOnThisThread(i){return i<Ele}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Ap(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=JG;return i}a(n,"getNATSTransaction")}function XG(e){let t=Op.default.get(Np.default.CONFIG_PARAMS.CLUSTERING_NODENAME);yp(`${oN.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,aN.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 WG,oN,aN,QG,jG,Op,Np,bp,zG,yp,cN,Ele,JG,KG,Ap,iN,ZG=Ne(()=>{Re();Wn();WG=q(ht()),oN=q(et()),aN=q(ci());Gl();QG=q(YG()),jG=q(hr()),Op=q(J()),Np=q(w()),bp=q(G());a(_le,"start");a(dle,"disableNATS");yp=WG.publishToStream,cN=QG.setSubscription;a(fle,"setPublishToStream");Ele=2;a(hle,"assignReplicationSource");a(sN,"setNATSReplicator");a(XG,"publishSchema");Ap=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 n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Op.default.get(Np.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(bp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(yp(`${oN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,aN.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw bp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},iN=class extends Ap{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,jG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};JG=new iN});var SN=g(Ha=>{"use strict";var{isMainThread:ple,parentPort:z_,threadId:Ip}=require("worker_threads"),{Socket:mle,createServer:Sle}=require("net"),{createServer:Tle,IncomingMessage:gle}=require("http"),{createServer:Rle}=require("https"),{readFileSync:il,unlinkSync:eF,existsSync:Ale}=require("fs"),hn=G(),xe=J(),ar=w(),{server:Lp}=(fr(),ie(Ho)),{WebSocketServer:Ole}=require("ws"),{createServer:Nle}=require("tls"),{getTicketKeys:ble,restartNumber:yle,getWorkerIndex:dN}=tt(),{Headers:iF,appendHeader:Ile}=(Mu(),ie(mM)),{recordAction:j_,recordActionBinary:wle}=(li(),ie(Pu)),{Request:oF,createReuseportFd:tF}=(Tp(),ie(eN)),{checkMemoryLimit:Cle}=ia(),aF=require("tls"),rF=aF.createSecureContext;aF.createSecureContext=function(e){if(!e.cert||!e.key)return rF(e);let t={...e};delete t.key,delete t.cert;let r=rF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var uN=xe.get(ar.CONFIG_PARAMS.THREADS_DEBUG);if(uN){let e=(typeof uN=="number"?uN:9229)+(dN()??-1)+1;try{require("inspector").open(e)}catch(t){hn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,t.message)}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){yle<=1&&hn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:ybe,CONFIG_PARAMS:Lle}=ar;xe.initSync();var Dle=xe.get(Lle.HTTP_SESSIONAFFINITY),xs={};Ha.registerServer=pN;Ha.httpServer=mN;Ha.deliverSocket=hN;Ha.startServers=cF;Ha.when_components_loaded=null;Lp.http=mN;Lp.request=vle;Lp.socket=Ble;Lp.ws=Hle;var _N={},wp={},Ple,To={},Cp={},Mle=[],fN=[];function cF(){return Ha.when_components_loaded=Dp().loadRootComponents(!0).then(()=>{z_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)hN(n,r,s);else if(t.requestId)Ule(t);else if(t.type===ar.ITC_EVENT_TYPES.SHUTDOWN){hn.trace("received shutdown request",Ip);for(let i in xs){let o=xs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),u=0,d=setInterval(()=>{u++;let f=u>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}u===1?hn.info(`Closing ${E.length} idle connections`):f&&hn.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,m=E.length;h<m;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
27
|
+
`},compressible:!1,q:.8});Yt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});bq={type:"application/json",serializeStream:Qu,serialize:x_,deserialize:roe,q:.8};Yt.set("*/*",bq);Yt.set("",bq);a(roe,"tryJSONParse");a(lO,"registerContentHandlers");noe=require("fastify-plugin"),soe=noe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Qh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(Qh,"findBestSerializer");gq=iO.default.get(oO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(jh,"serialize");a(Eo,"serializeMessage");a(ioe,"streamToBuffer");a(La,"getDeserializer");a(Rq,"deserializerUnknownType");a(ooe,"transformIterable")});function Dq(e){let t={openapi:aoe,info:{title:"HarperDB HTTP REST interface",version:(0,Lq.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:R,name:U,elements:B,relationship:v,definition:P}of o){if(v)R==="array"?_[U]={type:"array",items:{$ref:mo+B.type}}:_[U]={$ref:mo+R};else{let V=P??B?.definition;if(V){if(!t.components.schemas[V.type]){let Y={};V.properties.forEach(z=>{Y[z.name]=new fO(uO[z.type],z.type)}),t.components.schemas[V.type]=new Cq(Y)}R==="array"?_[U]={type:"array",items:{$ref:mo+V.type}}:_[U]={$ref:mo+V.type}}else R==="array"?B.type==="Any"||B.type=="ID"?_[U]={type:"array",items:{format:B.type}}:_[U]={type:"array",items:new fO(uO[B.type],B.type)}:R==="Any"||R=="ID"?_[U]={format:R}:_[U]=new fO(uO[R],R)}u.push(new EO(U,"query",_[U]))}let d=Object.keys(_),f=new EO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new EO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new Cq(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",A=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new coe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new _O(u,r,{200:new dO({$ref:mo+i})},"search for records by the specified property name and value pairs")),A&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new wq(u,r,"delete all the records that match the provided query",{204:new Iq})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new _O([f],r,{200:new dO({$ref:mo+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new loe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),A&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new wq([f],r,"delete a record with the given primary key",{204:new Iq})),S&&E.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new _O([f,E],r,{200:new dO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function coe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:mo+e}}}},this.security=t,this.responses={200:{description:hO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function _O(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function dO(e){this.description=hO,this.content={"application/json":{schema:e}}}function Iq(){this.description="successfully processed request, no content returned to client"}function loe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:mo+r}}}},this.responses={200:{description:hO}}}function wq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Cq(e){this.type="object",this.properties=e}function fO(e,t){this.type=e,this.format=t}function EO(e,t,r){this.name=e,this.in=t,this.schema=r}var Lq,aoe,uO,mo,hO,Pq=Ne(()=>{Lq=q(Gi()),aoe="3.0.3",uO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},mo="#/components/schemas/",hO="successful operation";a(Dq,"generateJsonApi");a(coe,"Post");a(_O,"Get");a(dO,"Response200");a(Iq,"Response204");a(loe,"Put");a(wq,"Delete");a(Cq,"ResourceSchema");a(fO,"Type");a(EO,"Parameter")});var Jh={};$e(Jh,{start:()=>doe});async function _oe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&cf(e);let s=new to;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Mq){let h=zh.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Ze(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=La(r["content-type"],!0)(e.body)}catch(h){throw new Xc.ClientError(h,400)}if(e.authorize=!0,i===Mq&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Dq(zh);throw new Xc.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Xc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Xc.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,pO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){uoe[0]=d;let h=String.fromCharCode(34,(Zt[0]&63)+62,(Zt[0]>>6)+(Zt[1]<<2&63)+62,(Zt[1]>>4)+(Zt[2]<<4&63)+62,(Zt[2]>>2)+62,(Zt[3]&63)+62,(Zt[3]>>6)+(Zt[4]<<2&63)+62,(Zt[4]>>4)+(Zt[5]<<4&63)+62,(Zt[5]>>2)+62,(Zt[6]&63)+62,(Zt[6]>>6)+(Zt[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),pO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:u,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=jh(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Da.warn(i):Da.info(i):Da.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=jh(i.contentType?i:i.toString(),e,o),o}}function doe(e){pO=e,!Uq&&(Uq=!0,zh=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return _oe(t,r)}),e.server.ws(async(t,r,n)=>{F_++;let s=new Kn;vq||(vq=!0,Du(u=>{F_>0&&u.push({metric:"ws-connections",connections:F_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Da.warn(u)});let o;t.on("message",a(function(d){o||(o=La(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{F_--,Cn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=zh.getMatch(l);if(Cn(!!_,"connection","ws","connect"),!_)t.send(Eo(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,sn(h=>({count:h.count,total:F_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ze(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Eo(E.value,r);t.send(h),sn(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Da,Xc,Zt,uoe,pO,Mq,Uq,zh,vq,F_,Bq=Ne(()=>{Yc();li();Da=q(G()),Xc=q(se());lf();Gl();$o();Mu();Pq();Zt=new Uint8Array(8),uoe=new Float64Array(Zt.buffer,0,1),pO={},Mq="openapi";a(_oe,"http");F_=0;a(doe,"start")});var mO=g((SNe,Hq)=>{var{recordAction:Xh,recordActionBinary:foe}=(li(),ie(Pu)),Eoe=require("fastify-plugin"),hoe=200;Hq.exports=Eoe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),Xh(o,"duration",_,d,u),foe(s.raw.statusCode<400,"success",_,d,u);let f=hoe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Xh(performance.now()-c,"transfer",_,d,u),Xh(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,Xh(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var OO=g((RNe,Fq)=>{var rp=require("clone"),np=rt(),poe=W(),ep=C(),TNe=G(),SO=require("fs"),gO=require("joi"),{string:tp}=gO.types(),{hdb_errors:moe,handleHDBError:Zh}=se(),{HDB_ERROR_MSGS:gNe,HTTP_STATUS_CODES:TO}=moe,{common_validators:Zc}=Os(),qq=" is required",Soe=["insert","update","upsert"],RO={database:{presence:!1,format:Zc.schema_format,length:Zc.schema_length},schema:{presence:!1,format:Zc.schema_format,length:Zc.schema_length},table:{presence:!0,format:Zc.schema_format,length:Zc.schema_length},action:{inclusion:{within:Soe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Toe={schema:tp.required(),table:tp.required(),action:tp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:goe,AWS_SECRET:Roe,AWS_BUCKET:Aoe,AWS_FILE_KEY:Ooe,REGION:Noe}=ep.S3_BUCKET_AUTH_KEYS,boe={s3:{presence:!0},[`s3.${goe}`]:{presence:!0,type:"String"},[`s3.${Roe}`]:{presence:!0,type:"String"},[`s3.${Aoe}`]:{presence:!0,type:"String"},[`s3.${Ooe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Noe}`]:{presence:!0,type:"String"}},xq=rp(RO);xq.data.presence={message:qq};var Gq=rp(RO);Gq.file_path.presence={message:qq};var yoe=Object.assign(rp(RO),boe),AO=rp(Toe);AO.csv_url=tp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();AO.passthrough_headers=gO.object();function Ioe(e){let t=np.validateObject(e,xq);return sp(e,t)}a(Ioe,"dataObject");function woe(e){let t=np.validateBySchema(e,gO.object(AO));return sp(e,t)}a(woe,"urlObject");function Coe(e){let t=np.validateObject(e,Gq);return sp(e,t)}a(Coe,"fileObject");function Loe(e){let t=np.validateObject(e,yoe);return sp(e,t)}a(Loe,"s3FileObject");function sp(e,t){if(!t){let r=poe.checkGlobalSchemaTable(e.schema,e.table);if(r)return Zh(new Error,r,TO.BAD_REQUEST);if(e.operation===ep.OPERATIONS_ENUM.CSV_FILE_LOAD)try{SO.accessSync(e.file_path,SO.constants.R_OK|SO.constants.F_OK)}catch(n){return n.code===ep.NODE_ERROR_CODES.ENOENT?Zh(n,`No such file or directory ${n.path}`,TO.BAD_REQUEST):n.code===ep.NODE_ERROR_CODES.EACCES?Zh(n,`Permission denied ${n.path}`,TO.BAD_REQUEST):Zh(n)}}return t}a(sp,"postValidateChecks");Fq.exports={dataObject:Ioe,urlObject:woe,fileObject:Coe,s3FileObject:Loe}});var NO=g((ONe,kq)=>{"use strict";var k_=G(),ip=C();async function Doe(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===ip.OPERATIONS_ENUM.INSERT||t.operation===ip.OPERATIONS_ENUM.UPDATE||t.operation===ip.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===ip.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(k_.info(i.message),i):i.http_resp_msg?(k_.error(`Error calling operation: ${e.name}`),k_.error(i.http_resp_msg),i):(k_.error(`Error calling operation: ${e.name}`),k_.error(i),i)}}a(Doe,"callOperationFunctionAsAwait");kq.exports={callOperationFunctionAsAwait:Doe}});var Vq=g((bNe,$q)=>{"use strict";var bO=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},yO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};$q.exports={BulkLoadFileObject:bO,BulkLoadDataObject:yO}});var Kq=g((INe,Yq)=>{"use strict";var IO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Yq.exports=IO});var MO=g((MNe,lx)=>{"use strict";var op=Or(),cp=OO(),Poe=require("needle"),cs=C(),CNe=et(),el=W(),{handleHDBError:lt,hdb_errors:tx}=se(),{HTTP_STATUS_CODES:er,HDB_ERROR_MSGS:Ht,CHECK_LOGS_WRAPPER:Ma}=tx,tl=G(),wO=require("papaparse");el.promisifyPapaParse();var ls=require("fs-extra"),Moe=require("path"),{chain:Wq}=require("stream-chain"),Qq=require("stream-json/streamers/StreamArray"),jq=require("stream-json/utils/Batch"),zq=require("stream-chain/utils/comp"),{finished:Jq}=require("stream"),Uoe=J(),rx=NO(),voe=tO(),{BulkLoadFileObject:LO,BulkLoadDataObject:Boe}=Vq(),DO=YA(),{verifyBulkLoadAttributePerms:nx}=$h(),LNe=Kq(),DNe=ht(),PNe=ci(),{databases:Hoe}=(Re(),ie(Ge)),{coerceType:qoe}=(pE(),ie(Mg)),Xq="No records parsed from csv file.",Pa=`${Uoe.get("HDB_ROOT")}/tmp`,{schema_regex:xoe}=Os(),Zq=1024*1024*2,ex=5e3,Goe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};lx.exports={csvDataLoad:Foe,csvURLLoad:koe,csvFileLoad:$oe,importFromS3:Voe};async function Foe(e,t){let r=cp.dataObject(e);if(r)throw lt(r,r.message,er.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=ox(e.schema,e.table),i=wO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:CO.bind(null,s),dynamicTyping:!1}),o=new DO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&nx(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 lt(new Error,c,er.BAD_REQUEST,void 0,void 0,!0);let l=new Boe(e.action,e.schema,e.table,i.data);return n=await rx.callOperationFunctionAsAwait(ax,l,null),n.message===Xq?Xq:cx(n.records,n.number_written)}catch(s){throw Ua(s)}}a(Foe,"csvDataLoad");async function koe(e){let t=cp.urlObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Pa}/${r}`;try{await Yoe(e,r)}catch(s){throw tl.error(Ht.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,Ma(Ht.DOWNLOAD_FILE_ERR(r)))}try{let s=new LO(this.job_operation_function.name,e.action,e.schema,e.table,n,cs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await PO(s);return await ap(n),i}catch(s){throw await ap(n),Ua(s)}}a(koe,"csvURLLoad");async function $oe(e){let t=cp.fileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=new LO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,cs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await PO(r)}catch(n){throw Ua(n)}}a($oe,"csvFileLoad");async function Voe(e){let t=cp.s3FileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Moe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Pa}/${s}`;let i=new LO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Koe(s,e);let o=await PO(i);return await ap(r),o}catch(n){throw await ap(r),Ua(n)}}a(Voe,"importFromS3");async function Yoe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Poe("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw lt(n,s,n.statusCode,cs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Qoe(r,e.csv_url),await Woe(t,r.raw)}a(Yoe,"downloadCSVFile");async function Koe(e,t){try{let r=`${Pa}/${e}`;await ls.mkdirp(Pa),await ls.writeFile(`${Pa}/${e}`,"",{flag:"a+"});let n=await ls.createWriteStream(r),s=await voe.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){tl.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw tl.error(Ht.S3_DOWNLOAD_ERR+" - "+r),lt(r,Ma(Ht.S3_DOWNLOAD_ERR))}}a(Koe,"downloadFileFromS3");async function Woe(e,t){try{await ls.mkdirp(Pa),await ls.writeFile(`${Pa}/${e}`,t)}catch(r){throw tl.error(Ht.WRITE_TEMP_FILE_ERR),lt(r,Ma(Ht.DEFAULT_BULK_LOAD_ERR))}}a(Woe,"writeFileToTempFolder");async function ap(e){if(e)try{await ls.access(e),await ls.unlink(e)}catch{tl.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(ap,"deleteTempFile");function Qoe(e,t){if(e.statusCode!==tx.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,er.BAD_REQUEST);if(!Goe[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,er.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,er.BAD_REQUEST)}a(Qoe,"validateURLResponse");async function PO(e){try{let t;switch(e.file_type){case cs.VALID_S3_FILE_TYPES.CSV:t=await joe(e);break;case cs.VALID_S3_FILE_TYPES.JSON:t=await zoe(e);break;default:throw lt(new Error,Ht.DEFAULT_BULK_LOAD_ERR,er.BAD_REQUEST,cs.LOG_LEVELS.ERROR,Ht.INVALID_FILE_EXT_ERR(e))}return cx(t.records,t.number_written)}catch(t){throw Ua(t)}}a(PO,"fileLoad");async function sx(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await op.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&nx(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=lt(c);r(l)}}a(sx,"validateChunk");async function ix(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;el.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!el.isEmpty(c)&&!el.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await rx.callOperationFunctionAsAwait(ax,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=lt(c,Ma(Ht.INSERT_CSV_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,Ht.INSERT_CSV_ERR+" - "+c);r(l)}}a(ix,"insertChunk");async function joe(e){let t={records:0,number_written:0},r=ox(e.schema,e.table);try{let n=new DO,s=ls.createReadStream(e.file_path,{highWaterMark:Zq});s.setEncoding("utf8"),await wO.parsePromise(s,sx.bind(null,e,n),CO.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);return s=ls.createReadStream(e.file_path,{highWaterMark:Zq}),s.setEncoding("utf8"),await wO.parsePromise(s,ix.bind(null,e,t),CO.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,Ma(Ht.PAPA_PARSE_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,Ht.PAPA_PARSE_ERR+n)}}a(joe,"callPapaParse");function ox(e,t){let r=Hoe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>qoe(i,s));return n}a(ox,"createTransformMap");function CO(e,t,r){let n=e.get(r);return n?n(t):el.autoCast(t)}a(CO,"typeFunction");async function zoe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new DO,s=Wq([ls.createReadStream(e.file_path,{encoding:"utf-8"}),Qq.withParser(),c=>c.value,new jq({batchSize:ex}),zq(async c=>{await sx(e,n,r,c)})]);await new Promise((c,l)=>{Jq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);let o=Wq([ls.createReadStream(e.file_path,{encoding:"utf-8"}),Qq.withParser(),c=>c.value,new jq({batchSize:ex}),zq(async c=>{await ix(e,t,r,c)})]);return await new Promise((c,l)=>{Jq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw lt(n,Ma(Ht.INSERT_JSON_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,Ht.INSERT_JSON_ERR+n)}}a(zoe,"insertJson");async function ax(e){let t={};try{e.data&&e.data.length>0&&Joe(e.data[0])?t=await Xoe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",tl.info(t.message))}catch(r){throw Ua(r)}return t}a(ax,"callBulkFileLoad");function Joe(e){let t=Object.keys(e);for(let r of t)if(!xoe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Joe,"validateColumnNames");async function Xoe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=op.insert;break;case"update":i=op.update;break;case"upsert":i=op.upsert;break;default:throw lt(new Error,Ht.INVALID_ACTION_PARAM_ERR(n),er.BAD_REQUEST,cs.LOG_LEVELS.ERROR,Ht.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){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 u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=el.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ua(o)}}a(Xoe,"bulkFileLoad");function cx(e,t){return`successfully loaded ${t} of ${e} records`}a(cx,"buildResponseMsg");function Ua(e){return lt(e,Ma(Ht.DEFAULT_BULK_LOAD_ERR),er.INTERNAL_SERVER_ERROR,cs.LOG_LEVELS.ERROR,Ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ua,"buildTopLevelErrMsg")});var _x=g((vNe,ux)=>{"use strict";var UO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ux.exports=UO});var Ex=g((HNe,fx)=>{"use strict";var Zoe=C(),dx=require("moment"),eae=require("uuid").v4,vO=class{static{a(this,"JobObject")}constructor(){this.id=eae(),this.type=void 0,this.start_datetime=dx().valueOf(),this.created_datetime=dx().valueOf(),this.end_datetime=void 0,this.status=Zoe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};fx.exports=vO});var BO=g((xNe,gx)=>{"use strict";var tae=require("uuid").v4,mx=Or(),Sx=Ar(),rae=Xn(),nae=pc(),sae=_x(),ut=C(),iae=Ex(),oae=VE(),xn=G(),aae=ru(),rl=W(),{promisify:cae}=require("util"),va=require("moment"),lae=Yh(),lp=OO(),hx=QT(),{deleteTransactionLogsBeforeValidator:uae}=GA(),{handleHDBError:_ae,hdb_errors:dae}=se(),{HTTP_STATUS_CODES:fae}=dae,px=Sx.searchByValue,Eae=Sx.searchByHash,hae=mx.insert,pae=cae(lae.evaluateSQL),mae=mx.update;gx.exports={addJob:gae,updateJob:Aae,handleGetJob:Sae,handleGetJobsByStartDate:Tae,getJobById:Tx};async function Sae(e){try{let t=await Tx(e.id);return rl.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 xn.error("There was an error getting job",t),new Error(r)}}a(Sae,"handleGetJob");async function Tae(e){try{let t=await Rae(e);if(xn.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=va(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=va(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 xn.error(r),new Error(r)}}a(Tae,"handleGetJobsByStartDate");async function gae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||rl.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return xn.info(u),t.error=u,t}if(!ut.JOB_TYPE_ENUM[e.operation])return xn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ut.OPERATIONS_ENUM.CSV_FILE_LOAD:n=lp.fileObject(e);break;case ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=lp.urlObject(e);break;case ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=lp.dataObject(e);break;case ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=lp.s3FileObject(e);break;case ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=hx(e,"date");break;case ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=hx(e,"timestamp");break;case ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=uae(e);break;default:break}if(n)throw _ae(n,n.message,fae.BAD_REQUEST,void 0,void 0,!0);let s=new iae;s.type=e.operation===ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new rae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await px(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=tae();try{o=await px(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return xn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return xn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new aae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await hae(l)}catch(u){return xn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,xn.trace(u)}return t}a(gae,"addJob");async function Rae(e){let t=va(e.from_date,va.ISO_8601),r=va(e.to_date,va.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new sae(n,e.hdb_user);try{return await pae(s)}catch(i){throw xn.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(Rae,"getJobsInDateRange");async function Tx(e){if(rl.isEmptyOrZeroLength(e))return rl.errorizeMessage("Invalid job ID specified.");let t=new nae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Eae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xn.error(n),rl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Tx,"getJobById");async function Aae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(rl.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ut.JOB_STATUS_ENUM.COMPLETE||e.status===ut.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=va().valueOf());let t=new oae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await mae(t),r}a(Aae,"updateJob")});var yx=g((FNe,bx)=>{"use strict";var Rx=W(),xr=C(),Oae=require("moment"),up=MO(),_p=G(),Ax=BO(),Ox=Kh(),Nx=ta(),Nae=tt(),bae=xh(),HO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function yae(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(Rx.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Rx.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case xr.JOB_TYPE_ENUM.csv_file_load:await Ri(e,up.csvFileLoad);break;case xr.JOB_TYPE_ENUM.csv_url_load:await Ri(e,up.csvURLLoad);break;case xr.JOB_TYPE_ENUM.csv_data_load:await Ri(e,up.csvDataLoad);break;case xr.JOB_TYPE_ENUM.import_from_s3:await Ri(e,up.importFromS3);break;case xr.JOB_TYPE_ENUM.empty_trash:break;case xr.JOB_TYPE_ENUM.export_local:await Ri(e,Ox.export_local);break;case xr.JOB_TYPE_ENUM.export_to_s3:await Ri(e,Ox.export_to_s3);break;case xr.JOB_TYPE_ENUM.delete_files_before:case xr.JOB_TYPE_ENUM.delete_records_before:await Ri(e,Nx.deleteFilesBefore);break;case xr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ri(e,Nx.deleteAuditLogsBefore);break;case xr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ri(e,bae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(yae,"parseMessage");async function Ri(e,t){try{e.job.status=xr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Oae().valueOf(),await Ax.updateJob(e.job),await Iae(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):_p.error(`There was an error running ${t.name} job with id ${e.job.id}`),_p.error(n),e.job.message=n,e.job.status=xr.JOB_STATUS_ENUM.ERROR;try{await Ax.updateJob(e.job)}catch(s){throw _p.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ri,"runJob");async function Iae(e){_p.trace("launching job thread:",e),Nae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[xr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Iae,"launchJobThread");bx.exports={parseMessage:yae,RunnerMessage:HO}});var wx=g(($Ne,Ix)=>{"use strict";var qO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Ix.exports=qO});var Yx=g((YNe,VO)=>{"use strict";var hp=Ar(),FO=Yh(),dp=MO(),Ai=HE(),fp=ji(),V_=ta(),wae=ER(),$_=yr(),Ep=FE(),tr=vh(),qt=G(),Cae=bR(),Lae=u_(),Cx=oA(),Dae=th(),Pae=nh(),Mae=aA(),Uae=oh(),vae=ch(),xO=uh(),Lx=Kh(),Bae=$h(),kO=BO(),x=C(),{hdb_errors:K_,handleHDBError:Y_}=se(),{HTTP_STATUS_CODES:Dx}=K_,GO=dh(),Px=Na(),Fx=require("util"),nl=Or(),Hae=wn(),qae=_i(),Mx=yx(),Ux=o_(),vx=(Ih(),ie(y_)),Bx=Et(),Hx=xh(),qx=Ph(),{setServerUtilities:xae}=(pE(),ie(Mg)),{CONTEXT:Gae}=(Wn(),ie(ES)),{_assignPackageExport:Fae}=require("../index"),{transformReq:kae}=W(),{server:$ae}=(Er(),ie(Ho)),Vae=NO(),xx=hp.searchByHash,Yae=hp.searchByValue,Kae=Fx.promisify(hp.search),Wae=Fx.promisify(FO.evaluateSQL),Qae={[x.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[x.OPERATIONS_ENUM.CREATE_TABLE]:!0,[x.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[x.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[x.OPERATIONS_ENUM.DROP_TABLE]:!0,[x.OPERATIONS_ENUM.DROP_SCHEMA]:!0},K=wx();async function kx(e,t){try{if(e.body.operation!=="read_log"&&(qt.log_level===x.LOG_LEVELS.INFO||qt.log_level===x.LOG_LEVELS.DEBUG||qt.log_level===x.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;qt.info(o)}}catch(n){qt.error(n)}let r=await Vae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Qae[e.body.operation]&&Hae.setSchemaDataToGlobal(n=>{n&&qt.error(n)}),r}a(kx,"processLocalTransaction");var Gx=zae();VO.exports={chooseOperation:$x,getOperationFunction:Vx,operation:$O,processLocalTransaction:kx};xae(VO.exports);$ae.operation=$O;function $x(e){let t;try{t=Vx(e)}catch(s){throw qt.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=FO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=FO.checkASTPermissions(e,i);if(o)throw qt.error(`${Dx.FORBIDDEN} from operation ${e.operation}`),qt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Y_(new Error,o,K_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==x.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==x.OPERATIONS_ENUM.LOGIN&&e.operation!==x.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Bae.verifyPerms(i,s);if(o)throw qt.error(`${Dx.FORBIDDEN} from operation ${e.operation}`),qt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Y_(new Error,o,K_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Y_(s,"There was an error when trying to choose an operation path")}return r}a($x,"chooseOperation");function Vx(e){if(qt.trace(`getOperationFunction with operation: ${e.operation}`),Gx.has(e.operation))return Gx.get(e.operation);throw Y_(new Error,K_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),K_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Vx,"getOperationFunction");Fae("operation",$O);function $O(e,t){e.hdb_user=this[Gae]?.user,e.bypass_auth=!t;let r=$x(e);return kx({body:e},r)}a($O,"operation");async function jae(e){qt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[x.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case x.OPERATIONS_ENUM.INSERT:o=await nl.insert(i);break;case x.OPERATIONS_ENUM.UPDATE:o=await nl.update(i);break;case x.OPERATIONS_ENUM.UPSERT:o=await nl.upsert(i);break;case x.OPERATIONS_ENUM.DELETE:o=await V_.deleteRecord(i);break;default:qt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){qt.info("Invalid operation in transaction"),qt.error(o)}}a(jae,"catchup");async function qs(e){kae(e);let t,r;try{r=await kO.addJob(e),t=r.createdJob,qt.info("addJob result",r);let n=new Mx.RunnerMessage(t,e);return await Mx.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw qt.error(s),Y_(n,s)}}a(qs,"executeJob");function zae(){let e=new Map;return e.set(x.OPERATIONS_ENUM.INSERT,new K(nl.insert)),e.set(x.OPERATIONS_ENUM.UPDATE,new K(nl.update)),e.set(x.OPERATIONS_ENUM.UPSERT,new K(nl.upsert)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(hp.searchByConditions)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(xx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_ID,new K(xx)),e.set(x.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Yae)),e.set(x.OPERATIONS_ENUM.SEARCH,new K(Kae)),e.set(x.OPERATIONS_ENUM.SQL,new K(Wae)),e.set(x.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(qs,dp.csvDataLoad)),e.set(x.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(qs,dp.csvFileLoad)),e.set(x.OPERATIONS_ENUM.CSV_URL_LOAD,new K(qs,dp.csvURLLoad)),e.set(x.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(qs,dp.importFromS3)),e.set(x.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ai.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ai.createSchema)),e.set(x.OPERATIONS_ENUM.CREATE_TABLE,new K(Ai.createTable)),e.set(x.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ai.createAttribute)),e.set(x.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ai.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_DATABASE,new K(Ai.dropSchema)),e.set(x.OPERATIONS_ENUM.DROP_TABLE,new K(Ai.dropTable)),e.set(x.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ai.dropAttribute)),e.set(x.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(fp.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(fp.describeSchema)),e.set(x.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(fp.describeTable)),e.set(x.OPERATIONS_ENUM.DESCRIBE_ALL,new K(fp.describeAll)),e.set(x.OPERATIONS_ENUM.DELETE,new K(V_.deleteRecord)),e.set(x.OPERATIONS_ENUM.ADD_USER,new K($_.addUser)),e.set(x.OPERATIONS_ENUM.ALTER_USER,new K($_.alterUser)),e.set(x.OPERATIONS_ENUM.DROP_USER,new K($_.dropUser)),e.set(x.OPERATIONS_ENUM.LIST_USERS,new K($_.listUsersExternal)),e.set(x.OPERATIONS_ENUM.LIST_ROLES,new K(Ep.listRoles)),e.set(x.OPERATIONS_ENUM.ADD_ROLE,new K(Ep.addRole)),e.set(x.OPERATIONS_ENUM.ALTER_ROLE,new K(Ep.alterRole)),e.set(x.OPERATIONS_ENUM.DROP_ROLE,new K(Ep.dropRole)),e.set(x.OPERATIONS_ENUM.USER_INFO,new K($_.userInfo)),e.set(x.OPERATIONS_ENUM.READ_LOG,new K(Cae)),e.set(x.OPERATIONS_ENUM.ADD_NODE,new K(Lae)),e.set(x.OPERATIONS_ENUM.UPDATE_NODE,new K(Cx)),e.set(x.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(Cx)),e.set(x.OPERATIONS_ENUM.REMOVE_NODE,new K(Dae)),e.set(x.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(Pae)),e.set(x.OPERATIONS_ENUM.PURGE_STREAM,new K(Mae)),e.set(x.OPERATIONS_ENUM.SET_CONFIGURATION,new K(Bx.setConfiguration)),e.set(x.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Uae.clusterStatus)),e.set(x.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(vae)),e.set(x.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(xO.setRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(xO.getRoutes)),e.set(x.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(xO.deleteRoutes)),e.set(x.OPERATIONS_ENUM.EXPORT_TO_S3,new K(qs,Lx.export_to_s3)),e.set(x.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(qs,V_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(qs,V_.deleteFilesBefore)),e.set(x.OPERATIONS_ENUM.EXPORT_LOCAL,new K(qs,Lx.export_local)),e.set(x.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(kO.handleGetJobsByStartDate)),e.set(x.OPERATIONS_ENUM.GET_JOB,new K(kO.handleGetJob)),e.set(x.OPERATIONS_ENUM.GET_FINGERPRINT,new K(GO.getFingerprint)),e.set(x.OPERATIONS_ENUM.SET_LICENSE,new K(GO.setLicense)),e.set(x.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(GO.getRegistrationInfo)),e.set(x.OPERATIONS_ENUM.RESTART,new K(Px.restart)),e.set(x.OPERATIONS_ENUM.RESTART_SERVICE,new K(Px.restartService)),e.set(x.OPERATIONS_ENUM.CATCHUP,new K(jae)),e.set(x.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(qae.systemInformation)),e.set(x.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(qs,V_.deleteAuditLogsBefore)),e.set(x.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(wae)),e.set(x.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(Ux.createTokens)),e.set(x.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(Ux.refreshOperationToken)),e.set(x.OPERATIONS_ENUM.LOGIN,new K(vx.login)),e.set(x.OPERATIONS_ENUM.LOGOUT,new K(vx.logout)),e.set(x.OPERATIONS_ENUM.GET_CONFIGURATION,new K(Bx.getConfiguration)),e.set(x.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(tr.customFunctionsStatus)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(tr.getCustomFunctions)),e.set(x.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(tr.getComponentFile)),e.set(x.OPERATIONS_ENUM.GET_COMPONENTS,new K(tr.getComponents)),e.set(x.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(tr.setComponentFile)),e.set(x.OPERATIONS_ENUM.DROP_COMPONENT,new K(tr.dropComponent)),e.set(x.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(tr.getCustomFunction)),e.set(x.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(tr.setCustomFunction)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(tr.dropCustomFunction)),e.set(x.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(tr.addComponent)),e.set(x.OPERATIONS_ENUM.ADD_COMPONENT,new K(tr.addComponent)),e.set(x.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(tr.dropCustomFunctionProject)),e.set(x.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(tr.packageComponent)),e.set(x.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(tr.packageComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(tr.deployComponent)),e.set(x.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(tr.deployComponent)),e.set(x.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(Hx.readTransactionLog)),e.set(x.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(qs,Hx.deleteTransactionLogsBefore)),e.set(x.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(qx.installModules)),e.set(x.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(qx.auditModules)),e.set(x.OPERATIONS_ENUM.GET_BACKUP,new K(Ai.getBackup)),e}a(zae,"initializeOperationFunctionMap")});var mp=g((WNe,Qx)=>{"use strict";var YO=C(),Jae=W(),W_=G(),{handleHDBError:KO,hdb_errors:pp}=se(),{isMainThread:Xae}=require("worker_threads"),{Readable:Zae}=require("stream"),Kx=require("os"),ece=require("util"),tce=vR(),rce=ece.promisify(tce.authorize),Wx=Yx(),{createGzip:nce,constants:sce}=require("zlib");function ice(e){let t=`Found an uncaught exception with message: ${e.message}. ${Kx.EOL}Stack: ${e.stack} ${Kx.EOL}Terminating ${Xae?"HDB":"thread"}.`;console.error(t),W_.fatal(t),process.exit(1)}a(ice,"handleServerUncaughtException");function oce(e,t,r){if(W_[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 n=e.statusCode?e.statusCode:pp.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(oce,"serverErrorHandler");function ace(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=KO(new Error,"Invalid JSON.",pp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Jae.isEmpty(e.body.operation)){let n=KO(new Error,"Request body must include an 'operation' property.",pp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ace,"reqBodyValidationHandler");function cce(e,t,r){let n;e.body.operation!==YO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==YO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==YO.OPERATIONS_ENUM.LOGOUT?rce(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{W_.warn(s),W_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(KO(s,i,pp.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(cce,"authHandler");async function lce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Wx.chooseOperation(e.body);let s=await Wx.processLocalTransaction(e,n);if(s instanceof Zae&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(nce({level:sce.Z_BEST_SPEED})))}return s}catch(s){throw W_.error(s),s}}a(lce,"handlePostRequest");Qx.exports={authHandler:cce,handlePostRequest:lce,handleServerUncaughtException:ice,serverErrorHandler:oce,reqBodyValidationHandler:ace}});var Xx=g((jNe,Jx)=>{"use strict";var uce=require("fastify-plugin"),{handlePostRequest:jx,authHandler:_ce,reqBodyValidationHandler:dce}=mp();async function fce(e){e.decorate("hdbCore",{preValidation:[dce,_ce],request:t=>zx(jx(t,response)),requestWithoutAuthentication:(t,r)=>zx(jx(t,r,!0))})}a(fce,"hdbCore");async function zx(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(zx,"convertAsyncIterators");Jx.exports=uce(fce)});var tG=g((XNe,eG)=>{"use strict";var JNe=require("fs"),WO=J();WO.initSync();var{CONFIG_PARAMS:Zx}=C(),Ece=1024*1024*1024;function hce(e){let t=WO.get(Zx.HTTP_TIMEOUT),r=WO.get(Zx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Ece,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(hce,"getServerOptions");eG.exports=hce});var sG=g((ebe,nG)=>{"use strict";var QO=J();QO.initSync();var{CONFIG_PARAMS:rG}=C();function pce(){let e=QO.get(rG.HTTP_CORSACCESSLIST),t=QO.get(rG.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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(pce,"getCORSOptions");nG.exports=pce});var aG=g((rbe,oG)=>{"use strict";var iG=J();iG.initSync();var mce=C();function Sce(){return iG.get(mce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Sce,"getHeaderTimeoutConfig");oG.exports=Sce});var zO={};$e(zO,{customFunctionsServer:()=>Rce,ready:()=>AG,start:()=>gce});function gce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Oi||(Oi=RG(t),it.http((await Oi).server));let o=await Oi,c=(0,jO.dirname)(s),l=(0,jO.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!cG.has(c)){cG.add(c);try{o.register(Oce(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:AG}}async function Rce(){try{Ke.info("In Custom Functions Fastify server"+process.cwd()),Ke.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ke.debug(`Custom Functions server process ${process.pid} starting up.`),await Ace();let e=EG.get(hG.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Oi=await RG(e)}catch(r){throw Ke.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ke.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ke.error(`Custom Functions ${process.pid} Error: ${e}`),Ke.error(e),process.exit(1)}}async function Ace(){try{Ke.info("Custom Functions starting configuration."),await pG.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Oce(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,lG.existsSync)(e)&&r.register(fG.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ke.error(s.message):s&&Ke.error(s),o()})}catch(n){Ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function RG(e){Ke.info("Custom Functions starting buildServer.");let t=(0,mG.default)(e),r=(0,uG.default)(t);r.server.headersTimeout=(0,TG.default)(),r.setErrorHandler(gG.serverErrorHandler);let n=(0,SG.default)();return n&&r.register(_G.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(dG.default),await r.register(Tce),await r.after(),lO(r),Ke.info("Custom Functions completed buildServer."),r}function AG(){if(Oi)return Oi.then?Oi.then(e=>e.ready()):Oi.ready()}var jO,lG,uG,_G,dG,fG,EG,hG,Ke,Tce,pG,mG,SG,TG,gG,Oi,cG,OG=Ne(()=>{jO=require("path"),lG=require("fs"),uG=q(require("fastify")),_G=q(require("@fastify/cors")),dG=q(mO()),fG=q(require("@fastify/autoload")),EG=q(J()),hG=q(C()),Ke=q(G()),Tce=q(Xx()),pG=q(yr()),mG=q(tG()),SG=q(sG()),TG=q(aG()),gG=q(mp());Yc();Er();cG=new Set;a(gce,"start");a(Rce,"customFunctionsServer");a(Ace,"setUp");a(Oce,"buildRouteFolder");a(RG,"buildServer");a(AG,"ready")});var JO={};$e(JO,{start:()=>Nce});function Nce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,wG.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){bG||(bG=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=NG.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,yG.default)(s,(0,IG.realpathSync)(o))}}return i(s)},{runFirst:!0})),NG.set(r,n)}}}var yG,IG,wG,NG,bG,CG=Ne(()=>{yG=q(require("send")),IG=require("fs"),wG=q(require("serve-static")),NG=new Map;a(Nce,"start")});var tN={};$e(tN,{Request:()=>XO,createReuseportFd:()=>Sp});var LG,XO,ZO,eN,Sp,Tp=Ne(()=>{LG=require("os"),XO=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new eN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new ZO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},ZO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},eN=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,n]of this)t(n,r,this)}};(0,LG.platform)()!="win32"&&(Sp=require("node-unix-socket").createReuseportFd)});var UG=g((Ebe,MG)=>{"use strict";var bce=require("cluster"),Ba=J();Ba.initSync();var PG=C(),lbe=require("util"),Ni=G(),ube=require("fs"),yce=require("fastify"),_be=Bo(),Ice=require("@fastify/cors"),wce=require("@fastify/compress"),Cce=require("@fastify/static"),Lce=mO(),Dce=require("path"),{PACKAGE_ROOT:Pce}=C(),Mce=wn(),Uce=W(),vce=yr(),Bce=ia(),{server:Hce}=(Er(),ie(Ho)),{node_request_key:dbe}=(Tp(),ie(tN)),{authHandler:qce,handlePostRequest:xce,serverErrorHandler:Gce,reqBodyValidationHandler:Fce}=mp(),fbe=require("net"),{registerContentHandlers:kce}=(Yc(),ie(yq)),$ce=6e4,Vce=1024*1024*1024,Yce="TRUE",{CONFIG_PARAMS:Q_}=PG,sl;MG.exports={hdbServer:DG,start:DG};async function DG(e){try{Ni.info("In Fastify server"+process.cwd()),Ni.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ni.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=bce.isMaster,await Kce();let t=e.securePort>0;sl=Wce(t),await sl.ready(),e||(e={}),e.isOperationsServer=!0;try{Hce.http(sl.server,e),sl.server.closeIdleConnections||await sl.listen({port:0,host:"::"})}catch(r){throw sl.close(),Ni.error(r),Ni.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ni.fatal(t),process.exit(1)}}a(DG,"operationsServer");async function Kce(){Ni.trace("Configuring HarperDB process."),Mce.setSchemaDataToGlobal(),await vce.setUsersToGlobal(),await Bce.getLicense()}a(Kce,"setUp");function Wce(e){Ni.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Qce(e),r=yce(t);r.server.headersTimeout=zce(),r.setErrorHandler(Gce);let n=jce();n&&r.register(Ice,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Lce),r.register(wce),r.register(Cce,{root:Dce.join(Pce,"studio/build-local")}),kce(r);let s=Ba.get(PG.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Uce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Fce,qce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),xce(i,o)}),r.get("/health",()=>"HarperDB is running."),Ni.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Wce,"buildServer");function Qce(e){let t=Ba.get(Q_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ba.get(Q_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Vce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Qce,"getServerOptions");function jce(){let e=Ba.get(Q_.OPERATIONSAPI_NETWORK_CORS),t=Ba.get(Q_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Yce)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(jce,"getCORSOpts");function zce(){return Ba.get(Q_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??$ce}a(zce,"getHeaderTimeoutConfig")});var VG=g((Tbe,$G)=>{"use strict";var{decode:Jce}=require("msgpackr"),{isMainThread:pbe,parentPort:Xce,threadId:mbe}=require("worker_threads"),nN=ht(),bi=et(),Zce=C(),So=G(),vG=J(),HG=C();tt();var ele=ci(),{recordAction:tle,recordActionBinary:rle}=(li(),ie(Pu)),{publishToStream:nle}=nN,{ConsumerEvents:sle}=require("nats"),Sbe={durable:bi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:bi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},ile,ole,ale,qG,xG;$G.exports={initialize:sN,workQueueListener:kG,setSubscription:cle,setIgnoreOrigin:ule,getDatabaseSubscriptions:lle};async function sN(){xG=!0,So.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await nN.getNATSReferences();ile=e,ole=e.info.server_name,ale=t,qG=r}a(sN,"initialize");var Rp=new Map;function cle(e,t,r){let n=Rp.get(e);n||Rp.set(e,n=new Map),n.set(t,r),xG||sN().then(kG)}a(cle,"setSubscription");function lle(){return Rp}a(lle,"getDatabaseSubscriptions");var GG;function ule(e){GG=e}a(ule,"setIgnoreOrigin");var FG=100,BG=new Array(FG),gp=0;async function kG(){let e=await qG.consumers.get(bi.WORK_QUEUE_CONSUMER_NAMES.stream_name,bi.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Xce?.on("message",async n=>{let{type:s}=n;s===HG.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===sle.HeartbeatsMissed){let s=n.data;So.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(So.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await BG[gp],BG[gp]=_le(n).catch(s=>{So.error(s)}),++gp>=FG&&(gp=0)}catch(n){So.error("Error consuming clustering ingest, restarting consumer",n)}nN.clearClientCache(),await sN()}}a(kG,"workQueueListener");async function _le(e){let t=Jce(e.data);tle(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=vG.get(Zce.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bi.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bi.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(bi.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!GG),rle(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(bi.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;So.trace("processing message:",o,c,_,(u?"records: "+u.map(R=>R?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),So.trace(`messageProcessor nats msg id: ${e.headers.get(bi.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let{timestamp:m,user:S,node_name:A}=f||{},T=Rp.get(c)?.get(_);if(!T)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,T.send(t);else if(u.length===1&&!l)T.send({type:rN(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:m,table:_,onCommit:h,user:S,nodeName:A});else{let R=u.map((U,B)=>({type:rN(o),value:U,expiresAt:E,id:d?.[B],table:_}));for(;l;)R.push({type:rN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;T.send({type:"transaction",writes:R,table:_,timestamp:m,onCommit:h,user:S,nodeName:A})}vG.get(HG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&nle(e.subject.split(".").slice(0,-1).join("."),ele.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){So.error(o)}e.ack()}a(_le,"messageProcessor");function rN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(rN,"convertOperation")});var uN={};$e(uN,{disableNATS:()=>fle,publishToStream:()=>yp,setNATSReplicator:()=>iN,setPublishToStream:()=>Ele,setSubscription:()=>lN,start:()=>dle});function dle(){Op.default.get(Np.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ple()}function fle(e=!0){jG=e}function Ele(e,t){yp=e,lN=t}function ple(){if(jG||process.env._DISABLE_NATS)return;let e=es(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];iN(s,r,i)}}qg((r,n)=>{iN(r.tableName,r.databaseName,r),n&&JG(r)}),!YG&&(YG=!0)}function iN(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Qt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){JG(i)}static subscribe(){let i=new Kn;return lN(t,e,i),i}static subscribeOnThisThread(i){return i<hle}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Ap(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=zG;return i}a(n,"getNATSTransaction")}function JG(e){let t=Op.default.get(Np.default.CONFIG_PARAMS.CLUSTERING_NODENAME);yp(`${aN.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,cN.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 KG,aN,cN,WG,QG,Op,Np,bp,jG,yp,lN,hle,zG,YG,Ap,oN,XG=Ne(()=>{Re();Wn();KG=q(ht()),aN=q(et()),cN=q(ci());Gl();WG=q(VG()),QG=q(pr()),Op=q(J()),Np=q(C()),bp=q(G());a(dle,"start");a(fle,"disableNATS");yp=KG.publishToStream,lN=WG.setSubscription;a(Ele,"setPublishToStream");hle=2;a(ple,"assignReplicationSource");a(iN,"setNATSReplicator");a(JG,"publishSchema");Ap=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 n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Op.default.get(Np.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(bp.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(yp(`${aN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,cN.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw bp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},oN=class extends Ap{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,QG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};zG=new oN});var mN=g(Ha=>{"use strict";var{isMainThread:sF,parentPort:z_,threadId:Ip}=require("worker_threads"),{Socket:mle,createServer:Sle}=require("net"),{createServer:Tle,IncomingMessage:gle}=require("http"),{createServer:Rle}=require("https"),{readFileSync:il,unlinkSync:ZG,existsSync:Ale}=require("fs"),cr=G(),Pe=J(),yt=C(),{server:Dp}=(Er(),ie(Ho)),{WebSocketServer:Ole}=require("ws"),{createServer:Nle}=require("tls"),{getTicketKeys:ble,restartNumber:yle,getWorkerIndex:Cp}=tt(),{Headers:iF,appendHeader:Ile}=(Mu(),ie(pM)),{recordAction:j_,recordActionBinary:wle}=(li(),ie(Pu)),{Request:oF,createReuseportFd:eF}=(Tp(),ie(tN)),{checkMemoryLimit:Cle}=ia(),aF=require("tls"),tF=aF.createSecureContext;aF.createSecureContext=function(e){if(!e.cert||!e.key)return tF(e);let t={...e};delete t.key,delete t.cert;let r=tF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var cF=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG);if(cF){let e;if(sF)e=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){cr.info("Could not close debugger",t)}});else{let t=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Cp()>=0&&(e=t+Cp())}if(e){let t=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){cr.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){yle<=1&&cr.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:ybe,CONFIG_PARAMS:Lle}=yt;Pe.initSync();var Dle=Pe.get(Lle.HTTP_SESSIONAFFINITY),xs={};Ha.registerServer=hN;Ha.httpServer=pN;Ha.deliverSocket=EN;Ha.startServers=lF;Ha.when_components_loaded=null;Dp.http=pN;Dp.request=vle;Dp.socket=Ble;Dp.ws=Hle;var _N={},wp={},Ple,To={},Lp={},Mle=[],dN=[];function lF(){return Ha.when_components_loaded=Pp().loadRootComponents(!0).then(()=>{z_?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)EN(n,r,s);else if(t.requestId)Ule(t);else if(t.type===yt.ITC_EVENT_TYPES.SHUTDOWN){cr.trace("received shutdown request",Ip);for(let i in xs){let o=xs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(f=>f.description.includes("connections")),u=0,d=setInterval(()=>{u++;let f=u>=100,E=o[_][f?"all":"idle"]();if(E.length===0){f&&clearInterval(d);return}u===1?cr.info(`Closing ${E.length} idle connections`):f&&cr.warn(`Forcefully closing ${E.length} active connections`);for(let h=0,m=E.length;h<m;h++){let S=E[h].socket;S._httpMessage&&!S._httpMessage.finished&&!f||(f?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
28
28
|
Connection: close\r
|
|
29
29
|
\r
|
|
30
|
-
`))}},25).unref()}o.close?.(()=>{if(
|
|
31
|
-
`)}a(sF,"defaultNotFound")});async function hF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await TN.getResource(e,{});s=new AN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await TN.get(e);i&&i.delete()}s=new Mp(e,t)}return n&&(n.id=e,n.user={username:t?.username},J_.put(n)),s}function gN(){return Pp++,Pp>65500&&(Pp=1),Pp}function RN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Vi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var dF,go,fF,EF,TN,J_,Pp,Mp,AN,pF=Ne(()=>{Re();Wl();dF=q(hr()),go=q(G());$o();fF=q(tt()),EF=q(SN());fr();TN=ft({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"}]}}]}),J_=ft({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,fF.getWorkerIndex)()===0&&(async()=>{await EF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of J_.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await it.getUser(r.user.username)),Ze(r,()=>{try{RN(r,t)}catch{(0,go.warn)("Failed to publish will",t)}J_.delete(e.id,r)})}})();a(hF,"getSession");Pp=1;a(gN,"getNextMessageId");Mp=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(A=>A.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,go.trace)("Resuming subscription from",s,"from",o);let E=Vi.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let T=A.split("/"),R;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&R)throw new Error("Filters can not be combined");let U=!0;T[T.length-1]==="#"&&(T.length--,U=!1),R&&(n=a(v=>{let P=v.id;if(!Array.isArray(P)||U&&P.length!==T.length)return!1;for(let V=0;V<T.length;V++)if(T[V]!=="+"&&T[V]!==P[V])return!1;return!0},"filter"));let B=T.indexOf("+");f.url="/"+(B>-1?T.slice(0,B):T).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let A=await m.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let T of A)try{let R;if(T.type&&T.type!=="put"&&T.type!=="delete"&&T.type!=="message"&&T.type!=="patch"||n&&!n(T))continue;r?(T.topic=s,R=this.needsAcknowledge(T)):(T.acknowledge?.(),R=gN());let U=T.id;Array.isArray(U)&&(U=ac(U)),U==null&&(U=""),this.listener(h+"/"+U,T.value,R,t)}catch(R){(0,go.warn)(R)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=gN();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(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,RN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ze(r,async()=>{if(!t){let n=await J_.get(this.sessionId,r);n?.doesExist()&&await RN(n,n.data,r)}await J_.delete(this.sessionId,r)}).catch(n=>{(0,go.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(RN,"publish");AN=class extends Mp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=gN(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,go.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,dF.getNextMonotonicTime)()),(0,go.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),TN.put(this.sessionRecord)),t.qos}}});var ON={};$e(ON,{bypassAuth:()=>qle,start:()=>xle});function qle(){RF=!0}function xle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=TF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,qr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(l){if(_.authorized)try{let E=l.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null))}catch(E){(0,qr.error)(E)}else if(l.required)return(0,qr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&RF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,gF.getSuperUser)());let{onMessage:d,onClose:f}=TF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,qr.info)("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function TF(e,t,r,n,s){SF||(SF=!0,Du(d=>{Up>0&&d.push({metric:"mqtt-connections",connections:Up,byThread:!0})}));let i;Up++;let o,c={protocolVersion:4},l=(0,Bp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Up--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Cn(!1,"connection","mqtt","disconnect"))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await it.getUser(d.username,d.password.toString(),r),(0,vp.get)(Gs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mF.notify({username:n.username,status:Gs.AUTH_AUDIT_STATUS.SUCCESS,type:Gs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,vp.get)(Gs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mF.error({username:n.username,status:Gs.AUTH_AUDIT_STATUS.FAILURE,type:Gs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let R=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=hF({user:n,...d}),o=await o,s.sessions.add(o)}catch(R){return(0,qr.error)(R),Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}Cn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,U,B,v)=>{try{let P=R.indexOf("/",1),V=P>0?R.slice(0,P):R;f({cmd:"publish",topic:R,payload:E(U),messageId:B||Math.floor(Math.random()*1e8),qos:v.qos},V)}catch(P){(0,qr.error)(P),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let U;try{U=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(B){(0,qr.error)(B),U=c.protocolVersion<5?128:B.statusCode===403?135:B.statusCode===404?143:128}h.push(U)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let U of d.unsubscriptions)R.push(o.removeSubscription(U)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,T;try{T=await o.publish(d,A)}catch(R){(0,qr.warn)(R),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:T===!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(!0),s.sessions.delete(o),Cn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,qr.error)(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Bp.generate)(h,c);t(S),nn(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Eo(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Bp,gF,vp,Gs,qr,mF,RF,SF,Up,AF=Ne(()=>{Bp=require("mqtt-packet");pF();gF=q(Nr());Yc();li();fr();vp=q(J()),Gs=q(w()),qr=q(G()),mF=(0,qr.loggerWithTag)("auth-event"),RF=(0,vp.get)(Gs.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(qle,"bypassAuth");a(xle,"start");Up=0;a(TF,"onSocket")});var Bh={};$e(Bh,{component_errors:()=>al,loadComponent:()=>Hp,loadComponentDirectories:()=>DF,setErrorReporter:()=>$le});function DF(e,t){t&&(bN=t),e&&(yN=e);let r=[];if((0,us.existsSync)(NN)){let s=(0,us.readdirSync)(NN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,yt.join)(NN,o);r.push(Hp(c,bN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Hp(n,bN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{LF=!0})}function $le(e){Z_=e}async function Hp(e,t,r,n,s,i){if(!NF.has(e)){NF.set(e,!0),s&&(yN=s);try{let o;n&&(al=new Map);let c=(0,yt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,us.existsSync)(c)?o=n?(0,CF.getConfigObj)():(0,bF.parseDocument)((0,us.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=IN;let l=[],_=n;for(let u in o){let d=o[u];if(al.set(n?u:(0,yt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let T=e,R;for(;!(0,us.existsSync)(R=(0,yt.join)(T,"node_modules",u));)if(T=(0,yt.dirname)(T),T.length<(0,wF.getHdbBasePath)().length){R=null;break}if(R)f=await Hp(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=kle[u];if(!f)continue;l.push(f);let h=a(T=>(T.origin=r,ft(T)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,A=!m?.https&&m?.port;if(ol.isMainThread&&(f=await f.startOnMainThread?.({server:it,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&m))for(let T of[A,S])try{if(+T&&!OF.includes(T)){let R=wN.get(CN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&X_.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!Sp)&&(OF.push(T),LN(T,R))}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(f=await f.start?.({server:it,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),yN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,IF.handleHDBError)("Can not reference parent directories");let T=(0,yt.join)(e,d.files).replace(/\\/g,"/"),R=T.indexOf("/*");if(R>-1&&d.files!==IN[u]?.files&&!(0,us.existsSync)(T.slice(0,R)))throw new Error(`The path '${T.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let U=(0,yt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+U+B.slice(2):B==="."?"/"+U:"/"+U+"/"+B;let v,P,V;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",P=(0,yt.join)(e,z)}else(V=T.indexOf("/*"))>-1&&(P=T.slice(0,V+1),v=(0,yt.relative)(e,P));let Y=!1;if(ol.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(B,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(B,P,t)),Y)continue;for(let z of await(0,yF.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:oe,dirent:Se}=z;_=!0;let ue=(0,yt.relative)(e,oe).replace(/\\/g,"/");if(v)if(ue.startsWith(v))ue=ue.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Fe=B+(B.endsWith("/")?"":"/")+ue;try{if(Se.isFile()){let de=await Fle(oe);ol.isMainThread&&await f.setupFile?.(de,Fe,oe,t),t.isWorker&&await f.handleFile?.(de,Fe,oe,t)}else ol.isMainThread&&await f.setupDirectory?.(Fe,oe,t),t.isWorker&&await f.handleDirectory?.(Fe,oe,t)}catch(de){de.message=`Could not load ${Se.isFile()?"file":"directory"} '${oe}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,Z_?.(de),((0,cl.getWorkerIndex)()===0?console:X_.default).error(de),t.set(d.path||"/",new ed(de)),al.set(n?u:(0,yt.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,yt.basename)(e)}' due to: ${h.message}`,Z_?.(h),((0,cl.getWorkerIndex)()===0?console:X_.default).error(h),t.set(d.path||"/",new ed(h),null,!0),al.set(n?u:(0,yt.basename)(e),h.message)}}if(ol.isMainThread&&!LF&&i&&(0,cl.watchDir)(e,async()=>DF()),o.extensionModule)return await wE((0,yt.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;Z_?.(new Error(u)),((0,cl.getWorkerIndex)()===0?console:X_.default).error(u),al.set((0,yt.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Z_?.(o),t.set("",new ed(o))}}}var us,yt,ol,bF,wN,CN,yF,cl,X_,IF,wF,Gle,CF,Fle,NN,yN,LF,bN,al,kle,IN,OF,NF,Z_,ed,Hh=Ne(()=>{us=require("fs"),yt=require("path"),ol=require("worker_threads"),bF=require("yaml"),wN=q(J()),CN=q(w());zM();eU();tU();Hq();NG();LG();yF=q(require("fast-glob")),cl=q(tt()),X_=q(G());Yg();fr();IF=q(se());Wn();Re();qp();wF=q(J()),Gle=q(vG());Ih();ZG();AF();CF=q(Et());Tp();({readFile:Fle}=us.promises),NN=wN.get(CN.CONFIG_PARAMS.COMPONENTSROOT),yN=new Map,al=new Map;a(DF,"loadComponentDirectories");kle={REST:Jh,rest:Jh,graphqlSchema:Vg,jsResource:Wg,fastifyRoutes:jO,login:jg,static:zO,operationsApi:Gle,customFunctions:{},http:{},clustering:lN,authentication:y_,mqtt:ON},IN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(IN,"static",{value:{files:"web/**"}});OF=[],NF=new Map;a($le,"setErrorReporter");a(Hp,"loadComponent");ed=class extends Wt{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 Dp=g((Xbe,MF)=>{var{isMainThread:PF}=require("worker_threads"),{getTables:Vle}=(Re(),ie(Ge)),{loadComponentDirectories:Yle,loadComponent:Kle}=(Hh(),ie(Bh)),{resetResources:Wle}=(Wl(),ie(yI)),Qle=BA(),jle=Et(),{dirname:zle}=require("path"),{getConnection:Jle}=ht(),Xle=J(),Zle=w(),DN=new Map;async function eue(e=!1){!PF&&Xle.get(Zle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Jle();try{PF&&await Qle()}catch(n){console.error(n)}let t=Wle();Vle(),t.isWorker=e,await Kle(zle(jle.getConfigFilePath()),t,"hdb",!0,DN),await Yle(DN,t);let r=[];for(let[n]of DN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(eue,"loadRootComponents");MF.exports.loadRootComponents=eue});var tt=g((eye,Ao)=>{"use strict";var{Worker:tue,MessageChannel:rue,parentPort:Fs,isMainThread:BN,threadId:nue,workerData:yi}=require("worker_threads"),{PACKAGE_ROOT:sue}=w(),{join:HF,isAbsolute:iue,extname:oue}=require("path"),{server:qF}=(fr(),ie(Ho)),{watch:aue,readdir:cue}=require("fs/promises"),{totalmem:UF}=require("os"),td=w(),xF=J(),Ii=G(),{randomBytes:lue}=require("crypto"),{_assignPackageExport:uue}=require("../index"),_ue=w(),vF=1024*1024,Ro=[],Gn=[],due=50,HN=1e4,fue="restart",GF="request_thread_info",FF="resource_report",kF="thread_info",$F="added-port",Eue="ack",PN;uue("threads",Gn);Ao.exports={startWorker:MN,restartWorkers:xN,shutdownWorkers:Tue,workers:Ro,setMonitorListener:Iue,onMessageFromWorkers:gue,onMessageByType:zF,broadcast:Aue,broadcastWithAcknowledgement:Nue,setChildListenerByType:Sue,getWorkerIndex:VF,getWorkerCount:YF,getTicketKeys:WF,setMainIsWorker:pue,setTerminateTimeout:hue,restartNumber:yi?.restartNumber||1};Gn.onMessageByType=zF;Gn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Gn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var qN;function hue(e){HN=e}a(hue,"setTerminateTimeout");function VF(){return yi?yi.workerIndex:qN?0:void 0}a(VF,"getWorkerIndex");function YF(){return yi?yi.workerCount:qN?1:void 0}a(YF,"getWorkerCount");function pue(e){qN=e}a(pue,"setMainIsWorker");var KF=1,xp;function WF(){return xp||(xp=BN?lue(48):yi.ticketKeys,xp)}a(WF,"getTicketKeys");Object.defineProperty(qF,"workerIndex",{get(){return VF()}});Object.defineProperty(qF,"workerCount",{get(){return YF()}});var QF={[GF](e,t){bue(t)},[FF](e,t){yue(t,e)}};function MN(e,t={}){let r=process.constrainedMemory?.()||UF();r=Math.min(r,UF(),2e4*vF);let n=xF.get(td.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/vF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Gn){let _=new rue;_.existingPort=l,i.push(_),o.push(_.port2)}oue(e)||(e+=".js");let c=new tue(iue(e)?e:HF(sue,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:KF=t.threadCount,name:t.name,restartNumber:Ao.exports.restartNumber,ticketKeys:WF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:$F,port:l,threadId:c.threadId},[l]);return Fp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>MN(e,t),c.on("error",l=>{console.error("Worker error:",l),Ii.error("Worker error:",l)}),c.on("exit",l=>{Ro.splice(Ro.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<due?(t.unexpectedRestarts=c.unexpectedRestarts+1,MN(e,t)):Ii.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{QF[l.type]?.(l,c)}),Ro.push(c),Cue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(MN,"startWorker");var mue=[td.THREAD_TYPES.HTTP];async function xN(e=null,t=Math.max(KF>3,1),r=!0){if(BN){if(r){let{loadRootComponents:o}=Dp();await o()}Ao.exports.restartNumber++,t<1&&(t=t*Ro.length);let n=[],s=[];for(let o of Ro.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Ii.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ao.exports.restartNumber,type:td.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=mue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),HN*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===_ue.ITC_EVENT_TYPES.CHILD_STARTED&&(Ii.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Ii.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Na();r&&(e==="http"||!e)&&xF.get(td.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Fs.postMessage({type:fue,workerType:e})}a(xN,"restartWorkers");function Sue(e,t){QF[e]=t}a(Sue,"setChildListenerByType");function Tue(e){return xN(e,1/0,!1)}a(Tue,"shutdownWorkers");var jF=[];function gue(e){jF.push(e)}a(gue,"onMessageFromWorkers");var UN=new Map;function zF(e,t){let r=UN.get(e);r||UN.set(e,r=[]),r.push(t)}a(zF,"onMessageByType");var Rue=10;async function Aue(e){let t=0;for(let r of Gn)try{r.postMessage(e),t++>Rue&&(t=0,await new Promise(setImmediate))}catch(n){Ii.error("Unable to send message to worker",n)}}a(Aue,"broadcast");var Gp=new Map,Oue=1;function Nue(e){return new Promise(t=>{let r=0;for(let n of Gn)try{let s=Oue++,i=a(()=>{Gp.delete(s),--r===0&&t(),n!==Fs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Gp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Gp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Ii.error("Unable to send message to worker",s)}r===0&&t()})}a(Nue,"broadcastWithAcknowledgement");function bue(e){e.postMessage({type:kF,workers:JF()})}a(bue,"sendThreadInfo");function JF(){let e=Date.now();return Ro.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(JF,"getChildWorkerInfo");function yue(e,t){e.resources=t,e.resources.updated=Date.now()}a(yue,"recordResourceReport");var vN;function Iue(e){vN=e}a(Iue,"setMonitorListener");var wue=1e3,BF=!1;function Cue(){BF||(BF=!0,setInterval(()=>{for(let e of Ro){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}vN&&vN()},wue).unref())}a(Cue,"startMonitoring");var Lue=1e3;if(Fs){Fp(Fs);for(let e=0,t=yi.addPorts.length;e<t;e++){let r=yi.addPorts[e];r.threadId=yi.addThreadIds[e],Fp(r)}setInterval(()=>{let e=process.memoryUsage();Fs.postMessage({type:FF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Lue).unref(),PN=a(()=>new Promise((e,t)=>{Fs.on("message",r),Fs.postMessage({type:GF});function r(n){n.type===kF&&(Fs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else PN=JF;Ao.exports.getThreadInfo=PN;function Fp(e,t){Gn.push(e),e.on("message",r=>{if(r.type===$F)r.port.threadId=r.threadId,Fp(r.port);else if(r.type===Eue){let n=Gp.get(r.id);n&&n()}else{for(let s of jF)s(r,e);let n=UN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Ii.error(i)}}}).on("close",()=>{Gn.splice(Gn.indexOf(e),1)}).on("exit",()=>{Gn.splice(Gn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Fp,"addPort");if(BN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await cue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(HF(n,i.name));try{for await(let{filename:i}of aue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await xN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ao.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Fs.on("message",async e=>{let{type:t}=e;t===td.ITC_EVENT_TYPES.SHUTDOWN&&(Ao.exports.restartNumber=e.restartNumber,Fs.unref(),setTimeout(()=>{Ii.warn("Thread did not voluntarily terminate",nue),process.exit(0)},HN).unref())})});var VN={};$e(VN,{startHTTPThreads:()=>Pue,startSocketServer:()=>LN,updateWorkerIdleness:()=>sk});async function Pue(e=2,t){if(t)FN(0,1,!0);else{let{loadRootComponents:n}=Dp();if(e===0)return(0,Oo.setMainIsWorker)(!0),await SN().startServers(),Promise.resolve([]);await n()}let r=(0,tk.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Yp.notify(r)},Due).unref());for(let n=0;n<e;n++)FN(n,e);return Promise.all(nk)}function FN(e,t=1,r){if(GN++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:Vp.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Vp.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});nk.push(s),await s,ll.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=$p.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ll.indexOf(n);o>-1&&ll.splice(o,1)}if(a(i,"removeWorker"),ul){let o=ul;ul=[];for(let c of o)rk[c.localPort](null,c)}}}),r){let n=setInterval(()=>{kN?kN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),GN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function LN(e=0,t){if(typeof e=="string")try{(0,Kp.existsSync)(e)&&(0,Kp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Mue:r=Uue(t):r=$N;let n=(0,_l.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=rk[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),kN=!0,r(o,(c,l)=>{if(!c){if(XF){let u=o._socket||new _l.Socket({handle:o,writable:!0,readable:!0});XF.deliverSocket(u,e,l),u.resume()}else GN>0?(ul.length===0&&setTimeout(()=>{ul.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,ul.push(o)):(console.log("start up a dynamic thread to handle request"),FN(0));nn(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new _l.Socket({handle:o,writable:!0,readable:!0});Hue(u,c,e)}nn(!0,"socket-routed")})};let s=Bo();Yp.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function $N(e,t){let r,n=0;for(let s of ll){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=kp)return kp=i,t(r);n=i}kp=0,t(r)}function Mue(e,t){let r={};e.getpeername(r);let n=r.address,s=dl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);$N(e,o=>{dl.set(n,{worker:o,lastUsed:i}),t(o)})}function Uue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new _l.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=dl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);$N(n,d=>{dl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function sk(){kp=0;for(let e of ll)e.expectedIdle=e.recentELU.idle+vue,e.requests=1;ll.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Hue(e,t,r){let n=Bue++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),$p.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),$p.delete(n)),s.event=="destroy"&&(e.destroy(),$p.delete(n))})}var Oo,_l,Vp,Yp,Kp,ek,tk,ll,ul,rk,XF,GN,nk,Due,kN,kp,ZF,dl,vue,$p,Bue,qp=Ne(()=>{Oo=q(tt()),_l=require("net"),Vp=q(w()),Yp=q(G()),Kp=require("fs");li();ek=require("worker_threads"),tk=q(ia()),ll=[],ul=[],rk=[],GN=0,nk=[];ek.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Due=6e5;a(Pue,"startHTTPThreads");a(FN,"startHTTPWorker");a(LN,"startSocketServer");kp=0;a($N,"findMostIdleWorker");ZF=36e5,dl=new Map;a(Mue,"findByRemoteAddressAffinity");a(Uue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of dl)r.lastUsed+ZF<e&&dl.delete(t)},ZF).unref();vue=1e3;a(sk,"updateWorkerIdleness");(0,Oo.setMonitorListener)(sk);$p=new Map,Bue=1;a(Hue,"proxySocket")});var ak=g((sye,ok)=>{"use strict";var Qp=J();Qp.initSync();var Wp=w(),{httpRequest:que}=W(),xue=require("path"),ik=require("fs-extra"),Gue=require("yaml"),Fue={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};ok.exports={cliOperations:$ue,buildRequest:kue};function kue(){let e={};for(let t of process.argv){if(Fue[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(kue,"buildRequest");async function $ue(e){await ik.exists(xue.join(Qp.get(Wp.CONFIG_PARAMS.ROOTPATH),Wp.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await ik.exists(Qp.get(Wp.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await que({method:"POST",protocol:"http:",socketPath:Qp.get(Wp.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(Gue.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a($ue,"cliOperations")});var KN=g((oye,ck)=>{"use strict";var rd=J();rd.initSync();var fl=require("fs-extra"),YN=require("path"),El=w(),Vue=require("crypto"),Yue=require("uuid").v4;ck.exports=Kue;function Kue(){if(rd.getHdbBasePath()!==void 0){let e=YN.join(rd.getHdbBasePath(),El.LICENSE_KEY_DIR_NAME,El.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=YN.join(rd.getHdbBasePath(),El.LICENSE_KEY_DIR_NAME,El.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=YN.join(rd.getHdbBasePath(),El.LICENSE_KEY_DIR_NAME,El.JWT_ENUM.JWT_PASSPHRASE_NAME);try{fl.accessSync(r),fl.accessSync(e),fl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Yue(),i=Vue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});fl.writeFileSync(r,s),fl.writeFileSync(e,i.privateKey),fl.writeFileSync(t,i.publicKey)}else throw n}}}a(Kue,"checkJWTTokenExist")});var uk=g((cye,lk)=>{"use strict";var WN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};lk.exports={HdbInfoInsertObject:WN}});var fk=g((uye,dk)=>{"use strict";var _k=w(),QN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[_k.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[_k.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};dk.exports={UpgradeObject:QN}});var jp=g((dye,hk)=>{"use strict";var Fn=require("prompt"),hl=require("chalk"),Ek=G(),_s=require("os"),jN=Uo(),zN=["yes","y"];async function Wue(e){let t=`${_s.EOL}`+hl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${_s.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${_s.EOL}${_s.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${_s.EOL}`;Fn.override=jN(["CONFIRM_UPGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:hl.magenta(`${_s.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Fn.get([r])}catch(s){return Ek.error("There was an error when prompting user about an upgrade."),Ek.error(s),!1}return zN.includes(n.CONFIRM_UPGRADE)}a(Wue,"forceUpdatePrompt");async function Que(e){let t=`${_s.EOL}`+hl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${_s.EOL}`);Fn.override=jN(["CONFIRM_DOWNGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:hl.magenta(`${_s.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Fn.get([r]);return zN.includes(n.CONFIRM_DOWNGRADE)}a(Que,"forceDowngradePrompt");async function jue(){let e=`${_s.EOL}`+hl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Fn.override=jN(["GENERATE_CERTS"]),Fn.start(),Fn.message=e;let t={properties:{GENERATE_CERTS:{description:hl.magenta(`${_s.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Fn.get([t]);return zN.includes(r.GENERATE_CERTS)}a(jue,"upgradeCertsPrompt");hk.exports={forceUpdatePrompt:Wue,forceDowngradePrompt:Que,upgradeCertsPrompt:jue}});var XN=g((Eye,pk)=>{"use strict";var JN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};pk.exports=JN});var Sk=g((gye,mk)=>{"use strict";var zue=W(),Jue=Et(),pye=G(),mye=require("path"),Sye=require("fs"),Tye=w();mk.exports={getOldPropsValue:Xue};function Xue(e,t,r=!1){let n=t.getRaw(e);return zue.isNotEmptyAndHasValue(n)?n:r?Jue.getDefaultConfig(e):""}a(Xue,"getOldPropsValue")});var Ak=g((Aye,Rk)=>{"use strict";var No=require("path"),bo=require("fs-extra"),Zue=require("properties-reader"),e_e=XN(),It=G(),{getOldPropsValue:We}=Sk(),{HDB_SETTINGS_NAMES:ne,CONFIG_PARAMS:qa}=w(),xa=Et(),zp=J(),Tk=W(),ks=w(),ZN=new e_e("3.1.0"),gk=[];function t_e(){let e=Zue(zp.get(ne.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),It.info(t);let r=` ;Settings for the HarperDB process.
|
|
30
|
+
`))}},25).unref()}o.close?.(()=>{if(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Cp()==0)try{ZG(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ip),o.cantCleanupProperly||cr.warn("Had to forcefully exit the thread",Ip),process.exit(0)},5e3).unref()})}if(cF||process.env.DEV_MODE)try{require("inspector").close()}catch(i){cr.info("Could not close debugger",i)}}}).ref();let e=[];if(eF&&!Dle)for(let t in xs){let r=xs[t];if(isNaN(t)&&Cp()==0){Ale(t)&&ZG(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),cr.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=eF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),cr.trace("Listening on port "+t,Ip)}).on("error",i)}))}Promise.all(e).then(()=>{z_?.postMessage({type:yt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(lF,"startServers");sF||lF();function EN(e,t,r){let n=e?.read?e:new mle({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=xs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=xs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(cr.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(EN,"deliverSocket");var rF=new Map;function Ule(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=rF.get(s),r){case"connection":i=EN(void 0,t),rF.set(s,i),i.write=(c,l,_)=>(z_.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(z_.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),z_.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Ule,"proxyRequest");function hN(e,t,r=!0){!+t&&t!==Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Pe.get(yt.CONFIG_PARAMS.HTTP_PORT),10));let n=xs[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",nF),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else xs[t]=e;e.on("unhandled",nF)}a(hN,"registerServer");function uF(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Pe.get(yt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Pe.get(yt.CONFIG_PARAMS.HTTP_PORT),secure:Pe.get(yt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pe.get(yt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Pe.get(yt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(uF,"getPorts");function pN(e,t){for(let{port:r,secure:n}of uF(t))_F(r,n,t?.isOperationsServer),typeof e=="function"?dN[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,hN(e,r,!1)),Lp[r]=fN(dN,r),Ple=fN(Mle,r)}a(pN,"httpServer");function _F(e,t,r){if(!To[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Pe.get(n+"_keepAliveTimeout"),headersTimeout:Pe.get(n+"_headersTimeout"),requestTimeout:Pe.get(n+"_timeout")},i=Pe.get(n+"_mtls"),o=Pe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Pe.get(n+"tls_privateKey"),_=Pe.get(n+"tls_certificate"),u=Pe.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:il(l),ciphers:Pe.get("tls_ciphers"),cert:il(_),ca:u&&il(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:ble()})}let c=Cle();To[e]=(t?Rle:Tle)(s,async(l,_)=>{try{let d=performance.now(),f=new oF(l,_);r&&(f.isOperationsServer=!0);let E=await Lp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=dF(f)}if(c?E.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):E.headers?.set?.("Server","HarperDB"),E.status===-1){for(let B of E.headers||[])_.setHeader(B[0],B[1]);return l.baseRequest=f,_.baseResponse=E,To[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,A=E.body,T;if(!E.handlesHeaders){let B=E.headers||new iF;A?A.length>=0&&(typeof A=="string"?B.set("Content-Length",Buffer.byteLength(A)):B.set("Content-Length",A.length),T=!0):(B.set("Content-Length","0"),T=!0);let v=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(v+=", miss"),Ile(B,"Server-Timing",v,!0),_.writeHead(h,B&&(B[Symbol.iterator]?Array.from(B):B)),T&&_.end(A)}let R=f.handlerPath,U=f.method;if(j_(S,"duration",R,U,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),wle(h<400,"success",R,U),!T)if(A?.pipe){A.pipe(_),A.destroy&&_.on("close",()=>{A.destroy()});let B=0;A.on("data",v=>{B+=v.length}),A.on("end",()=>{j_(performance.now()-m,"transfer",R,U),j_(B,"bytes-sent",R,U)})}else A?.then?A.then(B=>{_.end(B)},u):_.end(A)}catch(d){u(d)}function u(d){let f=d.headers;_.writeHead(d.statusCode||500,f&&(f[Symbol.iterator]?Array.from(f):f)),_.end(d.toString()),d.statusCode?d.statusCode===500?cr.warn(d):cr.info(d):cr.error(d)}a(u,"onError")}),i&&(To[e].mtlsConfig=i),t&&(To[e].on("secureConnection",l=>{l._parent.startTime&&j_(performance.now()-l._parent.startTime,"tls-handshake",e),j_(l.isSessionReused(),"tls-reused",e)}),To[e].isSecure=!0),hN(To[e],e)}return To[e]}a(_F,"getHTTPServer");function fN(e,t){let r=dF;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(fN,"makeCallbackChain");function dF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new iF}}a(dF,"unhandled");function vle(e,t){pN(e,{requestOnly:!0,...t})}a(vle,"onRequest");function Ble(e,t){let r;if(t.securePort){let n=Pe.get("tls_privateKey"),s=Pe.get("tls_certificate"),i=t.mtls?.certificateAuthority||Pe.get("tls_certificateAuthority");r=Nle({ciphers:Pe.get("tls_ciphers"),key:il(n),cert:il(s),ca:i&&il(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),xs[t.securePort]=r}return t.port&&(r=Sle(e),xs[t.port]=r),r}a(Ble,"onSocket");Object.defineProperty(gle.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Hle(e,t){let r;for(let{port:n,secure:s}of uF(t)){wp[n]||(wp[n]=new Ole({server:r=_F(n,s)}),wp[n].on("connection",async(c,l)=>{try{let _=new oF(l);_.isWebSocket=!0;let u=Lp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=_N[n];if(d){let E;for(let h=0;h<f.length;h++){let m=f[h];m.protocol===d&&(E=!0,m.listener(c,_,u))}if(E)return}for(let E=0;E<f.length;E++){let h=f[E];h.protocol||h.listener(c,_,u)}}catch(_){cr.warn("Error handling WebSocket connection",_)}}),wp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=_N[n];o||(o=_N[n]=[]),o.push({listener:e,protocol:i}),Lp[n]=fN(dN,n)}return r}a(Hle,"onWebSocket");function nF(e,t){t.writeHead(404),t.end(`Not found
|
|
31
|
+
`)}a(nF,"defaultNotFound")});async function pF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await SN.get(e,{returnNonexistent:!0});s=new RN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await SN.get(e);i&&i.delete()}s=new Up(e,t)}return n&&(n.id=e,n.user={username:t?.username},J_.put(n)),s}function TN(){return Mp++,Mp>65500&&(Mp=1),Mp}function gN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Vi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ze(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var fF,go,EF,hF,SN,J_,Mp,Up,RN,mF=Ne(()=>{Re();Wl();fF=q(pr()),go=q(G());$o();EF=q(tt()),hF=q(mN());Er();SN=ft({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"}]}}]}),J_=ft({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,EF.getWorkerIndex)()===0&&(async()=>{await hF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of J_.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await it.getUser(r.user.username)),Ze(r,()=>{try{gN(r,t)}catch{(0,go.warn)("Failed to publish will",t)}J_.delete(e.id,r)})}})();a(pF,"getSession");Mp=1;a(TN,"getNextMessageId");Up=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(A=>A.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,go.trace)("Resuming subscription from",s,"from",o);let E=Vi.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let T=A.split("/"),R;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")R=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&R)throw new Error("Filters can not be combined");let U=!0;T[T.length-1]==="#"&&(T.length--,U=!1),R&&(n=a(v=>{let P=v.id;if(!Array.isArray(P)||U&&P.length!==T.length)return!1;for(let V=0;V<T.length;V++)if(T[V]!=="+"&&T[V]!==P[V])return!1;return!0},"filter"));let B=T.indexOf("+");f.url="/"+(B>-1?T.slice(0,B):T).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let A=await m.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let T of A)try{let R;if(T.type&&T.type!=="put"&&T.type!=="delete"&&T.type!=="message"&&T.type!=="patch"||n&&!n(T))continue;r?(T.topic=s,R=this.needsAcknowledge(T)):(T.acknowledge?.(),R=TN());let U=T.id;Array.isArray(U)&&(U=ac(U)),U==null&&(U=""),this.listener(h+"/"+U,T.value,R,t)}catch(R){(0,go.warn)(R)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=TN();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(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,gN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ze(r,async()=>{if(!t){let n=await J_.get(this.sessionId,r);n?.doesExist()&&await gN(n,n.data,r)}await J_.delete(this.sessionId,r)}).catch(n=>{(0,go.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(gN,"publish");RN=class extends Up{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=TN(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,go.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,fF.getNextMonotonicTime)()),(0,go.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),SN.put(this.sessionRecord)),t.qos}}});var AN={};$e(AN,{bypassAuth:()=>qle,start:()=>xle});function qle(){AF=!0}function xle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=gF(_,(h,m)=>{if(_.send(h),m&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Gr.info)("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(l){if(_.authorized)try{let E=l.user;E!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null))}catch(E){(0,Gr.error)(E)}else if(l.required)return(0,Gr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&AF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,RF.getSuperUser)());let{onMessage:d,onClose:f}=gF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Gr.info)("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function gF(e,t,r,n,s){TF||(TF=!0,Du(d=>{vp>0&&d.push({metric:"mqtt-connections",connections:vp,byThread:!0})}));let i;vp++;let o,c={protocolVersion:4},l=(0,Hp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){vp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Cn(!1,"connection","mqtt","disconnect"))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await it.getUser(d.username,d.password.toString(),r),(0,Bp.get)(Gs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&SF.notify({username:n.username,status:Gs.AUTH_AUDIT_STATUS.SUCCESS,type:Gs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,Bp.get)(Gs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&SF.error({username:n.username,status:Gs.AUTH_AUDIT_STATUS.FAILURE,type:Gs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let R=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?R(d.will.payload):void 0,delete d.will.payload}o=pF({user:n,...d}),o=await o,s.sessions.add(o)}catch(R){return(0,Gr.error)(R),Cn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:R.code||5,returnCode:R.code||128})}Cn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((R,U,B,v)=>{try{let P=R.indexOf("/",1),V=P>0?R.slice(0,P):R;f({cmd:"publish",topic:R,payload:E(U),messageId:B||Math.floor(Math.random()*1e8),qos:v.qos},V)}catch(P){(0,Gr.error)(P),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let R of d.subscriptions){let U;try{U=(await o.addSubscription(R,R.qos>=1)).qos||0}catch(B){(0,Gr.error)(B),U=c.protocolVersion<5?128:B.statusCode===403?135:B.statusCode===404?143:128}h.push(U)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let R=[];for(let U of d.unsubscriptions)R.push(o.removeSubscription(U)?0:17);f({cmd:"unsuback",granted:R,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=La(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,T;try{T=await o.publish(d,A)}catch(R){(0,Gr.warn)(R),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:T===!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(!0),s.sessions.delete(o),Cn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Gr.error)(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Hp.generate)(h,c);t(S),sn(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Eo(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Hp,RF,Bp,Gs,Gr,SF,AF,TF,vp,OF=Ne(()=>{Hp=require("mqtt-packet");mF();RF=q(yr());Yc();li();Er();Bp=q(J()),Gs=q(C()),Gr=q(G()),SF=(0,Gr.loggerWithTag)("auth-event"),AF=(0,Bp.get)(Gs.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(qle,"bypassAuth");a(xle,"start");vp=0;a(gF,"onSocket")});var Bh={};$e(Bh,{component_errors:()=>al,loadComponent:()=>qp,loadComponentDirectories:()=>PF,setErrorReporter:()=>$le});function PF(e,t){t&&(NN=t),e&&(bN=e);let r=[];if((0,us.existsSync)(ON)){let s=(0,us.readdirSync)(ON,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,It.join)(ON,o);r.push(qp(c,NN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(qp(n,NN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{DF=!0})}function $le(e){Z_=e}async function qp(e,t,r,n,s,i){if(!bF.has(e)){bF.set(e,!0),s&&(bN=s);try{let o;n&&(al=new Map);let c=(0,It.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,us.existsSync)(c)?o=n?(0,LF.getConfigObj)():(0,yF.parseDocument)((0,us.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=yN;let l=[],_=n;for(let u in o){let d=o[u];if(al.set(n?u:(0,It.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let T=e,R;for(;!(0,us.existsSync)(R=(0,It.join)(T,"node_modules",u));)if(T=(0,It.dirname)(T),T.length<(0,CF.getHdbBasePath)().length){R=null;break}if(R)f=await qp(R,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=kle[u];if(!f)continue;l.push(f);let h=a(T=>(T.origin=r,ft(T)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,A=!m?.https&&m?.port;if(ol.isMainThread&&(f=await f.startOnMainThread?.({server:it,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&m))for(let T of[A,S])try{if(+T&&!NF.includes(T)){let R=IN.get(wN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);R&&X_.default.warn("Session affinity is not recommended and may cause memory leaks"),(R||!Sp)&&(NF.push(T),CN(T,R))}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(f=await f.start?.({server:it,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),bN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,wF.handleHDBError)("Can not reference parent directories");let T=(0,It.join)(e,d.files).replace(/\\/g,"/"),R=T.indexOf("/*");if(R>-1&&d.files!==yN[u]?.files&&!(0,us.existsSync)(T.slice(0,R)))throw new Error(`The path '${T.slice(0,R)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let U=(0,It.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+U+B.slice(2):B==="."?"/"+U:"/"+U+"/"+B;let v,P,V;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",P=(0,It.join)(e,z)}else(V=T.indexOf("/*"))>-1&&(P=T.slice(0,V+1),v=(0,It.relative)(e,P));let Y=!1;if(ol.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(B,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(B,P,t)),Y)continue;for(let z of await(0,IF.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:oe,dirent:Se}=z;_=!0;let ue=(0,It.relative)(e,oe).replace(/\\/g,"/");if(v)if(ue.startsWith(v))ue=ue.slice(v.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ue}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Fe=B+(B.endsWith("/")?"":"/")+ue;try{if(Se.isFile()){let de=await Fle(oe);ol.isMainThread&&await f.setupFile?.(de,Fe,oe,t),t.isWorker&&await f.handleFile?.(de,Fe,oe,t)}else ol.isMainThread&&await f.setupDirectory?.(Fe,oe,t),t.isWorker&&await f.handleDirectory?.(Fe,oe,t)}catch(de){de.message=`Could not load ${Se.isFile()?"file":"directory"} '${oe}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,Z_?.(de),((0,cl.getWorkerIndex)()===0?console:X_.default).error(de),t.set(d.path||"/",new ed(de)),al.set(n?u:(0,It.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,It.basename)(e)}' due to: ${h.message}`,Z_?.(h),((0,cl.getWorkerIndex)()===0?console:X_.default).error(h),t.set(d.path||"/",new ed(h),null,!0),al.set(n?u:(0,It.basename)(e),h.message)}}if(ol.isMainThread&&!DF&&i&&(0,cl.watchDir)(e,async()=>PF()),o.extensionModule)return await wE((0,It.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;Z_?.(new Error(u)),((0,cl.getWorkerIndex)()===0?console:X_.default).error(u),al.set((0,It.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Z_?.(o),t.set("",new ed(o))}}}var us,It,ol,yF,IN,wN,IF,cl,X_,wF,CF,Gle,LF,Fle,ON,bN,DF,NN,al,kle,yN,NF,bF,Z_,ed,Hh=Ne(()=>{us=require("fs"),It=require("path"),ol=require("worker_threads"),yF=require("yaml"),IN=q(J()),wN=q(C());jM();ZM();eU();Bq();OG();CG();IF=q(require("fast-glob")),cl=q(tt()),X_=q(G());Kg();Er();wF=q(se());Wn();Re();xp();CF=q(J()),Gle=q(UG());Ih();XG();OF();LF=q(Et());Tp();({readFile:Fle}=us.promises),ON=IN.get(wN.CONFIG_PARAMS.COMPONENTSROOT),bN=new Map,al=new Map;a(PF,"loadComponentDirectories");kle={REST:Jh,rest:Jh,graphqlSchema:Yg,jsResource:Qg,fastifyRoutes:zO,login:zg,static:JO,operationsApi:Gle,customFunctions:{},http:{},clustering:uN,authentication:y_,mqtt:AN},yN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(yN,"static",{value:{files:"web/**"}});NF=[],bF=new Map;a($le,"setErrorReporter");a(qp,"loadComponent");ed=class extends Qt{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 Pp=g((Xbe,UF)=>{var{isMainThread:MF}=require("worker_threads"),{getTables:Vle}=(Re(),ie(Ge)),{loadComponentDirectories:Yle,loadComponent:Kle}=(Hh(),ie(Bh)),{resetResources:Wle}=(Wl(),ie(bI)),Qle=HA(),jle=Et(),{dirname:zle}=require("path"),{getConnection:Jle}=ht(),Xle=J(),Zle=C(),LN=new Map;async function eue(e=!1){!MF&&Xle.get(Zle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Jle();try{MF&&await Qle()}catch(n){console.error(n)}let t=Wle();Vle(),t.isWorker=e,await Kle(zle(jle.getConfigFilePath()),t,"hdb",!0,LN),await Yle(LN,t);let r=[];for(let[n]of LN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(eue,"loadRootComponents");UF.exports.loadRootComponents=eue});var tt=g((eye,Ao)=>{"use strict";var{Worker:tue,MessageChannel:rue,parentPort:Fs,isMainThread:vN,threadId:nue,workerData:yi}=require("worker_threads"),{PACKAGE_ROOT:sue}=C(),{join:qF,isAbsolute:iue,extname:oue}=require("path"),{server:xF}=(Er(),ie(Ho)),{watch:aue,readdir:cue}=require("fs/promises"),{totalmem:vF}=require("os"),td=C(),GF=J(),Ii=G(),{randomBytes:lue}=require("crypto"),{_assignPackageExport:uue}=require("../index"),_ue=C(),BF=1024*1024,Ro=[],Gn=[],due=50,BN=1e4,fue="restart",FF="request_thread_info",kF="resource_report",$F="thread_info",VF="added-port",Eue="ack",DN;uue("threads",Gn);Ao.exports={startWorker:PN,restartWorkers:qN,shutdownWorkers:Tue,workers:Ro,setMonitorListener:Iue,onMessageFromWorkers:gue,onMessageByType:JF,broadcast:Aue,broadcastWithAcknowledgement:Nue,setChildListenerByType:Sue,getWorkerIndex:YF,getWorkerCount:KF,getTicketKeys:QF,setMainIsWorker:pue,setTerminateTimeout:hue,restartNumber:yi?.restartNumber||1};Gn.onMessageByType=JF;Gn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Gn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var HN;function hue(e){BN=e}a(hue,"setTerminateTimeout");function YF(){return yi?yi.workerIndex:HN?0:void 0}a(YF,"getWorkerIndex");function KF(){return yi?yi.workerCount:HN?1:void 0}a(KF,"getWorkerCount");function pue(e){HN=e}a(pue,"setMainIsWorker");var WF=1,Gp;function QF(){return Gp||(Gp=vN?lue(48):yi.ticketKeys,Gp)}a(QF,"getTicketKeys");Object.defineProperty(xF,"workerIndex",{get(){return YF()}});Object.defineProperty(xF,"workerCount",{get(){return KF()}});var jF={[FF](e,t){bue(t)},[kF](e,t){yue(t,e)}};function PN(e,t={}){let r=process.constrainedMemory?.()||vF();r=Math.min(r,vF(),2e4*BF);let n=GF.get(td.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/BF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Gn){let _=new rue;_.existingPort=l,i.push(_),o.push(_.port2)}oue(e)||(e+=".js");let c=new tue(iue(e)?e:qF(sue,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:WF=t.threadCount,name:t.name,restartNumber:Ao.exports.restartNumber,ticketKeys:QF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:VF,port:l,threadId:c.threadId},[l]);return kp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>PN(e,t),c.on("error",l=>{console.error("Worker error:",l),Ii.error("Worker error:",l)}),c.on("exit",l=>{Ro.splice(Ro.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<due?(t.unexpectedRestarts=c.unexpectedRestarts+1,PN(e,t)):Ii.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{jF[l.type]?.(l,c)}),Ro.push(c),Cue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(PN,"startWorker");var mue=[td.THREAD_TYPES.HTTP];async function qN(e=null,t=Math.max(WF>3,1),r=!0){if(vN){if(r){let{loadRootComponents:o}=Pp();await o()}Ao.exports.restartNumber++,t<1&&(t=t*Ro.length);let n=[],s=[];for(let o of Ro.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Ii.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ao.exports.restartNumber,type:td.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=mue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),BN*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===_ue.ITC_EVENT_TYPES.CHILD_STARTED&&(Ii.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Ii.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Na();r&&(e==="http"||!e)&&GF.get(td.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Fs.postMessage({type:fue,workerType:e})}a(qN,"restartWorkers");function Sue(e,t){jF[e]=t}a(Sue,"setChildListenerByType");function Tue(e){return qN(e,1/0,!1)}a(Tue,"shutdownWorkers");var zF=[];function gue(e){zF.push(e)}a(gue,"onMessageFromWorkers");var MN=new Map;function JF(e,t){let r=MN.get(e);r||MN.set(e,r=[]),r.push(t)}a(JF,"onMessageByType");var Rue=10;async function Aue(e){let t=0;for(let r of Gn)try{r.postMessage(e),t++>Rue&&(t=0,await new Promise(setImmediate))}catch(n){Ii.error("Unable to send message to worker",n)}}a(Aue,"broadcast");var Fp=new Map,Oue=1;function Nue(e){return new Promise(t=>{let r=0;for(let n of Gn)try{let s=Oue++,i=a(()=>{Fp.delete(s),--r===0&&t(),n!==Fs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Fp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Fp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Ii.error("Unable to send message to worker",s)}r===0&&t()})}a(Nue,"broadcastWithAcknowledgement");function bue(e){e.postMessage({type:$F,workers:XF()})}a(bue,"sendThreadInfo");function XF(){let e=Date.now();return Ro.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(XF,"getChildWorkerInfo");function yue(e,t){e.resources=t,e.resources.updated=Date.now()}a(yue,"recordResourceReport");var UN;function Iue(e){UN=e}a(Iue,"setMonitorListener");var wue=1e3,HF=!1;function Cue(){HF||(HF=!0,setInterval(()=>{for(let e of Ro){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}UN&&UN()},wue).unref())}a(Cue,"startMonitoring");var Lue=1e3;if(Fs){kp(Fs);for(let e=0,t=yi.addPorts.length;e<t;e++){let r=yi.addPorts[e];r.threadId=yi.addThreadIds[e],kp(r)}setInterval(()=>{let e=process.memoryUsage();Fs.postMessage({type:kF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Lue).unref(),DN=a(()=>new Promise((e,t)=>{Fs.on("message",r),Fs.postMessage({type:FF});function r(n){n.type===$F&&(Fs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else DN=XF;Ao.exports.getThreadInfo=DN;function kp(e,t){Gn.push(e),e.on("message",r=>{if(r.type===VF)r.port.threadId=r.threadId,kp(r.port);else if(r.type===Eue){let n=Fp.get(r.id);n&&n()}else{for(let s of zF)s(r,e);let n=MN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Ii.error(i)}}}).on("close",()=>{Gn.splice(Gn.indexOf(e),1)}).on("exit",()=>{Gn.splice(Gn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(kp,"addPort");if(vN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await cue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(qF(n,i.name));try{for await(let{filename:i}of aue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await qN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ao.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Fs.on("message",async e=>{let{type:t}=e;t===td.ITC_EVENT_TYPES.SHUTDOWN&&(Ao.exports.restartNumber=e.restartNumber,Fs.unref(),setTimeout(()=>{Ii.warn("Thread did not voluntarily terminate",nue),process.exit(0)},BN).unref())})});var $N={};$e($N,{startHTTPThreads:()=>Pue,startSocketServer:()=>CN,updateWorkerIdleness:()=>ik});async function Pue(e=2,t){if(t)GN(0,1,!0);else{let{loadRootComponents:n}=Pp();if(e===0)return(0,Oo.setMainIsWorker)(!0),await mN().startServers(),Promise.resolve([]);await n()}let r=(0,rk.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{Kp.notify(r)},Due).unref());for(let n=0;n<e;n++)GN(n,e);return Promise.all(sk)}function GN(e,t=1,r){if(xN++,(0,Oo.startWorker)("server/threads/threadServer.js",{name:Yp.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Yp.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});sk.push(s),await s,ll.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Vp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=ll.indexOf(n);o>-1&&ll.splice(o,1)}if(a(i,"removeWorker"),ul){let o=ul;ul=[];for(let c of o)nk[c.localPort](null,c)}}}),r){let n=setInterval(()=>{FN?FN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Oo.shutdownWorkers)(),xN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function CN(e=0,t){if(typeof e=="string")try{(0,Wp.existsSync)(e)&&(0,Wp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Mue:r=Uue(t):r=kN;let n=(0,_l.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=nk[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),FN=!0,r(o,(c,l)=>{if(!c){if(ZF){let u=o._socket||new _l.Socket({handle:o,writable:!0,readable:!0});ZF.deliverSocket(u,e,l),u.resume()}else xN>0?(ul.length===0&&setTimeout(()=>{ul.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,ul.push(o)):(console.log("start up a dynamic thread to handle request"),GN(0));sn(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new _l.Socket({handle:o,writable:!0,readable:!0});Hue(u,c,e)}sn(!0,"socket-routed")})};let s=Bo();Kp.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function kN(e,t){let r,n=0;for(let s of ll){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=$p)return $p=i,t(r);n=i}$p=0,t(r)}function Mue(e,t){let r={};e.getpeername(r);let n=r.address,s=dl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);kN(e,o=>{dl.set(n,{worker:o,lastUsed:i}),t(o)})}function Uue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new _l.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=dl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);kN(n,d=>{dl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function ik(){$p=0;for(let e of ll)e.expectedIdle=e.recentELU.idle+vue,e.requests=1;ll.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Hue(e,t,r){let n=Bue++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),Vp.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),Vp.delete(n)),s.event=="destroy"&&(e.destroy(),Vp.delete(n))})}var Oo,_l,Yp,Kp,Wp,tk,rk,ll,ul,nk,ZF,xN,sk,Due,FN,$p,ek,dl,vue,Vp,Bue,xp=Ne(()=>{Oo=q(tt()),_l=require("net"),Yp=q(C()),Kp=q(G()),Wp=require("fs");li();tk=require("worker_threads"),rk=q(ia()),ll=[],ul=[],nk=[],xN=0,sk=[];tk.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Due=6e5;a(Pue,"startHTTPThreads");a(GN,"startHTTPWorker");a(CN,"startSocketServer");$p=0;a(kN,"findMostIdleWorker");ek=36e5,dl=new Map;a(Mue,"findByRemoteAddressAffinity");a(Uue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of dl)r.lastUsed+ek<e&&dl.delete(t)},ek).unref();vue=1e3;a(ik,"updateWorkerIdleness");(0,Oo.setMonitorListener)(ik);Vp=new Map,Bue=1;a(Hue,"proxySocket")});var ck=g((sye,ak)=>{"use strict";var jp=J();jp.initSync();var Qp=C(),{httpRequest:que}=W(),xue=require("path"),ok=require("fs-extra"),Gue=require("yaml"),Fue={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};ak.exports={cliOperations:$ue,buildRequest:kue};function kue(){let e={};for(let t of process.argv){if(Fue[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(kue,"buildRequest");async function $ue(e){await ok.exists(xue.join(jp.get(Qp.CONFIG_PARAMS.ROOTPATH),Qp.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await ok.exists(jp.get(Qp.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await que({method:"POST",protocol:"http:",socketPath:jp.get(Qp.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(Gue.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a($ue,"cliOperations")});var YN=g((oye,lk)=>{"use strict";var rd=J();rd.initSync();var fl=require("fs-extra"),VN=require("path"),El=C(),Vue=require("crypto"),Yue=require("uuid").v4;lk.exports=Kue;function Kue(){if(rd.getHdbBasePath()!==void 0){let e=VN.join(rd.getHdbBasePath(),El.LICENSE_KEY_DIR_NAME,El.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=VN.join(rd.getHdbBasePath(),El.LICENSE_KEY_DIR_NAME,El.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=VN.join(rd.getHdbBasePath(),El.LICENSE_KEY_DIR_NAME,El.JWT_ENUM.JWT_PASSPHRASE_NAME);try{fl.accessSync(r),fl.accessSync(e),fl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Yue(),i=Vue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});fl.writeFileSync(r,s),fl.writeFileSync(e,i.privateKey),fl.writeFileSync(t,i.publicKey)}else throw n}}}a(Kue,"checkJWTTokenExist")});var _k=g((cye,uk)=>{"use strict";var KN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};uk.exports={HdbInfoInsertObject:KN}});var Ek=g((uye,fk)=>{"use strict";var dk=C(),WN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[dk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[dk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};fk.exports={UpgradeObject:WN}});var zp=g((dye,pk)=>{"use strict";var Fn=require("prompt"),hl=require("chalk"),hk=G(),_s=require("os"),QN=Uo(),jN=["yes","y"];async function Wue(e){let t=`${_s.EOL}`+hl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${_s.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${_s.EOL}${_s.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${_s.EOL}`;Fn.override=QN(["CONFIRM_UPGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:hl.magenta(`${_s.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Fn.get([r])}catch(s){return hk.error("There was an error when prompting user about an upgrade."),hk.error(s),!1}return jN.includes(n.CONFIRM_UPGRADE)}a(Wue,"forceUpdatePrompt");async function Que(e){let t=`${_s.EOL}`+hl.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${_s.EOL}`);Fn.override=QN(["CONFIRM_DOWNGRADE"]),Fn.start(),Fn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:hl.magenta(`${_s.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Fn.get([r]);return jN.includes(n.CONFIRM_DOWNGRADE)}a(Que,"forceDowngradePrompt");async function jue(){let e=`${_s.EOL}`+hl.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Fn.override=QN(["GENERATE_CERTS"]),Fn.start(),Fn.message=e;let t={properties:{GENERATE_CERTS:{description:hl.magenta(`${_s.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Fn.get([t]);return jN.includes(r.GENERATE_CERTS)}a(jue,"upgradeCertsPrompt");pk.exports={forceUpdatePrompt:Wue,forceDowngradePrompt:Que,upgradeCertsPrompt:jue}});var JN=g((Eye,mk)=>{"use strict";var zN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};mk.exports=zN});var Tk=g((gye,Sk)=>{"use strict";var zue=W(),Jue=Et(),pye=G(),mye=require("path"),Sye=require("fs"),Tye=C();Sk.exports={getOldPropsValue:Xue};function Xue(e,t,r=!1){let n=t.getRaw(e);return zue.isNotEmptyAndHasValue(n)?n:r?Jue.getDefaultConfig(e):""}a(Xue,"getOldPropsValue")});var Ok=g((Aye,Ak)=>{"use strict";var No=require("path"),bo=require("fs-extra"),Zue=require("properties-reader"),e_e=JN(),wt=G(),{getOldPropsValue:We}=Tk(),{HDB_SETTINGS_NAMES:ne,CONFIG_PARAMS:qa}=C(),xa=Et(),Jp=J(),gk=W(),ks=C(),XN=new e_e("3.1.0"),Rk=[];function t_e(){let e=Zue(Jp.get(ne.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),wt.info(t);let r=` ;Settings for the HarperDB process.
|
|
32
32
|
|
|
33
33
|
;The directory selected during install where the database files reside.
|
|
34
34
|
${ne.HDB_ROOT_KEY} = ${We(ne.HDB_ROOT_KEY,e)}
|
|
@@ -97,11 +97,11 @@ ${ne.CUSTOM_FUNCTIONS_PORT_KEY} = ${xa.getDefaultConfig(qa.HTTP_PORT)}
|
|
|
97
97
|
${ne.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${No.join(We(ne.HDB_ROOT_KEY,e),"custom_functions")}
|
|
98
98
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
99
99
|
${ne.MAX_CUSTOM_FUNCTION_PROCESSES} = ${xa.getDefaultConfig(qa.HTTP_THREADS)}
|
|
100
|
-
`,n=
|
|
100
|
+
`,n=Jp.get("settings_path"),s=No.dirname(n),i=No.join(s,"3_1_0_upgrade_settings.bak");try{wt.info(`Backing up old settings file to: ${i}`),bo.copySync(n,i)}catch(c){throw wt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{wt.info("New settings file values for 3.1.0 upgrade:",r),wt.info(`Creating new/upgraded settings file at '${n}'`),bo.writeFileSync(n,r),wt.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),wt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),wt.error(c),bo.copySync(i,n),c}Jp.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),wt.info(o),o}a(t_e,"updateSettingsFile_3_1_0");function r_e(){let e=No.join(gk.getHomeDir(),ks.HDB_HOME_DIR_NAME,ks.LICENSE_KEY_DIR_NAME,ks.LICENSE_FILE_NAME),t=No.join(gk.getHomeDir(),ks.HDB_HOME_DIR_NAME,ks.LICENSE_KEY_DIR_NAME,ks.REG_KEY_FILE_NAME),r=No.join(Jp.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,ks.LICENSE_FILE_NAME),n=No.join(r,ks.LICENSE_FILE_NAME),s=No.join(r,ks.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),wt.info(i);let o="Creating .license directory";console.log(o),wt.info(o),bo.mkdirpSync(r);try{bo.accessSync(e);try{let c="Moving licence file";console.log(c),wt.info(c),bo.moveSync(e,n);let l="License file successfully moved.";console.log(l),wt.info(l)}catch{let l="moving license file failed";console.error(l),wt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),wt.warn(l)}try{bo.accessSync(t);try{let c="Moving registration file";console.log(c),wt.info(c),bo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),wt.info(l)}catch{let l="moving registration file failed";console.error(l),wt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),wt.warn(l)}}a(r_e,"moveLicenseFiles");XN.sync_functions.push(t_e);XN.sync_functions.push(r_e);Rk.push(XN);Ak.exports=Rk});var wk=g((Nye,Ik)=>{"use strict";var pn=Ve(),{insertRecords:n_e}=Yo(),s_e=pr(),yo=_t(),i_e=W(),wi=G(),o_e=W(),$s=require("fs-extra"),Ci=require("path"),a_e=require("cli-progress"),nd=require("assert"),c_e=require("pino"),l_e=J();Ik.exports=u_e;var Xp,Nk,Zp,ZN,lr,sd=!1;async function u_e(e=!0){return Xp=l_e.getHdbBasePath(),Nk=Ci.join(Xp,"schema"),Zp=Ci.join(Xp,"4_0_0_upgrade_tmp"),ZN=Ci.join(Xp,"transactions"),console.info("Reindexing upgrade started for schemas"),wi.notify("Reindexing upgrade started for schemas"),await bk(Nk,!1,e),await $s.pathExists(ZN)&&(console.info(`
|
|
101
101
|
|
|
102
|
-
Reindexing upgrade started for transaction logs`),wi.notify("Reindexing upgrade started for transaction logs"),await Nk(eb,!0,e)),wi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(sd?", but errors occurred":"")}a(u_e,"reindexUpgrade");async function Nk(e,t,r){let n=await $s.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Ci.join(e,o.toString());if(o===".DS_Store")continue;let l=await $s.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&$s.statSync(Ci.join(c,d)).isDirectory())try{await __e(o,d,t),cr.info(`Reindexing started for ${o}.${d}`),wi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await f_e(o,d,c,t,r),cr.info(`Reindexing completed for ${o}.${d}`),wi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){sd=!0,f.schema_path=c,f.table_name=d,wi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),wi.error(f),cr.error(f),console.error(f)}}}if(!sd)try{await $s.rm(Xp,{recursive:!0})}catch{}}a(Nk,"processTables");async function __e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ci.join(Xp,s);await $s.ensureDir(Xp),await $s.writeFile(i,""),cr=c_e({level:"debug",formatters:{bindings(){}}},i)}a(__e,"initPinoLogger");var d_e=20;async function f_e(e,t,r,n,s){let i;try{i=await pn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){wi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),cr.error(T);return}throw T}let o=p_e(i.dbis),c=pn.openDBI(i,o),l=Object.keys(i.dbis),_=pn.statDBI(i,o);cr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new a_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await pn.createEnvironment(r,t,!1);pn.createDBI(d,o,!1,!0);let f=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),f.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),f.length>d_e&&await E();await E()}catch(T){throw sd=!0,cr.error(T),T}async function E(){let T,R=f.map(({value:B})=>B);n?T=await Promise.all(R.map(B=>E_e(d,B))):T=await n_e(d,o,l.filter(B=>B!=="__blob__"),R,!1);for(let B=0,v=f.length;B<v;B++){let{key:P,value:V}=f[B];cr.info(`Record hash value: ${P} hash: ${o}`);let Y;n?Y=T[B]:Y=T.written_hashes.indexOf(P)>-1,nd(Y,!0),h_e(d,o,V[o],n),cr.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&wi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),cr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=pn.statDBI(i,o),m=pn.statDBI(d,o);if(cr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),nd.deepStrictEqual(h.entryCount,m.entryCount),await pn.closeEnvironment(i),await pn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=Ci.join(r,t),R=Ci.join(T,"data.mdb"),U=Ci.join(T,"lock.mdb");await $s.unlink(R),await $s.unlink(U),await $s.rmdir(T),cr.info(`Deleted old environment files from schema folder: ${R}, ${U}`)}let S=await pn.openEnvironment(r,t),A=pn.statDBI(S,o);cr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(A)}`),nd.deepStrictEqual(A.entryCount,m.entryCount),await pn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(f_e,"processTable");async function E_e(e,t){pn.initializeDBIs(e,yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),o_e.isEmpty(t.user_name)||e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(E_e,"insertTransaction");function h_e(e,t,r,n){let i=e.dbis[t].get(r);nd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!i_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];bk(e,c,d,r)}else bk(e,c,l,r)}a(h_e,"validateIndices");function bk(e,t,r,n){try{let s=!1,i=s_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||cr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),nd.deepStrictEqual(s,!0)}catch(s){sd=!0,cr.error(s),console.error(s)}}a(bk,"validateIndex");function p_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(p_e,"getHashDBI")});var em=g((yye,Ck)=>{"use strict";var m_e=require("mkcert"),Zp=require("path"),tb=require("fs-extra"),rb=G(),S_e=J(),nb=w(),pl=sg(),T_e=Uo(),g_e=Et();Ck.exports={generateKeys:R_e,updateConfigCert:wk};async function R_e(){let e=S_e.getHdbBasePath(),t=Zp.join(e,nb.LICENSE_KEY_DIR_NAME),r=await m_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:pl.CERTIFICATE_VALUES.key,caCert:pl.CERTIFICATE_VALUES.cert}),n=Zp.join(t,pl.CERTIFICATE_PEM_NAME),s=Zp.join(t,pl.PRIVATEKEY_PEM_NAME),i=Zp.join(t,pl.CA_PEM_NAME);try{await tb.writeFile(n,r.cert)}catch(o){throw rb.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await tb.writeFile(s,r.key)}catch(o){throw rb.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await tb.writeFile(i,pl.CERTIFICATE_VALUES.cert)}catch(o){throw rb.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}wk(n,s,i)}a(R_e,"generateKeys");function wk(e,t,r){let n=T_e(Object.keys(nb.CONFIG_PARAM_MAP),!0),s=nb.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),g_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(wk,"updateConfigCert")});var Uk=g((Cye,Mk)=>{"use strict";var tm=require("path"),Io=require("fs-extra"),A_e=XN(),Ga=G(),Lk=Et(),sb=J(),ds=w(),rm=W(),O_e=require("properties-reader"),N_e=Xn(),b_e=VE(),y_e=Rr(),wye=require("util"),I_e=y_e.searchByValue,w_e=Ar(),C_e=uh(),L_e=et(),D_e=Ik(),Dk=em(),P_e=jp(),ad=new A_e("4.0.0"),Pk=[],id,od;async function M_e(){try{if(await P_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),id){let t=rm.changeExtension(id,".bak");await Io.move(id,t)}if(od){let t=rm.changeExtension(od,".bak");await Io.move(od,t)}await Dk.generateKeys()}else console.log("Using existing certificates."),Dk.updateConfigCert(id,od,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(M_e,"generateNewKeys");async function U_e(){console.log("Updating HarperDB nodes."),Ga.info("Updating HarperDB nodes.");let e=[];try{let t=new N_e(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await I_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!L_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:ds.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(rm.isEmptyOrZeroLength(n))return;let s=new b_e(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await w_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{C_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(U_e,"updateNodes");async function v_e(){let e=sb.get(ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(tm.join("config","settings.js"))){Ga.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Ga.info(t);let r=tm.dirname(e),n=sb.get(ds.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=tm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=tm.join(n,ds.HDB_CONFIG_FILE);try{Ga.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Io.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Ga.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ga.info("Updating env variables with new settings values");let d=Lk.initOldConfig(e);id=d[ds.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],od=d[ds.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Lk.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=rm.getPropsFilePath();Io.accessSync(o,Io.constants.F_OK|Io.constants.R_OK);let l=O_e(o).get(ds.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
|
|
103
|
-
install_user = ${l}`;try{Io.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{sb.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Io.removeSync(r),console.log(u),Ga.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(v_e,"updateSettingsFile_4_0_0");ad.async_functions.push(v_e);ad.async_functions.push(M_e);ad.async_functions.push(D_e);ad.async_functions.push(U_e);Pk.push(ad);Mk.exports=Pk});var ib=g((Dye,qk)=>{"use strict";var Fa=W(),B_e=w(),vk=G(),{DATA_VERSION:H_e,UPGRADE_VERSION:q_e}=B_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Bk=Ak(),nm=Uk(),ka=new Map;Bk&&Bk.forEach(e=>{ka.set(e.version,e)});nm&&nm.forEach(e=>{ka.set(e.version,e)});nm&&nm.forEach(e=>{ka.set(e.version,e)});function x_e(){return[...ka.keys()].sort(Fa.compareVersions)}a(x_e,"getSortedVersions");function Hk(e){let t=e[H_e],r=e[q_e];return Fa.isEmptyOrZeroLength(t)||Fa.isEmptyOrZeroLength(r)?(vk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),vk.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...ka.keys()].sort(Fa.compareVersions).filter(function(n){return Fa.compareVersions(n,t)>0&&Fa.compareVersions(n,r)<=0})}a(Hk,"getVersionsForUpgrade");function G_e(e){return Hk(e).length>0}a(G_e,"hasUpgradesRequired");function F_e(e){return Fa.isEmptyOrZeroLength(e)?null:ka.has(e)?ka.get(e):null}a(F_e,"getDirectiveByVersion");qk.exports={getSortedVersions:x_e,getDirectiveByVersion:F_e,getVersionsForUpgrade:Hk,hasUpgradesRequired:G_e}});var sm=g((Mye,$k)=>{"use strict";var k_e=require("util"),ob=require("chalk"),$_e=require("os"),Gk=Ar(),V_e=Rr(),mn=w(),Fk=uk(),cb=XT(),{UpgradeObject:xk}=fk(),{forceDowngradePrompt:Y_e}=jp(),K_e=Gi(),cd=G(),ml=W(),lb=wn(),W_e=(Re(),ie(Ge)),Q_e=ib(),j_e=k_e.promisify(lb.setSchemaDataToGlobal),z_e=V_e.searchByValue,J_e="info_id",X_e="2.9.9",Z_e="3.0.0";async function ede(e){let t=new Fk.HdbInfoInsertObject(1,e,e),r=new cb.InsertObject(mn.OPERATIONS_ENUM.INSERT,mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return lb.setSchemaDataToGlobal(),Gk.insert(r)}a(ede,"insertHdbInstallInfo");async function ab(e){let t,r=await kk(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new Fk.HdbInfoInsertObject(i,e,e);let o=new cb.InsertObject(mn.OPERATIONS_ENUM.INSERT,mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await j_e(),Gk.insert(o)}a(ab,"insertHdbUpgradeInfo");async function kk(){let e=new cb.NoSQLSeachObject(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,J_e,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await z_e(e))}catch(r){cd.info(r)}return t}a(kk,"getAllHdbInfoRecords");async function tde(){let e=await kk();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(tde,"getLatestHdbInfoRecord");async function rde(){cd.info("Checking if HDB software has been updated");try{let e=K_e.version(),t=await tde(),r;if(ml.isEmpty(t))r=X_e;else if(r=t.data_version_num,ml.compareVersions(r.toString(),e.toString())>0){if(!ml.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(ob.yellow(`This instance's data was last run on version ${r}`)),console.error(ob.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${$_e.EOL}${mn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");ml.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(ob.yellow(`This instance's data was last run on version ${r}`)),await Y_e(new xk(r,e))?await ab(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(lb.setSchemaDataToGlobal(),nde(r),e.toString()===r.toString())return;let n=new xk(r,e);if(Q_e.hasUpgradesRequired(n))return n;ml.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await ab(n.upgrade_version),cd.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw cd.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),cd.fatal(e),e}}a(rde,"getVersionUpdateInfo");function nde(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${mn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in W_e.databases.system))throw console.log(t),new Error(t);if(!ml.isEmpty(e)&&e<Z_e)throw console.log(t),new Error(t)}a(nde,"checkIfInstallIsSupported");$k.exports={insertHdbInstallInfo:ede,insertHdbUpgradeInfo:ab,getVersionUpdateInfo:rde}});var Qk=g((vye,Wk)=>{"use strict";var ub=require("joi"),{boolean:sde,string:Vk,number:ide}=ub.types(),Yk=require("fs-extra"),ld=w(),Kk=require("path"),ode=rt();Wk.exports=ade;function ade(e){let t=Vk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=ub.object({[ld.INSTALL_PROMPTS.ROOTPATH]:ub.custom(cde),[ld.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ide.min(0),[ld.INSTALL_PROMPTS.TC_AGREEMENT]:Vk.valid("yes","YES","Yes"),[ld.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[ld.INSTALL_PROMPTS.CLUSTERING_ENABLED]:sde});return ode.validateBySchema(e,r)}a(ade,"installValidator");function cde(e,t){if(Yk.existsSync(Kk.join(e,"system/hdb_user/data.mdb"))||Yk.existsSync(Kk.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(cde,"validateRootAvailable")});var zk=g((Hye,jk)=>{"use strict";var{mkdirpSync:lde}=require("fs-extra"),Vs=require("path"),Sl=w(),db=G(),ude=In(),_b=ti(),_de=ze();jk.exports=dde;async function dde(e){db.trace("Mounting HarperDB"),Es(e),Es(Vs.join(e,"backup")),Es(Vs.join(e,"trash")),Es(Vs.join(e,"keys")),Es(Vs.join(e,"keys",Sl.LICENSE_FILE_NAME)),Es(Vs.join(e,"log")),Es(Vs.join(e,"doc")),Es(Vs.join(e,"database")),Es(Vs.join(e,Sl.TRANSACTIONS_DIR_NAME)),Es(Vs.join(e,"clustering","leaf")),Es(Vs.join(e,"components")),await fde()}a(dde,"mountHdb");async function fde(){let e=hu(),t=Object.keys(_b);for(let r=0;r<t.length;r++){let n=t[r],s=_b[n].hash_attribute;try{_de.initSystemSchemaPaths(Sl.SYSTEM_SCHEMA_NAME,n);let i=new e(Sl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=_b[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await ude.createTable(n,i)}catch(i){throw db.error(`issue creating environment for ${Sl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(fde,"createLMDBTables");function Es(e){lde(e,{mode:Sl.HDB_FILE_PERMISSIONS}),db.info(`Directory ${e} created`)}a(Es,"makeDirectory")});var om=g((xye,a$)=>{"use strict";var Eb=require("os"),e$=require("inquirer"),kn=require("fs-extra"),Ede=require("properties-reader"),$a=require("chalk"),Ws=require("path"),hde=require("human-readable-ids").hri,pde=require("ora"),mde=require("yaml"),wt=G(),Lo=J(),ud=W(),im=Uo(),t$=sm(),r$=Gi(),te=w(),Sde=Qk(),Tde=zk(),hb=Et(),gde=Nr(),Rde=FE(),Ade=KN(),Ode=wn(),Nde=require("util").promisify,bde=Nde(Ode.setSchemaDataToGlobal),yde=em(),Tl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),lr=a(e=>$a.magenta.bold(e),"HDB_PROMPT_MSG"),Ide="https://harperdb.io/legal/end-user-license-agreement",Do=Eb.EOL,wo="",wde="yes",Jk="Starting HarperDB install...",Xk="HarperDB installation was successful.",Zk="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Cde="An out of date version of HarperDB is already installed.",fb="It appears that HarperDB is already installed. Exiting install...",Lde="Aborting install",Dde=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Pde=new RegExp(/^[^\s.,*>]+$/),Mde=Eb.homedir(),Ude=Ws.join(Mde,te.HDB_ROOT_DIR_NAME),vde=9925,Bde="HDB_ADMIN",Hde="CLUSTER_USER",xr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},gl=im([te.INSTALL_PROMPTS.HDB_CONFIG]),Ks,n$=!1;a$.exports=s$;s$.createSuperUser=o$;async function s$(){console.log(lr(Do+Jk+Do)),wt.notify(Jk);let e;gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&(e=qde());let t=Gde();Object.assign(t,e);let r=Sde(t);if(r)throw r.message;await Fde(),await kde(t);let n=await xde(t);n[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ks=n[te.INSTALL_PROMPTS.ROOTPATH],gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&Ws.dirname(gl[te.INSTALL_PROMPTS.HDB_CONFIG])===Ks&&(n$=!0),!gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&await kn.pathExists(Ws.join(Ks,te.HDB_CONFIG_FILE))&&(console.error(fb),process.exit());let s=pde({prefixText:lr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),ud.isEmpty(Ks))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Lo.setHdbBasePath(Ks),await Tde(Ks),await $de(),await Vde(n),wt.initLogSettings(!0),await o$(n),await Kde(n),await yde.generateKeys(),await Wde(),Ade(),s.stop(),console.log(lr(Do+Xk+Do)),wt.notify(Xk)}a(s$,"install");function qde(){let e=mde.parseDocument(kn.readFileSync(gl[te.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=hb.flattenConfig(e.toJSON());return t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(qde,"getConfigFromFile");async function xde(e){wt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.ROOTPATH],xr.DESTINATION),name:te.INSTALL_PROMPTS.ROOTPATH,prefix:wo,default:Ude,validate:async s=>Ys(s)?Ys(s):await kn.pathExists(Ws.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:lr(xr.DESTINATION)},{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],xr.HDB_PORT),name:te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:wo,default:vde,validate:s=>Dde.test(s)?!0:"Invalid port.",message:lr(xr.HDB_PORT)},{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],xr.HDB_USERNAME),name:te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:wo,default:Bde,validate:s=>Ys(s)?Ys(s):(t=s,!0),message:lr(xr.HDB_USERNAME)},{type:"password",when:Co(e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],xr.HDB_PASS),name:te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:wo,validate:s=>Ys(s)?Ys(s):!0,message:lr(xr.HDB_PASS)}];if(ud.autoCastBoolean(e[te.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.CLUSTERING_NODENAME],xr.NODE_NAME),name:te.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:wo,default:hde.random(),validate:i=>Pde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:lr(xr.NODE_NAME)},{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.CLUSTERING_USER],xr.CLUSTER_USERNAME),name:te.INSTALL_PROMPTS.CLUSTERING_USER,prefix:wo,default:Hde,validate:i=>Ys(i)?Ys(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:lr(xr.CLUSTER_USERNAME)},{type:"password",when:Co(e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD],xr.CLUSTER_PASS),name:te.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:wo,validate:i=>Ys(i)?Ys(i):!0,message:lr(xr.CLUSTER_PASS)}];r.push(...s)}let n=await e$.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(xde,"installPrompts");function Co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${lr(t)} ${$a.gray("[hidden]")}`),wt.trace(`${lr(t)} [hidden]`)):(console.log(`${lr(t)} ${e}`),wt.trace(`${lr(t)} ${e}`)),!1):!0}a(Co,"displayCmdEnvVar");function Ys(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ys,"checkForEmptyValue");function Gde(){let e=Object.keys(te.INSTALL_PROMPTS),t=im(e),r=im(Object.keys(te.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=te.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Gde,"checkForPromptOverride");async function Fde(){wt.trace("Checking for existing install.");let e=ud.getPropsFilePath(),t=await kn.pathExists(e),r;if(t){wt.trace(`Install found an existing boot prop file at:${e}`);let n=Ede(e),s=hb.getConfigValue(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await kn.pathExists(s)}if(!t&&ud.noBootFile()&&(r=!0),r){if(wt.trace(`Install found existing HDB config at:${e}`),await t$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${r$.version()}. Exiting install...`;console.log(Do+$a.magenta.bold(Cde)),console.log($a.magenta.bold(s)),wt.error(s)}else console.log(Do+$a.magenta.bold(fb)),wt.error(fb);process.exit(0)}}a(Fde,"checkForExistingInstall");async function kde(e){wt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Ide}${Do}and can be viewed by typing or copying and pasting the URL into your web browser.${Do}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:wo,transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.TC_AGREEMENT],t),name:te.INSTALL_PROMPTS.TC_AGREEMENT,message:lr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:$a.yellow("Please enter 'yes' or 'no'")},n=await e$.prompt([r]);n[te.INSTALL_PROMPTS.TC_AGREEMENT]&&n[te.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==wde&&(console.log($a.yellow(Zk)),wt.error(Zk),process.exit(0))}a(kde,"termsAgreement");async function $de(){let e=Ws.join(Ks,te.HDB_CONFIG_FILE),t;try{t=Eb.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
104
|
-
install_user = ${t}`,n=ud.getHomeDir(),s=Ws.join(n,te.HDB_HOME_DIR_NAME),i=Ws.join(s,te.LICENSE_KEY_DIR_NAME);try{kn.mkdirpSync(s,{mode:te.HDB_FILE_PERMISSIONS}),kn.mkdirpSync(i,{mode:te.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${te.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ws.join(s,te.BOOT_PROPS_FILE_NAME);try{await kn.writeFile(o,r)}catch(c){throw wt.error(`There was an error creating the boot file at path: ${o}`),c}Lo.setProperty(te.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Lo.setProperty(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Lo.setProperty(Lo.BOOT_PROPS_FILE_PATH,o)}}a($de,"createBootPropertiesFile");async function Vde(e){wt.trace("Creating HarperDB config file");let t=im(Object.keys(te.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{hb.createConfigFile(t),Lo.initSync()}catch(r){Yde(r)}}a(Vde,"createConfigFile");function Yde(e){wt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Lde);let t=Ws.resolve(Lo.get(Lo.BOOT_PROPS_FILE_PATH),"../");t&&kn.removeSync(t),Ks&&(n$?kn.readdirSync(Ks,{withFileTypes:!0}).forEach(n=>{let s=Ws.join(n.path,n.name);s!==gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&kn.removeSync(s)}):kn.removeSync(Ks)),process.exit(1)}a(Yde,"rollbackInstall");async function i$(e,t){wt.trace("Creating admin user"),await bde();let r;try{r=await Rde.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await gde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(i$,"createAdminUser");async function o$(e){wt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await i$(t,r),delete e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(o$,"createSuperUser");async function Kde(e){wt.trace("Creating Cluster user.");let t;e[te.INSTALL_PROMPTS.CLUSTERING_USER]&&e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[te.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await i$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[te.INSTALL_PROMPTS.CLUSTERING_USER],delete e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Kde,"createClusterUser");async function Wde(){let e=r$.version();if(e)await t$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Wde,"insertHdbVersionInfo")});var u$=g((Fye,l$)=>{"use strict";var pb=W(),Sn=G(),c$=ib();l$.exports={processDirectives:Qde};async function Qde(e){console.log("Starting upgrade process...");let t=c$.getVersionsForUpgrade(e),r=Jde(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Sn.notify(c),console.log(c);let l=[],_=[];try{l=jde(o.sync_functions)}catch(u){throw Sn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await zde(o.async_functions)}catch(u){throw Sn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Qde,"processDirectives");function jde(e){if(pb.isEmptyOrZeroLength(e))return Sn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Sn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Sn.info(`Running function ${r.name}`),!(r instanceof Function)){Sn.info("Variable being processed is not a function");continue}let n=r();Sn.info(n),t.push(n)}return t}a(jde,"runSyncFunctions");async function zde(e){if(pb.isEmptyOrZeroLength(e))return Sn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Sn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Sn.info(`Running function ${s.name}`),!(s instanceof Function)){Sn.info("Variable being processed is not a function");continue}let i=await s();Sn.info(i),t.push(i)}return t}a(zde,"runAsyncFunctions");function Jde(e){if(pb.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=c$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Jde,"getUpgradeDirectivesToInstall")});var Tb=g(($ye,p$)=>{"use strict";var am=J();am.initSync();var E$=require("chalk"),_$=require("fs-extra"),Di=G(),Li=w(),d$=Gi(),Xde=u$(),mb=W(),h$=sm(),Zde=jp(),f$=vm(),efe=wn(),tfe=require("util").promisify,rfe=tfe(efe.setSchemaDataToGlobal),Sb,{UPGRADE_VERSION:cm}=Li.UPGRADE_JSON_FIELD_NAMES_ENUM;p$.exports={upgrade:nfe};async function nfe(e){await rfe(),Sb===void 0&&(Sb=kc()),_$.existsSync(am.get(am.BOOT_PROPS_FILE_PATH))||(_d("The hdb_boot_properties file was not found. Please install HDB.",Li.LOG_LEVELS.ERROR),process.exit(1)),_$.existsSync(am.get(Li.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(_d("The hdb settings file was not found. Please make sure HDB is installed.",Li.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await h$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),_d(`This version of HarperDB is ${d$.version()}`,Li.LOG_LEVELS.INFO);let r=t[cm]?t[cm]:d$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Li.HDB_SUPPORT_ADDRESS}`),Di.notify("Missing new version field from upgrade info object"),process.exit(1)),await sfe();let n,s=0;try{n=await Zde.forceUpdatePrompt(t)}catch(i){Di.error("There was an error when prompting user about upgrade."),Di.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Di.info(`Starting upgrade to version ${r}`),await ife(t),_d(`HarperDB was successfully upgraded to version ${t[cm]}`,Li.LOG_LEVELS.INFO)}a(nfe,"upgrade");async function sfe(){let e=!1,t=await f$.findPs(Li.HDB_PROC_NAME);if(mb.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await f$.findPs("hdb_express");mb.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await Sb.list();mb.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(E$.red(r)),Di.error(r),process.exit(1)}}a(sfe,"checkIfRunning");async function ife(e){try{await Xde.processDirectives(e)}catch(t){throw _d("There was an error during the data upgrade. Please check the logs.",Li.LOG_LEVELS.ERROR),t}try{await h$.insertHdbUpgradeInfo(e[cm])}catch(t){Di.error("Error updating the 'hdb_info' system table."),Di.error(t)}}a(ife,"runUpgrade");function _d(e,t=void 0){t||(t=Di.info),Di[t](e),console.log(E$.magenta(e))}a(_d,"printToLogAndConsole")});var R$=g((Yye,g$)=>{"use strict";var{promises:Rb,createReadStream:ofe,createWriteStream:afe}=require("fs"),{createGzip:cfe}=require("zlib"),{promisify:lfe}=require("util"),{pipeline:ufe}=require("stream"),_fe=lfe(ufe),dfe=require("path"),Ya=J();Ya.initSync();var Va=G(),{CONFIG_PARAMS:dd,ITC_EVENT_TYPES:ffe}=w(),{onMessageFromWorkers:Efe}=tt(),hfe=6e4,pfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",mfe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",gb,S$;g$.exports=T$;Efe(e=>{e.type===ffe.RESTART&&(Ya.initSync(!0),clearInterval(S$),Ya.get(dd.LOGGING_ROTATION_ENABLED)&&T$())});async function T$(){try{let e=Va.getLogFilePath(),t=Ya.get(dd.LOGGING_ROTATION_MAXSIZE),r=Ya.get(dd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Va.error(pfe);return}let n=Ya.get(dd.LOGGING_ROTATION_PATH);if(!n){Va.error(mfe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}gb=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),S$=setInterval(async()=>{if(s){let o;o=await Rb.stat(e),o.size>=s&&await m$(e,n)}i&&Date.now()/6e4-gb>=i&&(await m$(e,n),gb=Date.now()/6e4)},hfe).unref()}catch(e){Va.error(e)}}a(T$,"logRotator");async function m$(e,t){let r=Ya.get(dd.LOGGING_ROTATION_COMPRESS),n=dfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await _fe(ofe(e),cfe(),afe(n)),await Rb.unlink(e)):await Rb.rename(e,n),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(m$,"moveLogFile")});var Ka=g((tIe,C$)=>{"use strict";var Tn=J();Tn.initSync();var Wye=Na(),Ht=w(),js=G(),Pi=require("fs-extra"),Po=require("path"),Sfe=require("systeminformation"),Tfe=KN(),gfe=om(),Ab=require("chalk"),Rfe=Bo(),Mi=W(),O$=Et(),N$=Uo(),A$=mh(),Afe=Tb(),Ofe=R$(),Nfe=require("minimist"),{PACKAGE_ROOT:bfe}=w(),{startHTTPThreads:yfe,startSocketServer:Qye,mostIdleRouting:jye,remoteAffinityRouting:zye}=(qp(),ie(VN)),Ife=sm(),{isMainThread:wfe}=require("worker_threads"),Jye=ti(),Xye=ji(),Zye=TT(),eIe=hu(),lm=w(),Qs,Rl,b$=!1,Cfe="Upgrade complete. Starting HarperDB.",Lfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Dfe="HarperDB not found, starting install process.",Pfe="There was an error during install, check install_log.log for more details. Exiting.",Mfe="HarperDB successfully started.";function Ufe(){if(!b$){let e=a(()=>{Pi.removeSync(Po.join(Tn.get(Ht.CONFIG_PARAMS.ROOTPATH),Ht.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(Ufe,"addExitListeners");async function y$(e=!1,t=!1){if(console.log(Ab.magenta("Starting HarperDB...")),await w$()===!1){console.log(Dfe);try{await gfe()}catch(o){console.error(Pfe,o),js.error(o),process.exit(1)}}let r,n=Rl?.service==="clustering";Rl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Pi.readFile(Po.join(Tn.get(Ht.CONFIG_PARAMS.ROOTPATH),Ht.HDB_PID_FILE),"utf8")),c=await Sfe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Qs===void 0&&(Qs=kc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Tn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await A$.generateNatsConfig(),await Qs.startClusteringProcesses(!0),process.exit()),Ufe(),await Pi.writeFile(Po.join(Tn.get(lm.CONFIG_PARAMS.ROOTPATH),lm.HDB_PID_FILE),`${process.pid}`),js.info("HarperDB PID",process.pid);let s;try{let o=await Ife.getVersionUpdateInfo();o!==void 0&&(s=o[Ht.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Afe.upgrade(o),console.log(Cfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),js.error(o)):(console.error(Lfe),js.error(o)),process.exit(1)}if(!e){let o=N$(Object.keys(Ht.CONFIG_PARAM_MAP),!0);!Mi.isEmpty(o)&&!Mi.isEmptyOrZeroLength(Object.keys(o))&&O$.updateConfigValue(void 0,void 0,o,!0,!0)}Tfe(),Hfe(),Mi.autoCastBoolean(Tn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&wfe&&await A$.generateNatsConfig(t)}a(y$,"initialize");async function vfe(e=!1){try{Rl=Nfe(process.argv),Rl.ROOTPATH&&O$.updateConfigObject("settings_path",Po.join(Rl.ROOTPATH,Ht.HDB_CONFIG_FILE)),await y$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Rl.service;Mi.autoCastBoolean(Tn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Qs.startClusteringProcesses(),await Qs.startClusteringThreads()),await yfe(process.env.DEV_MODE?1:Tn.get(lm.CONFIG_PARAMS.THREADS_COUNT)??Tn.get(lm.CONFIG_PARAMS.THREADS)),Tn.get(Ht.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Ofe(),t||I$()}catch(t){console.error(t),js.error(t),process.exit(1)}}a(vfe,"main");function I$(){js.suppressLogging(()=>{console.log(Ab.magenta(""+Pi.readFileSync(Po.join(bfe,"utility/install/ascii_logo.txt")))),console.log(Ab.magenta(`|------------- HarperDB ${Rfe.version} successfully started ------------|`))}),js.notify(Mfe)}a(I$,"started");async function Bfe(e=!0){b$=!e;try{Qs===void 0&&(Qs=kc()),Qs.enterPM2Mode(),await y$(),Mi.autoCastBoolean(Tn.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Qs.startClusteringProcesses(),await Qs.startService(Ht.PROCESS_DESCRIPTORS.HDB),I$(),e&&process.exit(0)}catch(t){console.error(t),js.error(t),process.exit(1)}}a(Bfe,"launch");function Hfe(){let e=Po.join(Tn.getHdbBasePath(),Ht.LICENSE_KEY_DIR_NAME,Ht.LICENSE_FILE_NAME),t=Po.join(e,Ht.LICENSE_FILE_NAME),r=Po.join(e,Ht.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=N$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Mi.isEmpty(n)||Mi.isEmpty(s))return;Pi.mkdirpSync(e),Pi.writeFileSync(r,n),Pi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),js.error(s)}}a(Hfe,"writeLicenseFromVars");C$.exports={launch:Bfe,main:vfe,isHdbInstalled:w$};async function w$(){try{await Pi.stat(Mi.getPropsFilePath()),await Pi.stat(Tn.get(Ht.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Mi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw js.error(`Error checking for HDB install - ${e}`),e}return!0}a(w$,"isHdbInstalled")});var Ob=g((nIe,P$)=>{"use strict";var qfe=G(),xfe=w(),Gfe=require("util"),Ffe=require("child_process"),L$=Gfe.promisify(Ffe.exec),kfe=_i(),fd=kc(),D$="Stopping HarperDB.";P$.exports=$fe;async function $fe(){if(console.log(D$),qfe.notify(D$),await fd.isServiceRegistered(xfe.HDB_PROC_DESCRIPTOR)){fd.enterPM2Mode();let r=await fd.getUniqueServicesList();for(let n in r)await fd.stop(n)}await fd.kill();let t=await kfe.getHDBProcessInfo();t.clustering.forEach(r=>{L$(`kill ${r.pid}`)}),t.core.forEach(r=>{L$(`kill ${r.pid}`)})}a($fe,"stop")});var Lb=g((iIe,F$)=>{"use strict";var Vfe=require("os"),_m=require("https"),M$=require("http"),Ui=require("fs-extra"),Yfe=require("yaml"),Kfe=require("human-readable-ids").hri,{pipeline:U$}=require("stream/promises"),{createWriteStream:dm,ensureDir:fm}=require("fs-extra"),{join:ps}=require("path"),wb=require("lodash"),Wfe=require("minimist"),q$=J(),Qfe=_i(),x$=G(),hd=Et(),{restart:jfe}=Na(),zfe=Ob(),bb=W(),v$=ht(),Jfe=wn(),{isHdbInstalled:Xfe,main:G$,launch:Zfe}=Ka(),eEe=om(),Em=w(),{SYSTEM_TABLE_NAMES:B$,SYSTEM_SCHEMA_NAME:tEe,CONFIG_PARAMS:Ed,OPERATIONS_ENUM:ur}=Em,rEe=9925,nEe="info",sEe=1e4,iEe="clone-node-config.yaml",Cb=[B$.ROLE_TABLE_NAME,B$.USER_TABLE_NAME],Gr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},Qa=Wfe(process.argv),pd=Qa[Gr.HDB_LEADER_USERNAME]??process.env[Gr.HDB_LEADER_USERNAME],md=Qa[Gr.HDB_LEADER_PASSWORD]??process.env[Gr.HDB_LEADER_PASSWORD],Al=Qa[Gr.HDB_LEADER_URL]??process.env[Gr.HDB_LEADER_URL],Nb=Qa[Gr.HDB_LEADER_CLUSTERING_HOST]??process.env[Gr.HDB_LEADER_CLUSTERING_HOST],oEe=Qa[Gr.HDB_LEADER_CLUSTERING_PORT]??process.env[Gr.HDB_LEADER_CLUSTERING_PORT],aEe=(Qa[Gr.HDB_FULLY_CONNECTED]??process.env[Gr.HDB_FULLY_CONNECTED])==="true",Mo=(Qa[Gr.HDB_CLONE_OVERTOP]??process.env[Gr.HDB_CLONE_OVERTOP])==="true",yb,Qe,St,Tt,Nl,Ol,gn,hs,Ib;F$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await Xfe();if(!Mo&&r)return console.info("HarperDB is already installed, clone will not be performed"),G$();if(Mo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Mo?`Cloning node ${Al} overtop of existing HarperDB install`:`Cloning node: ${Al}`;if(console.info(n),Mo)Ib=hd.readConfigFile(),Ol=Ib.rootPath,await zfe();else try{Ol=process.env.ROOTPATH?process.env.ROOTPATH:ps(Vfe.homedir(),Em.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=ps(Ol,iEe),Qe=Yfe.parseDocument(Ui.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}Nl=Qe?.clustering?.nodeName??Kfe.random(),St=await Sd({operation:ur.GET_CONFIGURATION}),St=await JSON.parse(St.body),process.env.HDB_FETCH==="true"?(await _Ee(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await uEe(),Mo||await lEe(),await cEe(),await dEe(),await fEe(t),console.info("Successfully cloned node: "+Al),t&&process.exit()},"cloneNode");async function cEe(){console.info("Cloning configuration"),yb=St?.clustering?.enabled;let e={[Ed.ROOTPATH]:Ol};if(yb&&Qe?.clustering?.enabled!==!1){if(Nb==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[Ed.CLUSTERING_ENABLED]=!0;let n=St?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(oEe)||St?.clustering?.hubServer?.cluster?.network?.port;e[Ed.CLUSTERING_USER]=St?.clustering?.user;let i=q$.get(Ed.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:Nb,port:s}):i=[{host:Nb,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[Ed.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Qe?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in St)St[n]?.package&&!t[n]&&await hd.addConfig(n,St[n]);Qe?.databases&&await hd.addConfig("databases",St?.schemas);let r;Qe&&(r=hd.flattenConfig(Qe));for(let n in r){let s=Em.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Mo?e.clustering_nodeName=Ib?.clustering?.nodeName??Nl:e.clustering_nodeName=Nl),x$.info("Cloning config:",e),wb.isEmpty(e)||hd.updateConfigValue(void 0,void 0,e,!1,!0)}a(cEe,"cloneConfig");async function lEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Ol,!pd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=pd,!md)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=md,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??rEe,process.env.CLUSTERING_NODENAME=Nl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??nEe,await eEe()}a(lEe,"installHDB");async function uEe(){console.info("Cloning system database");let e=Wa("system");await fm(e);let t=ps(e,"system.mdb"),r=dm(t,{overwrite:!0}),n={operation:ur.GET_BACKUP,database:"system"};Mo||(n.tables=Cb);let s=await H$(n,r);if(await Ui.utimes(t,Date.now(),new Date(s.date)),Tt=await Sd({operation:ur.DESCRIBE_ALL}),Tt=await JSON.parse(Tt.body),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},St.schemas)for(let i in St.schemas)Object.keys(St.schemas[i]).includes("tables")&&(gn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));hs=Qe?.databaseConfig?.excludeTables,hs=hs?hs.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Tt){if(gn[i]){Tt[i]="excluded";continue}if(wb.isEmpty(Tt[i]))continue;let o=[],c=!1;for(let E in Tt[i])hs[i+E]?(c=!0,Tt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:ur.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:ur.GET_BACKUP,database:i});let _=Wa(i);await fm(_);let u=ps(_,i+".mdb"),d=dm(u,{overwrite:!0}),f=await H$(l,d);await Ui.utimes(u,Date.now(),new Date(f.date))}}a(uEe,"cloneTables");async function _Ee(){console.info("Cloning system database using fetch");let e={operation:ur.GET_BACKUP,database:"system"};Mo||(e.tables=Cb);let t=await um(e,!0),r=Wa("system");await fm(r);let n=ps(r,"system.mdb");if(await U$(t.body,dm(n,{overwrite:!0})),await Ui.utimes(n,Date.now(),new Date(t.headers.get("date"))),Tt=await um({operation:ur.DESCRIBE_ALL}),Tt=await Tt.json(),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},St.schemas)for(let s in St.schemas)Object.keys(St.schemas[s]).includes("tables")&&(gn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));hs=Qe?.databaseConfig?.excludeTables,hs=hs?hs.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Tt){if(gn[s]){Tt[s]="excluded";continue}if(wb.isEmpty(Tt[s]))continue;let i=[],o=!1;for(let f in Tt[s])hs[s+f]?(o=!0,Tt[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await um({operation:ur.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await um({operation:ur.GET_BACKUP,database:s},!0));let l=Wa(s);await fm(l);let _=new Date(c.headers.get("date")),u=ps(l,`${_.getTime()}-${s}.mdb`);await U$(c.body,dm(u,{overwrite:!0}));let d=ps(l,s+".mdb");await Ui.rename(u,d),await Ui.utimes(d,Date.now(),_)}}a(_Ee,"cloneTablesFetch");async function um(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new _m.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(pd+":"+md).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Al,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(um,"leaderHttpReqFetch");function Wa(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||ps(Ol,"database")}a(Wa,"getDbFileDir");async function dEe(){let{deployComponent:e}=vh(),t=await Sd({operation:ur.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(Qe?.componentConfig?.exclude){for(let o of Qe.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=Qe?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Sd({operation:ur.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(dEe,"cloneComponents");async function fEe(e){if(!yb)return;let t=await Qfe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await Zfe(!1):await G$():(console.info(await jfe({operation:ur.RESTART})),await bb.async_set_timeout(sEe)),console.info("Clustering cloned tables"),e&&await bb.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await Jfe.setSchemaDataToGlobalAsync();let s=u_(),i=await Sd({operation:ur.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await Ui.stat(ps(Wa("system"),"system.mdb"));for(let _ of Cb)o.push({schema:tEe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Tt){if(Tt[_]==="excluded")continue;let u=await Ui.stat(ps(Wa(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in Tt[_])Tt[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await v$.createTableStreams(o),x$.info("Sending add_node request to node:",St?.clustering?.nodeName,"with subscriptions:",o);let l;if(aEe==="true"&&i.connections.length>0){let _=nh(),u=[{node_name:St?.clustering?.nodeName,subscriptions:o}],d=!1;Nl=q$.get(Em.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===Nl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(gn[h.schema]||hs[h.schema+h.table])continue;d=!0;let m=await Ui.stat(ps(Wa(h.schema),h.schema+".mdb"));m.mtime.setSeconds(m.mtime.getSeconds()-10),h.start_time=m.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:ur.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:ur.ADD_NODE,node_name:St?.clustering?.nodeName,subscriptions:o},!0),await v$.closeConnection()}a(fEe,"clusterTables");async function Sd(e){let t=new _m.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(pd+":"+md).toString("base64"),"Content-Type":"application/json"},s=new URL(Al),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await bb.httpRequest(i,e)}a(Sd,"leaderHttpReq");async function H$(e,t){let r=new _m.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(pd+":"+md).toString("base64"),"Content-Type":"application/json"},i=new URL(Al),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,M$=_m),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=M$.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(H$,"leaderHttpStream")});var $$=g((aIe,k$)=>{var EEe=om(),hEe=G();k$.exports=pEe;async function pEe(){try{await EEe()}catch(e){console.error("There was an error during the install."),console.error(e),hEe.error(e),process.exit(1)}}a(pEe,"install")});var K$=g((lIe,Y$)=>{"use strict";var mEe=dh(),SEe=G(),V$="Registration failed.";async function TEe(){let e;try{e=await mEe.register()}catch(t){return SEe.error(`Registration error ${t}`),V$}return e||V$}a(TEe,"register");Y$.exports={register:TEe}});var z$=g((_Ie,j$)=>{"use strict";var Pb=require("fs-extra"),Mb=require("path"),Db=require("yaml"),Td=ht(),gd=w(),W$=et(),Ub=G(),gEe=Nr(),REe=ch(),AEe=oh(),OEe=_i(),Q$=J(),{isHdbInstalled:NEe}=Ka();Q$.initSync();var $n={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Fr={LEAF:"leaf server",HUB:"hub server"},hm;j$.exports=bEe;async function bEe(){let e={harperdb:{status:$n.STOPPED}};if(!await NEe()){e.harperdb.status=$n.NOT_INSTALLED,console.log(Db.stringify(e));return}hm=Q$.get(gd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await Pb.readFile(Mb.join(hm,gd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===gd.NODE_ERROR_CODES.ENOENT){Ub.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=$n.STOPPED,console.log(Db.stringify(e));return}throw n}let r=await OEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=$n.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await yEe(r),e.clustering[Fr.HUB].status===$n.RUNNING&&e.clustering[Fr.LEAF].status===$n.RUNNING){let n=[],s=await REe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await AEe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Td.closeConnection()}console.log(Db.stringify(e)),process.exit()}a(bEe,"status");async function yEe(e){let t={[Fr.HUB]:{},[Fr.LEAF]:{}};if(e.clustering.length===0)return t[Fr.HUB].status=$n.STOPPED,t[Fr.LEAF].status=$n.STOPPED,t;let{port:r}=Td.getServerConfig(gd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await gEe.getClusterUser();try{(await Td.createConnection(r,n,s,!1)).close(),t[Fr.HUB].status=$n.RUNNING}catch{t[Fr.HUB].status=$n.ERRORED}let{port:i}=Td.getServerConfig(gd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Td.createConnection(i,n,s,!1)).close(),t[Fr.LEAF].status=$n.RUNNING}catch{t[Fr.LEAF].status=$n.ERRORED}try{t[Fr.HUB].pid=Number.parseInt(await Pb.readFile(Mb.join(hm,"clustering",W$.PID_FILES.HUB),"utf8"))}catch(o){Ub.error(o),t[Fr.HUB].pid=void 0}try{t[Fr.LEAF].pid=Number.parseInt(await Pb.readFile(Mb.join(hm,"clustering",W$.PID_FILES.LEAF),"utf8"))}catch(o){Ub.error(o),t[Fr.LEAF].pid=void 0}return t}a(yEe,"getHubLeafStatus")});var ja=G(),IEe=Gi(),vb=w(),pm=require("fs"),J$=require("path"),fIe=require("os"),{PACKAGE_ROOT:wEe}=w(),CEe=gy(),EIe=(qp(),ie(VN)),X$=ak(),{SERVICE_ACTIONS_ENUM:kr}=vb;LEe();function LEe(){let e=CEe();if(e)if(e.error){console.error(e.error),ja.error(e.error);return}else e.warn&&(console.warn(e.warn),ja.warn(e.warn));let t;pm.readdir(J$.join(wEe,"bin"),r=>{if(r)return ja.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=X$.buildRequest();n.operation&&(t=kr.OPERATION);let s;switch(t){case kr.OPERATION:ja.trace("calling cli operations with:",n),X$.cliOperations(n).then();break;case kr.DEV:process.env.DEV_MODE=!0;case kr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(pm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),pm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),pm.existsSync(J$.join(i,vb.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Ka().main();break;case kr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Lb()(!0).catch(h=>{console.log(h)}):s=Ka().launch();break;case kr.INSTALL:$$()().then(()=>Ka().main(!0)).catch(E=>{console.error(E)});break;case kr.REGISTER:K$().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case kr.STOP:Ob()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case kr.RESTART:Na().restart({}).then().catch(E=>{ja.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case kr.VERSION:IEe.printVersion();break;case kr.UPGRADE:ja.setLogLevel(vb.LOG_LEVELS.INFO),Tb().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{ja.error(`Got an error during upgrade ${E}`)});break;case kr.STATUS:z$()().then().catch(E=>{console.error(E)});break;case kr.RENEWCERTS:let{generateKeys:f}=em();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Lb()().catch(h=>{console.log(h)}):Ka().main();break;default:console.warn(`The "${t}" command is not understood.`);case kr.HELP:console.log(`
|
|
102
|
+
Reindexing upgrade started for transaction logs`),wi.notify("Reindexing upgrade started for transaction logs"),await bk(ZN,!0,e)),wi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(sd?", but errors occurred":"")}a(u_e,"reindexUpgrade");async function bk(e,t,r){let n=await $s.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Ci.join(e,o.toString());if(o===".DS_Store")continue;let l=await $s.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&$s.statSync(Ci.join(c,d)).isDirectory())try{await __e(o,d,t),lr.info(`Reindexing started for ${o}.${d}`),wi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await f_e(o,d,c,t,r),lr.info(`Reindexing completed for ${o}.${d}`),wi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){sd=!0,f.schema_path=c,f.table_name=d,wi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),wi.error(f),lr.error(f),console.error(f)}}}if(!sd)try{await $s.rm(Zp,{recursive:!0})}catch{}}a(bk,"processTables");async function __e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ci.join(Zp,s);await $s.ensureDir(Zp),await $s.writeFile(i,""),lr=c_e({level:"debug",formatters:{bindings(){}}},i)}a(__e,"initPinoLogger");var d_e=20;async function f_e(e,t,r,n,s){let i;try{i=await pn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){wi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),lr.error(T);return}throw T}let o=p_e(i.dbis),c=pn.openDBI(i,o),l=Object.keys(i.dbis),_=pn.statDBI(i,o);lr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new a_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await pn.createEnvironment(r,t,!1);pn.createDBI(d,o,!1,!0);let f=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),f.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),f.length>d_e&&await E();await E()}catch(T){throw sd=!0,lr.error(T),T}async function E(){let T,R=f.map(({value:B})=>B);n?T=await Promise.all(R.map(B=>E_e(d,B))):T=await n_e(d,o,l.filter(B=>B!=="__blob__"),R,!1);for(let B=0,v=f.length;B<v;B++){let{key:P,value:V}=f[B];lr.info(`Record hash value: ${P} hash: ${o}`);let Y;n?Y=T[B]:Y=T.written_hashes.indexOf(P)>-1,nd(Y,!0),h_e(d,o,V[o],n),lr.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&wi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),lr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=pn.statDBI(i,o),m=pn.statDBI(d,o);if(lr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),nd.deepStrictEqual(h.entryCount,m.entryCount),await pn.closeEnvironment(i),await pn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=Ci.join(r,t),R=Ci.join(T,"data.mdb"),U=Ci.join(T,"lock.mdb");await $s.unlink(R),await $s.unlink(U),await $s.rmdir(T),lr.info(`Deleted old environment files from schema folder: ${R}, ${U}`)}let S=await pn.openEnvironment(r,t),A=pn.statDBI(S,o);lr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(A)}`),nd.deepStrictEqual(A.entryCount,m.entryCount),await pn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(f_e,"processTable");async function E_e(e,t){pn.initializeDBIs(e,yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),o_e.isEmpty(t.user_name)||e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(E_e,"insertTransaction");function h_e(e,t,r,n){let i=e.dbis[t].get(r);nd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[yo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!i_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];yk(e,c,d,r)}else yk(e,c,l,r)}a(h_e,"validateIndices");function yk(e,t,r,n){try{let s=!1,i=s_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||lr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),nd.deepStrictEqual(s,!0)}catch(s){sd=!0,lr.error(s),console.error(s)}}a(yk,"validateIndex");function p_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(p_e,"getHashDBI")});var tm=g((yye,Lk)=>{"use strict";var m_e=require("mkcert"),em=require("path"),eb=require("fs-extra"),tb=G(),S_e=J(),rb=C(),pl=ig(),T_e=Uo(),g_e=Et();Lk.exports={generateKeys:R_e,updateConfigCert:Ck};async function R_e(){let e=S_e.getHdbBasePath(),t=em.join(e,rb.LICENSE_KEY_DIR_NAME),r=await m_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:pl.CERTIFICATE_VALUES.key,caCert:pl.CERTIFICATE_VALUES.cert}),n=em.join(t,pl.CERTIFICATE_PEM_NAME),s=em.join(t,pl.PRIVATEKEY_PEM_NAME),i=em.join(t,pl.CA_PEM_NAME);try{await eb.writeFile(n,r.cert)}catch(o){throw tb.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await eb.writeFile(s,r.key)}catch(o){throw tb.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await eb.writeFile(i,pl.CERTIFICATE_VALUES.cert)}catch(o){throw tb.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}Ck(n,s,i)}a(R_e,"generateKeys");function Ck(e,t,r){let n=T_e(Object.keys(rb.CONFIG_PARAM_MAP),!0),s=rb.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),g_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(Ck,"updateConfigCert")});var vk=g((Cye,Uk)=>{"use strict";var rm=require("path"),Io=require("fs-extra"),A_e=JN(),Ga=G(),Dk=Et(),nb=J(),ds=C(),nm=W(),O_e=require("properties-reader"),N_e=Xn(),b_e=VE(),y_e=Ar(),wye=require("util"),I_e=y_e.searchByValue,w_e=Or(),C_e=uh(),L_e=et(),D_e=wk(),Pk=tm(),P_e=zp(),ad=new A_e("4.0.0"),Mk=[],id,od;async function M_e(){try{if(await P_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),id){let t=nm.changeExtension(id,".bak");await Io.move(id,t)}if(od){let t=nm.changeExtension(od,".bak");await Io.move(od,t)}await Pk.generateKeys()}else console.log("Using existing certificates."),Pk.updateConfigCert(id,od,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(M_e,"generateNewKeys");async function U_e(){console.log("Updating HarperDB nodes."),Ga.info("Updating HarperDB nodes.");let e=[];try{let t=new N_e(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await I_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!L_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:ds.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(nm.isEmptyOrZeroLength(n))return;let s=new b_e(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await w_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{C_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(U_e,"updateNodes");async function v_e(){let e=nb.get(ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(rm.join("config","settings.js"))){Ga.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),Ga.info(t);let r=rm.dirname(e),n=nb.get(ds.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=rm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=rm.join(n,ds.HDB_CONFIG_FILE);try{Ga.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Io.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{Ga.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ga.info("Updating env variables with new settings values");let d=Dk.initOldConfig(e);id=d[ds.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],od=d[ds.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Dk.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=nm.getPropsFilePath();Io.accessSync(o,Io.constants.F_OK|Io.constants.R_OK);let l=O_e(o).get(ds.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
|
|
103
|
+
install_user = ${l}`;try{Io.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{nb.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Io.removeSync(r),console.log(u),Ga.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(v_e,"updateSettingsFile_4_0_0");ad.async_functions.push(v_e);ad.async_functions.push(M_e);ad.async_functions.push(D_e);ad.async_functions.push(U_e);Mk.push(ad);Uk.exports=Mk});var sb=g((Dye,xk)=>{"use strict";var Fa=W(),B_e=C(),Bk=G(),{DATA_VERSION:H_e,UPGRADE_VERSION:q_e}=B_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Hk=Ok(),sm=vk(),ka=new Map;Hk&&Hk.forEach(e=>{ka.set(e.version,e)});sm&&sm.forEach(e=>{ka.set(e.version,e)});sm&&sm.forEach(e=>{ka.set(e.version,e)});function x_e(){return[...ka.keys()].sort(Fa.compareVersions)}a(x_e,"getSortedVersions");function qk(e){let t=e[H_e],r=e[q_e];return Fa.isEmptyOrZeroLength(t)||Fa.isEmptyOrZeroLength(r)?(Bk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Bk.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...ka.keys()].sort(Fa.compareVersions).filter(function(n){return Fa.compareVersions(n,t)>0&&Fa.compareVersions(n,r)<=0})}a(qk,"getVersionsForUpgrade");function G_e(e){return qk(e).length>0}a(G_e,"hasUpgradesRequired");function F_e(e){return Fa.isEmptyOrZeroLength(e)?null:ka.has(e)?ka.get(e):null}a(F_e,"getDirectiveByVersion");xk.exports={getSortedVersions:x_e,getDirectiveByVersion:F_e,getVersionsForUpgrade:qk,hasUpgradesRequired:G_e}});var im=g((Mye,Vk)=>{"use strict";var k_e=require("util"),ib=require("chalk"),$_e=require("os"),Fk=Or(),V_e=Ar(),mn=C(),kk=_k(),ab=ZT(),{UpgradeObject:Gk}=Ek(),{forceDowngradePrompt:Y_e}=zp(),K_e=Gi(),cd=G(),ml=W(),cb=wn(),W_e=(Re(),ie(Ge)),Q_e=sb(),j_e=k_e.promisify(cb.setSchemaDataToGlobal),z_e=V_e.searchByValue,J_e="info_id",X_e="2.9.9",Z_e="3.0.0";async function ede(e){let t=new kk.HdbInfoInsertObject(1,e,e),r=new ab.InsertObject(mn.OPERATIONS_ENUM.INSERT,mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return cb.setSchemaDataToGlobal(),Fk.insert(r)}a(ede,"insertHdbInstallInfo");async function ob(e){let t,r=await $k(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new kk.HdbInfoInsertObject(i,e,e);let o=new ab.InsertObject(mn.OPERATIONS_ENUM.INSERT,mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await j_e(),Fk.insert(o)}a(ob,"insertHdbUpgradeInfo");async function $k(){let e=new ab.NoSQLSeachObject(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,J_e,mn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await z_e(e))}catch(r){cd.info(r)}return t}a($k,"getAllHdbInfoRecords");async function tde(){let e=await $k();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(tde,"getLatestHdbInfoRecord");async function rde(){cd.info("Checking if HDB software has been updated");try{let e=K_e.version(),t=await tde(),r;if(ml.isEmpty(t))r=X_e;else if(r=t.data_version_num,ml.compareVersions(r.toString(),e.toString())>0){if(!ml.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(ib.yellow(`This instance's data was last run on version ${r}`)),console.error(ib.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${$_e.EOL}${mn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");ml.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(ib.yellow(`This instance's data was last run on version ${r}`)),await Y_e(new Gk(r,e))?await ob(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(cb.setSchemaDataToGlobal(),nde(r),e.toString()===r.toString())return;let n=new Gk(r,e);if(Q_e.hasUpgradesRequired(n))return n;ml.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await ob(n.upgrade_version),cd.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw cd.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),cd.fatal(e),e}}a(rde,"getVersionUpdateInfo");function nde(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${mn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in W_e.databases.system))throw console.log(t),new Error(t);if(!ml.isEmpty(e)&&e<Z_e)throw console.log(t),new Error(t)}a(nde,"checkIfInstallIsSupported");Vk.exports={insertHdbInstallInfo:ede,insertHdbUpgradeInfo:ob,getVersionUpdateInfo:rde}});var jk=g((vye,Qk)=>{"use strict";var lb=require("joi"),{boolean:sde,string:Yk,number:ide}=lb.types(),Kk=require("fs-extra"),ld=C(),Wk=require("path"),ode=rt();Qk.exports=ade;function ade(e){let t=Yk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=lb.object({[ld.INSTALL_PROMPTS.ROOTPATH]:lb.custom(cde),[ld.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ide.min(0),[ld.INSTALL_PROMPTS.TC_AGREEMENT]:Yk.valid("yes","YES","Yes"),[ld.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[ld.INSTALL_PROMPTS.CLUSTERING_ENABLED]:sde});return ode.validateBySchema(e,r)}a(ade,"installValidator");function cde(e,t){if(Kk.existsSync(Wk.join(e,"system/hdb_user/data.mdb"))||Kk.existsSync(Wk.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(cde,"validateRootAvailable")});var Jk=g((Hye,zk)=>{"use strict";var{mkdirpSync:lde}=require("fs-extra"),Vs=require("path"),Sl=C(),_b=G(),ude=In(),ub=ti(),_de=ze();zk.exports=dde;async function dde(e){_b.trace("Mounting HarperDB"),Es(e),Es(Vs.join(e,"backup")),Es(Vs.join(e,"trash")),Es(Vs.join(e,"keys")),Es(Vs.join(e,"keys",Sl.LICENSE_FILE_NAME)),Es(Vs.join(e,"log")),Es(Vs.join(e,"doc")),Es(Vs.join(e,"database")),Es(Vs.join(e,Sl.TRANSACTIONS_DIR_NAME)),Es(Vs.join(e,"clustering","leaf")),Es(Vs.join(e,"components")),await fde()}a(dde,"mountHdb");async function fde(){let e=hu(),t=Object.keys(ub);for(let r=0;r<t.length;r++){let n=t[r],s=ub[n].hash_attribute;try{_de.initSystemSchemaPaths(Sl.SYSTEM_SCHEMA_NAME,n);let i=new e(Sl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=ub[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await ude.createTable(n,i)}catch(i){throw _b.error(`issue creating environment for ${Sl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(fde,"createLMDBTables");function Es(e){lde(e,{mode:Sl.HDB_FILE_PERMISSIONS}),_b.info(`Directory ${e} created`)}a(Es,"makeDirectory")});var am=g((xye,c$)=>{"use strict";var fb=require("os"),t$=require("inquirer"),kn=require("fs-extra"),Ede=require("properties-reader"),$a=require("chalk"),Ws=require("path"),hde=require("human-readable-ids").hri,pde=require("ora"),mde=require("yaml"),Ct=G(),Lo=J(),ud=W(),om=Uo(),r$=im(),n$=Gi(),te=C(),Sde=jk(),Tde=Jk(),Eb=Et(),gde=yr(),Rde=FE(),Ade=YN(),Ode=wn(),Nde=require("util").promisify,bde=Nde(Ode.setSchemaDataToGlobal),yde=tm(),Tl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),ur=a(e=>$a.magenta.bold(e),"HDB_PROMPT_MSG"),Ide="https://harperdb.io/legal/end-user-license-agreement",Do=fb.EOL,wo="",wde="yes",Xk="Starting HarperDB install...",Zk="HarperDB installation was successful.",e$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Cde="An out of date version of HarperDB is already installed.",db="It appears that HarperDB is already installed. Exiting install...",Lde="Aborting install",Dde=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Pde=new RegExp(/^[^\s.,*>]+$/),Mde=fb.homedir(),Ude=Ws.join(Mde,te.HDB_ROOT_DIR_NAME),vde=9925,Bde="HDB_ADMIN",Hde="CLUSTER_USER",Fr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},gl=om([te.INSTALL_PROMPTS.HDB_CONFIG]),Ks,s$=!1;c$.exports=i$;i$.createSuperUser=a$;async function i$(){console.log(ur(Do+Xk+Do)),Ct.notify(Xk);let e;gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&(e=qde());let t=Gde();Object.assign(t,e);let r=Sde(t);if(r)throw r.message;await Fde(),await kde(t);let n=await xde(t);n[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ks=n[te.INSTALL_PROMPTS.ROOTPATH],gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&Ws.dirname(gl[te.INSTALL_PROMPTS.HDB_CONFIG])===Ks&&(s$=!0),!gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&await kn.pathExists(Ws.join(Ks,te.HDB_CONFIG_FILE))&&(console.error(db),process.exit());let s=pde({prefixText:ur("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),ud.isEmpty(Ks))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Lo.setHdbBasePath(Ks),await Tde(Ks),await $de(),await Vde(n),Ct.initLogSettings(!0),await a$(n),await Kde(n),await yde.generateKeys(),await Wde(),Ade(),s.stop(),console.log(ur(Do+Zk+Do)),Ct.notify(Zk)}a(i$,"install");function qde(){let e=mde.parseDocument(kn.readFileSync(gl[te.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=Eb.flattenConfig(e.toJSON());return t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(qde,"getConfigFromFile");async function xde(e){Ct.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.ROOTPATH],Fr.DESTINATION),name:te.INSTALL_PROMPTS.ROOTPATH,prefix:wo,default:Ude,validate:async s=>Ys(s)?Ys(s):await kn.pathExists(Ws.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:ur(Fr.DESTINATION)},{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Fr.HDB_PORT),name:te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:wo,default:vde,validate:s=>Dde.test(s)?!0:"Invalid port.",message:ur(Fr.HDB_PORT)},{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Fr.HDB_USERNAME),name:te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:wo,default:Bde,validate:s=>Ys(s)?Ys(s):(t=s,!0),message:ur(Fr.HDB_USERNAME)},{type:"password",when:Co(e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Fr.HDB_PASS),name:te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:wo,validate:s=>Ys(s)?Ys(s):!0,message:ur(Fr.HDB_PASS)}];if(ud.autoCastBoolean(e[te.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.CLUSTERING_NODENAME],Fr.NODE_NAME),name:te.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:wo,default:hde.random(),validate:i=>Pde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:ur(Fr.NODE_NAME)},{type:"input",transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.CLUSTERING_USER],Fr.CLUSTER_USERNAME),name:te.INSTALL_PROMPTS.CLUSTERING_USER,prefix:wo,default:Hde,validate:i=>Ys(i)?Ys(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:ur(Fr.CLUSTER_USERNAME)},{type:"password",when:Co(e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Fr.CLUSTER_PASS),name:te.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:wo,validate:i=>Ys(i)?Ys(i):!0,message:ur(Fr.CLUSTER_PASS)}];r.push(...s)}let n=await t$.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(xde,"installPrompts");function Co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${ur(t)} ${$a.gray("[hidden]")}`),Ct.trace(`${ur(t)} [hidden]`)):(console.log(`${ur(t)} ${e}`),Ct.trace(`${ur(t)} ${e}`)),!1):!0}a(Co,"displayCmdEnvVar");function Ys(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ys,"checkForEmptyValue");function Gde(){let e=Object.keys(te.INSTALL_PROMPTS),t=om(e),r=om(Object.keys(te.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=te.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Gde,"checkForPromptOverride");async function Fde(){Ct.trace("Checking for existing install.");let e=ud.getPropsFilePath(),t=await kn.pathExists(e),r;if(t){Ct.trace(`Install found an existing boot prop file at:${e}`);let n=Ede(e),s=Eb.getConfigValue(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await kn.pathExists(s)}if(!t&&ud.noBootFile()&&(r=!0),r){if(Ct.trace(`Install found existing HDB config at:${e}`),await r$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${n$.version()}. Exiting install...`;console.log(Do+$a.magenta.bold(Cde)),console.log($a.magenta.bold(s)),Ct.error(s)}else console.log(Do+$a.magenta.bold(db)),Ct.error(db);process.exit(0)}}a(Fde,"checkForExistingInstall");async function kde(e){Ct.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Ide}${Do}and can be viewed by typing or copying and pasting the URL into your web browser.${Do}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:wo,transformer:Tl,when:Co(e[te.INSTALL_PROMPTS.TC_AGREEMENT],t),name:te.INSTALL_PROMPTS.TC_AGREEMENT,message:ur(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:$a.yellow("Please enter 'yes' or 'no'")},n=await t$.prompt([r]);n[te.INSTALL_PROMPTS.TC_AGREEMENT]&&n[te.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==wde&&(console.log($a.yellow(e$)),Ct.error(e$),process.exit(0))}a(kde,"termsAgreement");async function $de(){let e=Ws.join(Ks,te.HDB_CONFIG_FILE),t;try{t=fb.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
|
|
104
|
+
install_user = ${t}`,n=ud.getHomeDir(),s=Ws.join(n,te.HDB_HOME_DIR_NAME),i=Ws.join(s,te.LICENSE_KEY_DIR_NAME);try{kn.mkdirpSync(s,{mode:te.HDB_FILE_PERMISSIONS}),kn.mkdirpSync(i,{mode:te.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${te.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Ws.join(s,te.BOOT_PROPS_FILE_NAME);try{await kn.writeFile(o,r)}catch(c){throw Ct.error(`There was an error creating the boot file at path: ${o}`),c}Lo.setProperty(te.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Lo.setProperty(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Lo.setProperty(Lo.BOOT_PROPS_FILE_PATH,o)}}a($de,"createBootPropertiesFile");async function Vde(e){Ct.trace("Creating HarperDB config file");let t=om(Object.keys(te.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{Eb.createConfigFile(t),Lo.initSync()}catch(r){Yde(r)}}a(Vde,"createConfigFile");function Yde(e){Ct.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Lde);let t=Ws.resolve(Lo.get(Lo.BOOT_PROPS_FILE_PATH),"../");t&&kn.removeSync(t),Ks&&(s$?kn.readdirSync(Ks,{withFileTypes:!0}).forEach(n=>{let s=Ws.join(n.path,n.name);s!==gl[te.INSTALL_PROMPTS.HDB_CONFIG]&&kn.removeSync(s)}):kn.removeSync(Ks)),process.exit(1)}a(Yde,"rollbackInstall");async function o$(e,t){Ct.trace("Creating admin user"),await bde();let r;try{r=await Rde.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await gde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(o$,"createAdminUser");async function a$(e){Ct.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await o$(t,r),delete e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(a$,"createSuperUser");async function Kde(e){Ct.trace("Creating Cluster user.");let t;e[te.INSTALL_PROMPTS.CLUSTERING_USER]&&e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[te.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await o$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[te.INSTALL_PROMPTS.CLUSTERING_USER],delete e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Kde,"createClusterUser");async function Wde(){let e=n$.version();if(e)await r$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Wde,"insertHdbVersionInfo")});var _$=g((Fye,u$)=>{"use strict";var hb=W(),Sn=G(),l$=sb();u$.exports={processDirectives:Qde};async function Qde(e){console.log("Starting upgrade process...");let t=l$.getVersionsForUpgrade(e),r=Jde(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Sn.notify(c),console.log(c);let l=[],_=[];try{l=jde(o.sync_functions)}catch(u){throw Sn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await zde(o.async_functions)}catch(u){throw Sn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Qde,"processDirectives");function jde(e){if(hb.isEmptyOrZeroLength(e))return Sn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Sn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Sn.info(`Running function ${r.name}`),!(r instanceof Function)){Sn.info("Variable being processed is not a function");continue}let n=r();Sn.info(n),t.push(n)}return t}a(jde,"runSyncFunctions");async function zde(e){if(hb.isEmptyOrZeroLength(e))return Sn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Sn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Sn.info(`Running function ${s.name}`),!(s instanceof Function)){Sn.info("Variable being processed is not a function");continue}let i=await s();Sn.info(i),t.push(i)}return t}a(zde,"runAsyncFunctions");function Jde(e){if(hb.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=l$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(Jde,"getUpgradeDirectivesToInstall")});var Sb=g(($ye,m$)=>{"use strict";var cm=J();cm.initSync();var h$=require("chalk"),d$=require("fs-extra"),Di=G(),Li=C(),f$=Gi(),Xde=_$(),pb=W(),p$=im(),Zde=zp(),E$=Bm(),efe=wn(),tfe=require("util").promisify,rfe=tfe(efe.setSchemaDataToGlobal),mb,{UPGRADE_VERSION:lm}=Li.UPGRADE_JSON_FIELD_NAMES_ENUM;m$.exports={upgrade:nfe};async function nfe(e){await rfe(),mb===void 0&&(mb=kc()),d$.existsSync(cm.get(cm.BOOT_PROPS_FILE_PATH))||(_d("The hdb_boot_properties file was not found. Please install HDB.",Li.LOG_LEVELS.ERROR),process.exit(1)),d$.existsSync(cm.get(Li.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(_d("The hdb settings file was not found. Please make sure HDB is installed.",Li.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await p$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),_d(`This version of HarperDB is ${f$.version()}`,Li.LOG_LEVELS.INFO);let r=t[lm]?t[lm]:f$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Li.HDB_SUPPORT_ADDRESS}`),Di.notify("Missing new version field from upgrade info object"),process.exit(1)),await sfe();let n,s=0;try{n=await Zde.forceUpdatePrompt(t)}catch(i){Di.error("There was an error when prompting user about upgrade."),Di.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Di.info(`Starting upgrade to version ${r}`),await ife(t),_d(`HarperDB was successfully upgraded to version ${t[lm]}`,Li.LOG_LEVELS.INFO)}a(nfe,"upgrade");async function sfe(){let e=!1,t=await E$.findPs(Li.HDB_PROC_NAME);if(pb.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await E$.findPs("hdb_express");pb.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await mb.list();pb.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(h$.red(r)),Di.error(r),process.exit(1)}}a(sfe,"checkIfRunning");async function ife(e){try{await Xde.processDirectives(e)}catch(t){throw _d("There was an error during the data upgrade. Please check the logs.",Li.LOG_LEVELS.ERROR),t}try{await p$.insertHdbUpgradeInfo(e[lm])}catch(t){Di.error("Error updating the 'hdb_info' system table."),Di.error(t)}}a(ife,"runUpgrade");function _d(e,t=void 0){t||(t=Di.info),Di[t](e),console.log(h$.magenta(e))}a(_d,"printToLogAndConsole")});var A$=g((Yye,R$)=>{"use strict";var{promises:gb,createReadStream:ofe,createWriteStream:afe}=require("fs"),{createGzip:cfe}=require("zlib"),{promisify:lfe}=require("util"),{pipeline:ufe}=require("stream"),_fe=lfe(ufe),dfe=require("path"),Ya=J();Ya.initSync();var Va=G(),{CONFIG_PARAMS:dd,ITC_EVENT_TYPES:ffe}=C(),{onMessageFromWorkers:Efe}=tt(),hfe=6e4,pfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",mfe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",Tb,T$;R$.exports=g$;Efe(e=>{e.type===ffe.RESTART&&(Ya.initSync(!0),clearInterval(T$),Ya.get(dd.LOGGING_ROTATION_ENABLED)&&g$())});async function g$(){try{let e=Va.getLogFilePath(),t=Ya.get(dd.LOGGING_ROTATION_MAXSIZE),r=Ya.get(dd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Va.error(pfe);return}let n=Ya.get(dd.LOGGING_ROTATION_PATH);if(!n){Va.error(mfe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}Tb=Date.now()/6e4,Va.trace("Log rotate enabled, maxSize:",t,"interval:",r),T$=setInterval(async()=>{if(s){let o;o=await gb.stat(e),o.size>=s&&await S$(e,n)}i&&Date.now()/6e4-Tb>=i&&(await S$(e,n),Tb=Date.now()/6e4)},hfe).unref()}catch(e){Va.error(e)}}a(g$,"logRotator");async function S$(e,t){let r=Ya.get(dd.LOGGING_ROTATION_COMPRESS),n=dfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await _fe(ofe(e),cfe(),afe(n)),await gb.unlink(e)):await gb.rename(e,n),Va.closeLogFile(),Va.notify(`hdb.log rotated, old log moved to ${n}`)}a(S$,"moveLogFile")});var Ka=g((tIe,L$)=>{"use strict";var Tn=J();Tn.initSync();var Wye=Na(),xt=C(),js=G(),Pi=require("fs-extra"),Po=require("path"),Sfe=require("systeminformation"),Tfe=YN(),gfe=am(),Rb=require("chalk"),Rfe=Bo(),Mi=W(),N$=Et(),b$=Uo(),O$=mh(),Afe=Sb(),Ofe=A$(),Nfe=require("minimist"),{PACKAGE_ROOT:bfe}=C(),{startHTTPThreads:yfe,startSocketServer:Qye,mostIdleRouting:jye,remoteAffinityRouting:zye}=(xp(),ie($N)),Ife=im(),{isMainThread:wfe}=require("worker_threads"),Jye=ti(),Xye=ji(),Zye=gT(),eIe=hu(),um=C(),Qs,Rl,y$=!1,Cfe="Upgrade complete. Starting HarperDB.",Lfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Dfe="HarperDB not found, starting install process.",Pfe="There was an error during install, check install_log.log for more details. Exiting.",Mfe="HarperDB successfully started.";function Ufe(){if(!y$){let e=a(()=>{Pi.removeSync(Po.join(Tn.get(xt.CONFIG_PARAMS.ROOTPATH),xt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(Ufe,"addExitListeners");async function I$(e=!1,t=!1){if(console.log(Rb.magenta("Starting HarperDB...")),await C$()===!1){console.log(Dfe);try{await gfe()}catch(o){console.error(Pfe,o),js.error(o),process.exit(1)}}let r,n=Rl?.service==="clustering";Rl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Pi.readFile(Po.join(Tn.get(xt.CONFIG_PARAMS.ROOTPATH),xt.HDB_PID_FILE),"utf8")),c=await Sfe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Qs===void 0&&(Qs=kc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Tn.get(xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await O$.generateNatsConfig(),await Qs.startClusteringProcesses(!0),process.exit()),Ufe(),await Pi.writeFile(Po.join(Tn.get(um.CONFIG_PARAMS.ROOTPATH),um.HDB_PID_FILE),`${process.pid}`),js.info("HarperDB PID",process.pid);let s;try{let o=await Ife.getVersionUpdateInfo();o!==void 0&&(s=o[xt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Afe.upgrade(o),console.log(Cfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),js.error(o)):(console.error(Lfe),js.error(o)),process.exit(1)}if(!e){let o=b$(Object.keys(xt.CONFIG_PARAM_MAP),!0);!Mi.isEmpty(o)&&!Mi.isEmptyOrZeroLength(Object.keys(o))&&N$.updateConfigValue(void 0,void 0,o,!0,!0)}Tfe(),Hfe(),Mi.autoCastBoolean(Tn.get(xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&wfe&&await O$.generateNatsConfig(t)}a(I$,"initialize");async function vfe(e=!1){try{Rl=Nfe(process.argv),Rl.ROOTPATH&&N$.updateConfigObject("settings_path",Po.join(Rl.ROOTPATH,xt.HDB_CONFIG_FILE)),await I$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Rl.service;Mi.autoCastBoolean(Tn.get(xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Qs.startClusteringProcesses(),await Qs.startClusteringThreads()),await yfe(process.env.DEV_MODE?1:Tn.get(um.CONFIG_PARAMS.THREADS_COUNT)??Tn.get(um.CONFIG_PARAMS.THREADS)),Tn.get(xt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Ofe(),t||w$()}catch(t){console.error(t),js.error(t),process.exit(1)}}a(vfe,"main");function w$(){js.suppressLogging(()=>{console.log(Rb.magenta(""+Pi.readFileSync(Po.join(bfe,"utility/install/ascii_logo.txt")))),console.log(Rb.magenta(`|------------- HarperDB ${Rfe.version} successfully started ------------|`))}),js.notify(Mfe)}a(w$,"started");async function Bfe(e=!0){y$=!e;try{Qs===void 0&&(Qs=kc()),Qs.enterPM2Mode(),await I$(),Mi.autoCastBoolean(Tn.get(xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Qs.startClusteringProcesses(),await Qs.startService(xt.PROCESS_DESCRIPTORS.HDB),w$(),e&&process.exit(0)}catch(t){console.error(t),js.error(t),process.exit(1)}}a(Bfe,"launch");function Hfe(){let e=Po.join(Tn.getHdbBasePath(),xt.LICENSE_KEY_DIR_NAME,xt.LICENSE_FILE_NAME),t=Po.join(e,xt.LICENSE_FILE_NAME),r=Po.join(e,xt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=b$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Mi.isEmpty(n)||Mi.isEmpty(s))return;Pi.mkdirpSync(e),Pi.writeFileSync(r,n),Pi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),js.error(s)}}a(Hfe,"writeLicenseFromVars");L$.exports={launch:Bfe,main:vfe,isHdbInstalled:C$};async function C$(){try{await Pi.stat(Mi.getPropsFilePath()),await Pi.stat(Tn.get(xt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Mi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw js.error(`Error checking for HDB install - ${e}`),e}return!0}a(C$,"isHdbInstalled")});var Ab=g((nIe,M$)=>{"use strict";var qfe=G(),xfe=C(),Gfe=require("util"),Ffe=require("child_process"),D$=Gfe.promisify(Ffe.exec),kfe=_i(),fd=kc(),P$="Stopping HarperDB.";M$.exports=$fe;async function $fe(){if(console.log(P$),qfe.notify(P$),await fd.isServiceRegistered(xfe.HDB_PROC_DESCRIPTOR)){fd.enterPM2Mode();let r=await fd.getUniqueServicesList();for(let n in r)await fd.stop(n)}await fd.kill();let t=await kfe.getHDBProcessInfo();t.clustering.forEach(r=>{D$(`kill ${r.pid}`)}),t.core.forEach(r=>{D$(`kill ${r.pid}`)})}a($fe,"stop")});var Cb=g((iIe,k$)=>{"use strict";var Vfe=require("os"),dm=require("https"),U$=require("http"),Ui=require("fs-extra"),Yfe=require("yaml"),Kfe=require("human-readable-ids").hri,{pipeline:v$}=require("stream/promises"),{createWriteStream:fm,ensureDir:Em}=require("fs-extra"),{join:ps}=require("path"),Ib=require("lodash"),Wfe=require("minimist"),x$=J(),Qfe=_i(),G$=G(),hd=Et(),{restart:jfe}=Na(),zfe=Ab(),Nb=W(),B$=ht(),Jfe=wn(),{isHdbInstalled:Xfe,main:F$,launch:Zfe}=Ka(),eEe=am(),hm=C(),{SYSTEM_TABLE_NAMES:H$,SYSTEM_SCHEMA_NAME:tEe,CONFIG_PARAMS:Ed,OPERATIONS_ENUM:_r}=hm,rEe=9925,nEe="info",sEe=1e4,iEe="clone-node-config.yaml",wb=[H$.ROLE_TABLE_NAME,H$.USER_TABLE_NAME],kr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},Qa=Wfe(process.argv),pd=Qa[kr.HDB_LEADER_USERNAME]??process.env[kr.HDB_LEADER_USERNAME],md=Qa[kr.HDB_LEADER_PASSWORD]??process.env[kr.HDB_LEADER_PASSWORD],Al=Qa[kr.HDB_LEADER_URL]??process.env[kr.HDB_LEADER_URL],Ob=Qa[kr.HDB_LEADER_CLUSTERING_HOST]??process.env[kr.HDB_LEADER_CLUSTERING_HOST],oEe=Qa[kr.HDB_LEADER_CLUSTERING_PORT]??process.env[kr.HDB_LEADER_CLUSTERING_PORT],aEe=(Qa[kr.HDB_FULLY_CONNECTED]??process.env[kr.HDB_FULLY_CONNECTED])==="true",Mo=(Qa[kr.HDB_CLONE_OVERTOP]??process.env[kr.HDB_CLONE_OVERTOP])==="true",bb,Qe,St,Tt,Nl,Ol,gn,hs,yb;k$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await Xfe();if(!Mo&&r)return console.info("HarperDB is already installed, clone will not be performed"),F$();if(Mo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Mo?`Cloning node ${Al} overtop of existing HarperDB install`:`Cloning node: ${Al}`;if(console.info(n),Mo)yb=hd.readConfigFile(),Ol=yb.rootPath,await zfe();else try{Ol=process.env.ROOTPATH?process.env.ROOTPATH:ps(Vfe.homedir(),hm.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=ps(Ol,iEe),Qe=Yfe.parseDocument(Ui.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}Nl=Qe?.clustering?.nodeName??Kfe.random(),St=await Sd({operation:_r.GET_CONFIGURATION}),St=await JSON.parse(St.body),process.env.HDB_FETCH==="true"?(await _Ee(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await uEe(),Mo||await lEe(),await cEe(),await dEe(),await fEe(t),console.info("Successfully cloned node: "+Al),t&&process.exit()},"cloneNode");async function cEe(){console.info("Cloning configuration"),bb=St?.clustering?.enabled;let e={[Ed.ROOTPATH]:Ol};if(bb&&Qe?.clustering?.enabled!==!1){if(Ob==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[Ed.CLUSTERING_ENABLED]=!0;let n=St?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(oEe)||St?.clustering?.hubServer?.cluster?.network?.port;e[Ed.CLUSTERING_USER]=St?.clustering?.user;let i=x$.get(Ed.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:Ob,port:s}):i=[{host:Ob,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[Ed.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Qe?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in St)St[n]?.package&&!t[n]&&await hd.addConfig(n,St[n]);Qe?.databases&&await hd.addConfig("databases",St?.schemas);let r;Qe&&(r=hd.flattenConfig(Qe));for(let n in r){let s=hm.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Mo?e.clustering_nodeName=yb?.clustering?.nodeName??Nl:e.clustering_nodeName=Nl),G$.info("Cloning config:",e),Ib.isEmpty(e)||hd.updateConfigValue(void 0,void 0,e,!1,!0)}a(cEe,"cloneConfig");async function lEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Ol,!pd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=pd,!md)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=md,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??rEe,process.env.CLUSTERING_NODENAME=Nl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??nEe,await eEe()}a(lEe,"installHDB");async function uEe(){console.info("Cloning system database");let e=Wa("system");await Em(e);let t=ps(e,"system.mdb"),r=fm(t,{overwrite:!0}),n={operation:_r.GET_BACKUP,database:"system"};Mo||(n.tables=wb);let s=await q$(n,r);if(await Ui.utimes(t,Date.now(),new Date(s.date)),Tt=await Sd({operation:_r.DESCRIBE_ALL}),Tt=await JSON.parse(Tt.body),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},St.schemas)for(let i in St.schemas)Object.keys(St.schemas[i]).includes("tables")&&(gn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));hs=Qe?.databaseConfig?.excludeTables,hs=hs?hs.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Tt){if(gn[i]){Tt[i]="excluded";continue}if(Ib.isEmpty(Tt[i]))continue;let o=[],c=!1;for(let E in Tt[i])hs[i+E]?(c=!0,Tt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:_r.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:_r.GET_BACKUP,database:i});let _=Wa(i);await Em(_);let u=ps(_,i+".mdb"),d=fm(u,{overwrite:!0}),f=await q$(l,d);await Ui.utimes(u,Date.now(),new Date(f.date))}}a(uEe,"cloneTables");async function _Ee(){console.info("Cloning system database using fetch");let e={operation:_r.GET_BACKUP,database:"system"};Mo||(e.tables=wb);let t=await _m(e,!0),r=Wa("system");await Em(r);let n=ps(r,"system.mdb");if(await v$(t.body,fm(n,{overwrite:!0})),await Ui.utimes(n,Date.now(),new Date(t.headers.get("date"))),Tt=await _m({operation:_r.DESCRIBE_ALL}),Tt=await Tt.json(),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},St.schemas)for(let s in St.schemas)Object.keys(St.schemas[s]).includes("tables")&&(gn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));hs=Qe?.databaseConfig?.excludeTables,hs=hs?hs.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Tt){if(gn[s]){Tt[s]="excluded";continue}if(Ib.isEmpty(Tt[s]))continue;let i=[],o=!1;for(let f in Tt[s])hs[s+f]?(o=!0,Tt[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await _m({operation:_r.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await _m({operation:_r.GET_BACKUP,database:s},!0));let l=Wa(s);await Em(l);let _=new Date(c.headers.get("date")),u=ps(l,`${_.getTime()}-${s}.mdb`);await v$(c.body,fm(u,{overwrite:!0}));let d=ps(l,s+".mdb");await Ui.rename(u,d),await Ui.utimes(d,Date.now(),_)}}a(_Ee,"cloneTablesFetch");async function _m(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new dm.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(pd+":"+md).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Al,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(_m,"leaderHttpReqFetch");function Wa(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||ps(Ol,"database")}a(Wa,"getDbFileDir");async function dEe(){let{deployComponent:e}=vh(),t=await Sd({operation:_r.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(Qe?.componentConfig?.exclude){for(let o of Qe.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=Qe?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Sd({operation:_r.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(dEe,"cloneComponents");async function fEe(e){if(!bb)return;let t=await Qfe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await Zfe(!1):await F$():(console.info(await jfe({operation:_r.RESTART})),await Nb.async_set_timeout(sEe)),console.info("Clustering cloned tables"),e&&await Nb.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await Jfe.setSchemaDataToGlobalAsync();let s=u_(),i=await Sd({operation:_r.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await Ui.stat(ps(Wa("system"),"system.mdb"));for(let _ of wb)o.push({schema:tEe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Tt){if(Tt[_]==="excluded")continue;let u=await Ui.stat(ps(Wa(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in Tt[_])Tt[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await B$.createTableStreams(o),G$.info("Sending add_node request to node:",St?.clustering?.nodeName,"with subscriptions:",o);let l;if(aEe==="true"&&i.connections.length>0){let _=nh(),u=[{node_name:St?.clustering?.nodeName,subscriptions:o}],d=!1;Nl=x$.get(hm.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===Nl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(gn[h.schema]||hs[h.schema+h.table])continue;d=!0;let m=await Ui.stat(ps(Wa(h.schema),h.schema+".mdb"));m.mtime.setSeconds(m.mtime.getSeconds()-10),h.start_time=m.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:_r.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:_r.ADD_NODE,node_name:St?.clustering?.nodeName,subscriptions:o},!0),await B$.closeConnection()}a(fEe,"clusterTables");async function Sd(e){let t=new dm.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(pd+":"+md).toString("base64"),"Content-Type":"application/json"},s=new URL(Al),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await Nb.httpRequest(i,e)}a(Sd,"leaderHttpReq");async function q$(e,t){let r=new dm.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(pd+":"+md).toString("base64"),"Content-Type":"application/json"},i=new URL(Al),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,U$=dm),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=U$.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(q$,"leaderHttpStream")});var V$=g((aIe,$$)=>{var EEe=am(),hEe=G();$$.exports=pEe;async function pEe(){try{await EEe()}catch(e){console.error("There was an error during the install."),console.error(e),hEe.error(e),process.exit(1)}}a(pEe,"install")});var W$=g((lIe,K$)=>{"use strict";var mEe=dh(),SEe=G(),Y$="Registration failed.";async function TEe(){let e;try{e=await mEe.register()}catch(t){return SEe.error(`Registration error ${t}`),Y$}return e||Y$}a(TEe,"register");K$.exports={register:TEe}});var J$=g((_Ie,z$)=>{"use strict";var Db=require("fs-extra"),Pb=require("path"),Lb=require("yaml"),Td=ht(),gd=C(),Q$=et(),Mb=G(),gEe=yr(),REe=ch(),AEe=oh(),OEe=_i(),j$=J(),{isHdbInstalled:NEe}=Ka();j$.initSync();var $n={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},$r={LEAF:"leaf server",HUB:"hub server"},pm;z$.exports=bEe;async function bEe(){let e={harperdb:{status:$n.STOPPED}};if(!await NEe()){e.harperdb.status=$n.NOT_INSTALLED,console.log(Lb.stringify(e));return}pm=j$.get(gd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await Db.readFile(Pb.join(pm,gd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===gd.NODE_ERROR_CODES.ENOENT){Mb.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=$n.STOPPED,console.log(Lb.stringify(e));return}throw n}let r=await OEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=$n.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await yEe(r),e.clustering[$r.HUB].status===$n.RUNNING&&e.clustering[$r.LEAF].status===$n.RUNNING){let n=[],s=await REe({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await AEe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Td.closeConnection()}console.log(Lb.stringify(e)),process.exit()}a(bEe,"status");async function yEe(e){let t={[$r.HUB]:{},[$r.LEAF]:{}};if(e.clustering.length===0)return t[$r.HUB].status=$n.STOPPED,t[$r.LEAF].status=$n.STOPPED,t;let{port:r}=Td.getServerConfig(gd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await gEe.getClusterUser();try{(await Td.createConnection(r,n,s,!1)).close(),t[$r.HUB].status=$n.RUNNING}catch{t[$r.HUB].status=$n.ERRORED}let{port:i}=Td.getServerConfig(gd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Td.createConnection(i,n,s,!1)).close(),t[$r.LEAF].status=$n.RUNNING}catch{t[$r.LEAF].status=$n.ERRORED}try{t[$r.HUB].pid=Number.parseInt(await Db.readFile(Pb.join(pm,"clustering",Q$.PID_FILES.HUB),"utf8"))}catch(o){Mb.error(o),t[$r.HUB].pid=void 0}try{t[$r.LEAF].pid=Number.parseInt(await Db.readFile(Pb.join(pm,"clustering",Q$.PID_FILES.LEAF),"utf8"))}catch(o){Mb.error(o),t[$r.LEAF].pid=void 0}return t}a(yEe,"getHubLeafStatus")});var ja=G(),IEe=Gi(),Ub=C(),mm=require("fs"),X$=require("path"),fIe=require("os"),{PACKAGE_ROOT:wEe}=C(),CEe=Ty(),EIe=(xp(),ie($N)),Z$=ck(),{SERVICE_ACTIONS_ENUM:Vr}=Ub;LEe();function LEe(){let e=CEe();if(e)if(e.error){console.error(e.error),ja.error(e.error);return}else e.warn&&(console.warn(e.warn),ja.warn(e.warn));let t;mm.readdir(X$.join(wEe,"bin"),r=>{if(r)return ja.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=Z$.buildRequest();n.operation&&(t=Vr.OPERATION);let s;switch(t){case Vr.OPERATION:ja.trace("calling cli operations with:",n),Z$.cliOperations(n).then();break;case Vr.DEV:process.env.DEV_MODE=!0;case Vr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(mm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),mm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),mm.existsSync(X$.join(i,Ub.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Ka().main();break;case Vr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Cb()(!0).catch(h=>{console.log(h)}):s=Ka().launch();break;case Vr.INSTALL:V$()().then(()=>Ka().main(!0)).catch(E=>{console.error(E)});break;case Vr.REGISTER:W$().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vr.STOP:Ab()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vr.RESTART:Na().restart({}).then().catch(E=>{ja.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Vr.VERSION:IEe.printVersion();break;case Vr.UPGRADE:ja.setLogLevel(Ub.LOG_LEVELS.INFO),Sb().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{ja.error(`Got an error during upgrade ${E}`)});break;case Vr.STATUS:J$()().then().catch(E=>{console.error(E)});break;case Vr.RENEWCERTS:let{generateKeys:f}=tm();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Cb()().catch(h=>{console.log(h)}):Ka().main();break;default:console.warn(`The "${t}" command is not understood.`);case Vr.HELP:console.log(`
|
|
105
105
|
Usage: harperdb [command]
|
|
106
106
|
|
|
107
107
|
With no command, harperdb will simply run HarperDB (in the foreground)
|