harperdb 4.3.0-beta.12 → 4.3.0-beta.13

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/bin/harperdb.js CHANGED
@@ -1,34 +1,34 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var EV=Object.create;var wl=Object.defineProperty;var hV=Object.getOwnPropertyDescriptor;var pV=Object.getOwnPropertyNames;var mV=Object.getPrototypeOf,SV=Object.prototype.hasOwnProperty;var a=(e,t)=>wl(e,"name",{value:t,configurable:!0});var Ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)wl(e,r,{get:t[r],enumerable:!0})},jb=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of pV(t))!SV.call(e,s)&&s!==r&&wl(e,s,{get:()=>t[s],enumerable:!(n=hV(t,s))||n.enumerable});return e};var q=(e,t,r)=>(r=e!=null?EV(mV(e)):{},jb(t||!e||!e.__esModule?wl(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>jb(wl({},"__esModule",{value:!0}),e);var Xb=T((kEe,Jb)=>{var TV=require("fast-glob"),{statSync:Um,existsSync:vm,readFileSync:gV,writeFileSync:RV}=require("fs"),{spawnSync:AV,spawn:OV,execFileSync:FEe}=require("child_process"),{isMainThread:NV}=require("worker_threads"),{join:Gi,relative:zb}=require("path"),{PACKAGE_ROOT:Kn}=C(),{tmpdir:bV,platform:yV}=require("os");require("source-map-support").install();var IV=["resources","server","dataLayer","components"],Cl="ts-build",Bm,wV=__filename.endsWith("tsBuild.js");if(wV){if(NV){let r;try{Um(Gi(Kn,Cl)),r=!0}catch{}if(r)for(let n of TV.sync(IV.map(s=>s+"/**/*.ts"),{cwd:Kn})){let s=0,i=0;try{s=Um(Gi(Kn,n)).mtimeMs-5e3,i=Um(Gi(Kn,Cl,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=Gi(Kn,"node_modules/.bin/tsc");yV()==="win32"&&(n+=".cmd");let s=AV(n,{cwd:Kn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Gi(bV(),"harperdb-tsc.pid"),o;if(vm(i))try{process.kill(+gV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=OV(n,["--watch"],{cwd:Kn,detached:!0,stdio:"ignore"});RV(i,c.pid.toString()),c.unref()}}}}let e=Jb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Kn)&&!n[0].includes("node_modules")){let i=zb(Kn,n[0]),o;i.startsWith(Cl)?o=Gi(Kn,zb(Cl,i)):o=Gi(Kn,Cl,i);let c=Gi(o,r),l=c+".js";if(vm(l))return l;if(c.includes(".")&&vm(c))return c}return t(r,n,s)}}});var C=T((YEe,dy)=>{"use strict";var Nn=require("path"),CV=require("fs"),{relative:$Ee,join:VEe}=Nn,{existsSync:LV}=CV;function DV(){let e=__dirname;for(;!LV(Nn.join(e,"package.json"));){let t=Nn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(DV,"getHDBPackageRoot");var xi=DV(),Zb="js",Dd=Zb,PV="harperdb-config.yaml",MV="defaultConfig.yaml",UV="hdb",ey=`harperdb.${Dd}`,ty=`customFunctionsServer.${Dd}`,vV=`restartHdb.${Dd}`,qm="HarperDB",Ld="Custom Functions",Pd="Clustering Hub",Md="Clustering Leaf",BV="Clustering Ingest Service",HV="Clustering Reply Service",qV="foreground.pid",GV="hdb.pid",xV="data",FV={HDB:qm,CLUSTERING_HUB:Pd,CLUSTERING_LEAF:Md,CLUSTERING_INGEST_SERVICE:BV,CLUSTERING_REPLY_SERVICE:HV,CUSTOM_FUNCTIONS:Ld,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"},kV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},$V={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},VV={harperdb:qm,"clustering hub":Pd,"clustering leaf":Md,"custom functions":Ld,custom_functions:Ld,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},YV={CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md},Hm={HDB:Nn.join(xi,"server/harperdb"),CUSTOM_FUNCTIONS:Nn.join(xi,"server/customFunctions"),CLUSTERING_HUB:Nn.join(xi,"server/nats"),CLUSTERING_LEAF:Nn.join(xi,"server/nats")},KV={HDB:Nn.join(Hm.HDB,ey),CUSTOM_FUNCTIONS:Nn.join(Hm.CUSTOM_FUNCTIONS,ty)},WV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Nn.join(xi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Nn.join(xi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Nn.join(xi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},QV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ry="support@harperdb.io",jV="customer-success@harperdb.io",ny=1,zV=4141,sy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",JV="https://www.harperdb.io/product",XV=`For support, please submit a request at ${sy} or contact ${ry}`,iy=`For license support, please contact ${jV}`,ZV="None of the specified records were found.",eY="hash attribute not found",tY=`Your current license only supports ${ny} role. ${iy}`,rY="Your current license only supports 3 connections to a node.",nY="127.0.0.1",sY=1,iY=/^\.$/,oY=/^\.\.$/,aY="U+002E",cY=/\//g,lY="U+002F",uY=/U\+002F/g,_Y=/^U\+002E$/,dY=/^U\+002EU\+002E$/,fY="d",EY=999999,hY="*",pY="--max-old-space-size=",mY="system",SY="__hdb_hash",TY=".harperdb",gY=".hdb",RY="keys",AY="hdb_boot_properties.file",OY=".updateConfig.json",NY="SIGTSTP",bY=24,yY=6e4,IY=448,wY="blob",CY="trash",LY="database",DY="schema",PY="transactions",MY=".count",UY="id",vY="PROCESS_NAME",oy={SETTINGS_PATH_KEY:"settings_path"},ay=require("lodash"),BY={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"},HY={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},qY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},GY={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"},xY={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"},Kr="hdb_internal:",FY={CREATE_SCHEMA:Kr+"create_schema",CREATE_TABLE:Kr+"create_table",CREATE_ATTRIBUTE:Kr+"create_attribute",ADD_USER:Kr+"add_user",ALTER_USER:Kr+"alter_user",DROP_USER:Kr+"drop_user",HDB_NODES:Kr+"hdb_nodes",HDB_USERS:Kr+"hdb_users",HDB_WORKERS:Kr+"hdb_workers",CATCHUP:Kr+"catchup",SCHEMA_CATCHUP:Kr+"schema_catchup",WORKER_ROOM:Kr+"cluster_workers"},kY={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"},$Y="060493.ks",VY=".license",YY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},ee={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"},KY={CSV:".csv",JSON:".json"},WY={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"},Ll={};Ll[ee.INSERT]=ee.INSERT;Ll[ee.UPDATE]=ee.UPDATE;Ll[ee.UPSERT]=ee.UPSERT;Ll[ee.DELETE]=ee.DELETE;var xe=Object.create(null);xe[ee.DESCRIBE_ALL]=ee.DESCRIBE_ALL;xe[ee.DESCRIBE_TABLE]=ee.DESCRIBE_TABLE;xe[ee.DESCRIBE_SCHEMA]=ee.DESCRIBE_SCHEMA;xe[ee.READ_LOG]=ee.READ_LOG;xe[ee.ADD_NODE]=ee.ADD_NODE;xe[ee.LIST_USERS]=ee.LIST_USERS;xe[ee.LIST_ROLES]=ee.LIST_ROLES;xe[ee.USER_INFO]=ee.USER_INFO;xe[ee.SQL]=ee.SQL;xe[ee.GET_JOB]=ee.GET_JOB;xe[ee.SEARCH_JOBS_BY_START_DATE]=ee.SEARCH_JOBS_BY_START_DATE;xe[ee.DELETE_FILES_BEFORE]=ee.DELETE_FILES_BEFORE;xe[ee.EXPORT_LOCAL]=ee.EXPORT_LOCAL;xe[ee.EXPORT_TO_S3]=ee.EXPORT_TO_S3;xe[ee.CLUSTER_STATUS]=ee.CLUSTER_STATUS;xe[ee.REMOVE_NODE]=ee.REMOVE_NODE;xe[ee.RESTART]=ee.RESTART;xe[ee.CUSTOM_FUNCTIONS_STATUS]=ee.CUSTOM_FUNCTIONS_STATUS;xe[ee.GET_CUSTOM_FUNCTIONS]=ee.GET_CUSTOM_FUNCTIONS;xe[ee.GET_CUSTOM_FUNCTION]=ee.GET_CUSTOM_FUNCTION;xe[ee.SET_CUSTOM_FUNCTION]=ee.SET_CUSTOM_FUNCTION;xe[ee.DROP_CUSTOM_FUNCTION]=ee.DROP_CUSTOM_FUNCTION;xe[ee.ADD_CUSTOM_FUNCTION_PROJECT]=ee.ADD_CUSTOM_FUNCTION_PROJECT;xe[ee.DROP_CUSTOM_FUNCTION_PROJECT]=ee.DROP_CUSTOM_FUNCTION_PROJECT;xe[ee.PACKAGE_CUSTOM_FUNCTION_PROJECT]=ee.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[ee.DEPLOY_CUSTOM_FUNCTION_PROJECT]=ee.DEPLOY_CUSTOM_FUNCTION_PROJECT;var jY={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"},zY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},cy={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"},JY=ay.invert(cy),XY={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",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"},ly={settings_path:oy.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_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,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];ly[t.toLowerCase()]=t}var ZY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},e1={csv_file_load:"csv_file_load",csv_data_load:ee.CSV_DATA_LOAD,csv_url_load:ee.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"},t1={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"},r1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},n1={VERSION_DEFAULT:"2.2.0"},s1={DEVELOPMENT:8192,DEFAULT:512},i1={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"},o1={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"},a1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},uy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},c1=Symbol("metadata"),l1="__clustering__",u1=Object.values(uy),_1=15984864e5,_y={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},d1=ay.invert(_y),f1={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"},E1=111,h1=`\r
3
- `,p1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},m1=["*","%"],S1="unauthorized_access",T1="func_val",g1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},R1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},A1={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",NATS_CONSUMER_UPDATE:"nats_consumer_update"},O1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},N1={HTTP:"http"},b1={STOPPED:"stopped",ONLINE:"online"},y1="3.x.x",I1={SUCCESS:"success",FAILURE:"failure"},w1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};dy.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:ry,HDB_SUPPORT_URL:sy,HDB_PRICING_URL:JV,SUPPORT_HELP_MSG:XV,LICENSE_HELP_MSG:iy,HDB_PROC_NAME:ey,HDB_PROC_DESCRIPTOR:qm,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md,CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,SYSTEM_SCHEMA_NAME:mY,HASH_FOLDER_NAME:SY,HDB_HOME_DIR_NAME:TY,UPDATE_FILE_NAME:OY,LICENSE_KEY_DIR_NAME:RY,BOOT_PROPS_FILE_NAME:AY,JOB_TYPE_ENUM:e1,JOB_STATUS_ENUM:YY,SYSTEM_TABLE_NAMES:GY,SYSTEM_TABLE_HASH_ATTRIBUTES:xY,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:KY,S3_BUCKET_AUTH_KEYS:WY,VALID_SQL_OPS_ENUM:QY,GEO_CONVERSION_ENUM:zY,HDB_SETTINGS_NAMES:cy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:JY,SERVICE_ACTIONS_ENUM:jY,CLUSTER_MESSAGE_TYPE_ENUM:t1,CLUSTER_CONNECTION_DIRECTION_ENUM:r1,CLUSTER_EVENTS_DEFS_ENUM:i1,PERIOD_REGEX:iY,DOUBLE_PERIOD_REGEX:oY,UNICODE_PERIOD:aY,FORWARD_SLASH_REGEX:cY,UNICODE_FORWARD_SLASH:lY,ESCAPED_FORWARD_SLASH_REGEX:uY,ESCAPED_PERIOD_REGEX:_Y,ESCAPED_DOUBLE_PERIOD_REGEX:dY,REG_KEY_FILE_NAME:$Y,RESTART_TIMEOUT_MS:yY,HDB_FILE_PERMISSIONS:IY,DATABASES_DIR_NAME:LY,LEGACY_DATABASES_DIR_NAME:DY,TRANSACTIONS_DIR_NAME:PY,LIMIT_COUNT_NAME:MY,ID_ATTRIBUTE_STRING:UY,INSERT_MODULE_ENUM:HY,UPGRADE_JSON_FIELD_NAMES_ENUM:qY,RESTART_CODE:NY,RESTART_CODE_NUM:bY,CLUSTER_OPERATIONS:Ll,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:kY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Kr,INTERNAL_SC_CHANNELS:FY,CLUSTERING_MESSAGE_TYPES:f1,HDB_FILE_SUFFIX:gY,BLOB_FOLDER_NAME:wY,HDB_TRASH_DIR:CY,ORIGINATOR_SET_VALUE:E1,LICENSE_VALUES:n1,RAM_ALLOCATION_ENUM:s1,TIME_STAMP_NAMES_ENUM:uy,TIME_STAMP_NAMES:u1,PERMS_UPDATE_RELEASE_TIMESTAMP:_1,SEARCH_NOT_FOUND_MESSAGE:ZV,SEARCH_ATTRIBUTE_NOT_FOUND:eY,LICENSE_ROLE_DENIED_RESPONSE:tY,LICENSE_MAX_CONNS_REACHED:rY,BASIC_LICENSE_MAX_NON_CU_ROLES:ny,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:zV,VALUE_SEARCH_COMPARATORS:_y,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:d1,LICENSE_FILE_NAME:VY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:o1,NEW_LINE:h1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:sY,MOMENT_DAYS_TAG:fY,API_TURNOVER_SEC:EY,LOOPBACK:nY,CODE_EXTENSION:Dd,WILDCARD_SEARCH_VALUE:hY,NODE_ERROR_CODES:a1,JAVASCRIPT_EXTENSION:Zb,PERMS_CRUD_ENUM:p1,UNAUTHORIZED_PERMISSION_NAME:S1,SEARCH_WILDCARDS:m1,FUNC_VAL:T1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:g1,JWT_ENUM:R1,CLUSTERING_FLAG:l1,ITC_EVENT_TYPES:A1,CUSTOM_FUNCTION_PROC_NAME:ty,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ld,SERVICES:O1,THREAD_TYPES:N1,MEM_SETTING_KEY:pY,HDB_RESTART_SCRIPT:vV,PROCESS_DESCRIPTORS:FV,SERVICE_SERVERS:KV,SERVICE_SERVERS_CWD:Hm,PROCESS_DESCRIPTORS_VALIDATE:VV,LAUNCH_SERVICE_SCRIPTS:WV,LOG_LEVELS:$V,PROCESS_NAME_ENV_PROP:vY,LOG_NAMES:kV,PM2_PROCESS_STATUSES:b1,CONFIG_PARAM_MAP:ly,CONFIG_PARAMS:w,HDB_CONFIG_FILE:PV,HDB_DEFAULT_CONFIG_FILE:MV,ROLE_TYPES_ENUM:QV,BOOT_PROP_PARAMS:oy,INSTALL_PROMPTS:BY,HDB_ROOT_DIR_NAME:UV,CLUSTERING_PROCESSES:YV,FOREGROUND_PID_FILE:qV,PACKAGE_ROOT:xi,PRE_4_0_0_VERSION:y1,DATABASES_PARAM_CONFIG:ZY,METADATA_PROPERTY:c1,AUTH_AUDIT_STATUS:I1,AUTH_AUDIT_TYPES:w1,HDB_PID_FILE:GV,DEFAULT_DATABASE_NAME:xV,LEGACY_CONFIG_PARAMS:XY};Xb()});var vo=T((WEe,hy)=>{"use strict";var fy=require("minimist");hy.exports=C1;function C1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Ey(process.env),n=Ey(fy(process.argv))):(r=process.env,n=fy(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(C1,"assignCMDENVVariables");function Ey(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Ey,"objKeysToLowerCase")});var x=T((jEe,Ym)=>{"use strict";var Bo=require("fs-extra"),{workerData:L1,threadId:D1}=require("worker_threads"),Xs=require("path"),Sy=require("yaml"),Ty=require("properties-reader"),Lt=C(),py=vo(),P1=require("os"),{PACKAGE_ROOT:xm}=C(),{_assignPackageExport:M1}=require("../index"),Pl={};for(let e in console)Pl[e]||(Pl[e]=console[e]);var pr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},gy={STDOUT:"stdOut",STDERR:"stdErr"},U1=Xs.join(xm,"logs"),v1=Xs.join(xm,"config/yaml/",Lt.HDB_DEFAULT_CONFIG_FILE),B1=1e4,Js,As,hr,Ud,vd,Ml,ec,Dl;Dl===void 0&&Ry();Ym.exports={notify:Ny,fatal:by,error:Ul,warn:Vm,info:Bd,debug:$m,trace:km,setLogLevel:$1,log_level:hr,loggerWithTag:H1,suppressLogging:q1,initLogSettings:Ry,setupConsoleLogging:Ay,logCustomLevel:F1,closeLogFile:Fm,getLogFilePath:()=>Ml,OUTPUTS:gy,AuthAuditLog:K1};M1("logger",Ym.exports);function Ry(e=!1){try{if(Dl===void 0||e){Fm();let t=k1(),r=py(["ROOTPATH"]);try{Dl=Ty(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Bo.pathExistsSync(Xs.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE)))throw n}({level:hr,config_log_path:vd,to_file:Js,to_stream:As}=V1(r.ROOTPATH?Xs.join(r.ROOTPATH,Lt.HDB_CONFIG_FILE):Dl.get("settings_path"))),Ud=Lt.LOG_NAMES.HDB,Ml=Xs.join(vd,Ud)}}catch(t){if(Dl=void 0,t.code===Lt.NODE_ERROR_CODES.ENOENT){let r=py(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){hr=l;continue}if(c===Lt.CONFIG_PARAMS.LOGGING_STDSTREAMS){As=l;continue}c===Lt.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=Y1();Js=Js===void 0?s:Js,Js=my(Js),As=As===void 0?i:As,As=my(As),hr=hr===void 0?n:hr,vd=U1,Ud=Lt.LOG_NAMES.INSTALL,Ml=Xs.join(vd,Ud);return}throw Ul("Error initializing log settings"),Ul(t),t}process.env.DEV_MODE&&(As=!0),Ay()}a(Ry,"initLogSettings");var Gm=!0;function Ay(){Za("error",Ul),Za("warn",Vm),Za("log",Bd),Za("info",Bd),Za("debug",$m),Za("trace",km)}a(Ay,"setupConsoleLogging");function Za(e,t){console[e]=function(...r){if(Gm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Pl[e](...r)}}a(Za,"logConsole");function H1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Ny),fatal:r(by),error:r(Ul),warn:r(Vm),info:r(Bd),debug:r($m),trace:r(km)};function r(n){return function(...s){return n(t,...s)}}}a(H1,"loggerWithTag");function q1(e){try{Gm=!1,e()}finally{Gm=!0}}a(q1,"suppressLogging");var G1=L1?.name?.replace(/ /g,"-")||"main";function Zs(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||G1+"/"+D1);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(Zs,"createLogRecord");function vl(e){Js&&Oy(e),As&&process.stdout.write(e)}a(vl,"logStdOut");function Hd(e){Js&&Oy(e),As&&process.stderr.write(e)}a(Hd,"logStdErr");function Oy(e){x1(),ec?Bo.appendFileSync(ec,e):Pl.log(e)}a(Oy,"logToFile");function Fm(){try{Bo.closeSync(ec)}catch{}ec=null}a(Fm,"closeLogFile");function x1(){if(!ec){try{if(!Ml)debugger;ec=Bo.openSync(Ml,"a")}catch(e){Pl.error(e)}setTimeout(()=>{Fm()},B1).unref()}}a(x1,"openLogFile");function Bd(...e){pr[hr]<=pr.info&&vl(Zs("info",e))}a(Bd,"info");function km(...e){pr[hr]<=pr.trace&&vl(Zs("trace",e))}a(km,"trace");function Ul(...e){pr[hr]<=pr.error&&Hd(Zs("error",e))}a(Ul,"error");function $m(...e){pr[hr]<=pr.debug&&vl(Zs("debug",e))}a($m,"debug");function Ny(...e){pr[hr]<=pr.notify&&vl(Zs("notify",e))}a(Ny,"notify");function by(...e){pr[hr]<=pr.fatal&&Hd(Zs("fatal",e))}a(by,"fatal");function Vm(...e){pr[hr]<=pr.warn&&Hd(Zs("warn",e))}a(Vm,"warn");function F1(e,t,...r){t===gy.STDERR?Hd(Zs(e,r)):vl(Zs(e,r))}a(F1,"logCustomLevel");function k1(){let e;try{e=P1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,Lt.HDB_HOME_DIR_NAME,Lt.BOOT_PROPS_FILE_NAME);return Bo.existsSync(t)||(t=Xs.join(xm,"utility/hdb_boot_properties.file")),t}a(k1,"getPropsFilePath");function $1(e){hr=e}a($1,"setLogLevel");function my(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(my,"autoCastBoolean");function V1(e){try{if(e.includes("config/settings.js")){let o=Ty(e);return{level:o.get(Lt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.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=Sy.parseDocument(Bo.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 Y1(){try{let e=Sy.parseDocument(Bo.readFileSync(v1,"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(Y1,"getDefaultConfig");function K1(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(K1,"AuthAuditLog")});var Ho=T((JEe,W1)=>{W1.exports={name:"harperdb",version:"4.3.0-beta.12",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.7","nats-server":"2.10.11"},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:"3.0.0-beta.9",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.19.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"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Fi=T((XEe,yy)=>{"use strict";yy.exports={version:Q1,printVersion:j1};var qd=Ho();function Q1(){if(qd)return qd.version}a(Q1,"version");function j1(){qd&&console.log(`HarperDB Version ${qd.version}`)}a(j1,"printVersion")});var Cy=T((ehe,wy)=>{"use strict";var Iy=require("semver/functions/major"),z1=Ho(),Km=process.versions&&process.versions.node?process.versions.node:void 0;wy.exports=J1;function J1(){let e=z1.engines["minimum-node"];if(Km&&Iy(Km)<Iy(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Km}. Please install a version of Node.js that is withing the defined range.`}}a(J1,"checkNodeVersion")});var qo={};$e(qo,{server:()=>it});var Ly,it,mr=Ne(()=>{Ly=require("../index"),it={};(0,Ly._assignPackageExport)("server",it)});var Wm=T((rhe,Dy)=>{"use strict";var X1=require("util"),Z1=require("path"),eK=require("child_process"),tK=X1.promisify(eK.execFile),rK=1e3*1e3*10;Dy.exports={findPs:nK};async function nK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await tK("ps",["wwxo",`pid,${r}`],{maxBuffer:rK});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:Z1.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(nK,"findPs")});var _t=T((she,My)=>{"use strict";var sK="__dbis__",iK="__txns__",oK="__environment_name__",aK="__dbi_defintion__",cK={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"},lK=["__createdtime__","__updatedtime__"],uK="\uFFFF",Py={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},_K=Object.values(Py);My.exports={AUDIT_STORE_NAME:iK,INTERNAL_DBIS_NAME:sK,DBI_DEFINITION_NAME:aK,SEARCH_TYPES:cK,TIMESTAMP_NAMES:lK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:oK,TRANSACTIONS_DBI_NAMES_ENUM:Py,TRANSACTIONS_DBIS:_K,OVERFLOW_MARKER:uK}});var Wr=T((ihe,ky)=>{"use strict";var Uy=C(),vy=_t(),By={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},Hy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qy={500:Hy("There was an error processing your request."),400:"Invalid request"},dK=qy[By.INTERNAL_SERVER_ERROR],fK={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.`},EK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},hK={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"},pK={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 ${vy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vy.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"},mK={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Uy.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 ${Uy.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"},Gy={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"},SK={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."},TK={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`},gK={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"},RK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},AK={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`},xy={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.`},Fy={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}`},OK={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."},NK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},bK={...Gy,...hK,...fK,...SK,...TK,...gK,...RK,...AK,...mK,...xy,...Fy,...OK,...NK,...EK};ky.exports={CHECK_LOGS_WRAPPER:Hy,HDB_ERROR_MSGS:bK,DEFAULT_ERROR_MSGS:qy,DEFAULT_ERROR_RESP:dK,HTTP_STATUS_CODES:By,LMDB_ERRORS_ENUM:pK,AUTHENTICATION_ERROR_MSGS:Gy,VALIDATION_ERROR_MSGS:xy,ITC_ERRORS:Fy}});var ie=T((ahe,Yy)=>{"use strict";var tc=Wr(),yK=x(),IK=C(),Gd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,$y),this.statusCode=n||tc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(tc.DEFAULT_ERROR_MSGS[n]?tc.DEFAULT_ERROR_MSGS[n]:tc.DEFAULT_ERROR_MSGS[tc.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&&yK[s](i)}},Qm=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}},jm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $y(e,t,r,n=IK.LOG_LEVELS.ERROR,s=null,i=!1){if(Vy(e))return e;let o=new Gd(e,t,r,n,s);return i&&delete o.stack,o}a($y,"handleHDBError");function Vy(e){return e.__proto__.constructor.name===Gd.name}a(Vy,"isHDBError");Yy.exports={isHDBError:Vy,handleHDBError:$y,ClientError:Qm,ServerError:jm,hdb_errors:tc}});var ze=T((lhe,Xy)=>{"use strict";var xl=C(),wK=K(),Sr=X(),Fl=require("path"),CK=require("minimist"),Ky=require("fs-extra"),Wy=require("lodash");Sr.initSync();var{CONFIG_PARAMS:ki,DATABASES_PARAM_CONFIG:Bl,SYSTEM_SCHEMA_NAME:xd}=xl,Hl,ql,Gl;function Qy(){if(Hl!==void 0)return Hl;if(Sr.getHdbBasePath()!==void 0)return Hl=Sr.get(ki.STORAGE_PATH)||Fl.join(Sr.getHdbBasePath(),xl.DATABASES_DIR_NAME),Hl}a(Qy,"getBaseSchemaPath");function jy(){if(ql!==void 0)return ql;if(Sr.getHdbBasePath()!==void 0)return ql=Jy(xd),ql}a(jy,"getSystemSchemaPath");function zy(){if(Gl!==void 0)return Gl;if(Sr.getHdbBasePath()!==void 0)return Gl=Sr.get(xl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Fl.join(Sr.getHdbBasePath(),xl.TRANSACTIONS_DIR_NAME),Gl}a(zy,"getTransactionAuditStoreBasePath");function LK(e,t){let r=Sr.get(ki.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Fl.join(zy(),e.toString())}a(LK,"getTransactionAuditStorePath");function Jy(e,t){e=e.toString(),t=t&&t.toString();let r=Sr.get(xl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Fl.join(Qy(),e)}a(Jy,"getSchemaPath");function DK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,CK(process.argv));let n=r[ki.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!wK.isObject(n))throw o;i=n}for(let o of i){let c=o[xd];if(!c)continue;let l=Sr.get(ki.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Bl.PATH];if(_)return Wy.set(l,[xd,Bl.TABLES,t,Bl.PATH],_),Sr.setProperty(ki.DATABASES,l),_;let u=c?.[Bl.PATH];if(u)return Wy.set(l,[xd,Bl.PATH],u),Sr.setProperty(ki.DATABASES,l),u}}let s=r[ki.STORAGE_PATH.toUpperCase()];if(s){if(!Ky.pathExistsSync(s))throw new Error(s+" does not exist");let i=Fl.join(s,e);return Ky.mkdirsSync(i),Sr.setProperty(ki.STORAGE_PATH,s),i}return jy()}a(DK,"initSystemSchemaPaths");function PK(){Hl=void 0,ql=void 0,Gl=void 0}a(PK,"resetPaths");Xy.exports={getBaseSchemaPath:Qy,getSystemSchemaPath:jy,getTransactionAuditStorePath:LK,getTransactionAuditStoreBasePath:zy,getSchemaPath:Jy,initSystemSchemaPaths:DK,resetPaths:PK}});var Tr=T((fhe,nI)=>{"use strict";var MK=Wr().LMDB_ERRORS_ENUM,_he=require("lmdb"),UK=_t(),dhe=require("buffer").Buffer,{OVERFLOW_MARKER:Zy,MAX_SEARCH_KEY_LENGTH:Fd}=UK,eI=["number","string","symbol","boolean","bigint"];function vK(e){if(e=e?.primaryStore||e,!e)throw new Error(MK.ENV_REQUIRED)}a(vK,"validateEnv");function BK(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(BK,"stringifyData");function HK(e){return e instanceof Date?e.valueOf():e}a(HK,"convertKeyValueToWrite");function qK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(eI.includes(typeof e))return e.length>Fd?[e.slice(0,Fd)+Zy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(eI.includes(typeof i))i.length>Fd?r.push(i.slice(0,Fd)+Zy):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(qK,"getIndexedValues");var kd=0,tI=0;function rI(){tI=Date.now()-performance.now()}a(rI,"adjustStartTime");rI();var GK=6e4;setInterval(rI,GK).unref();function xK(){let e=performance.now()+tI;return e>kd?(kd=e,e):(kd+=488e-6,kd)}a(xK,"getNextMonotonicTime");nI.exports={validateEnv:vK,stringifyData:BK,convertKeyValueToWrite:HK,getNextMonotonicTime:xK,getIndexedValues:qK}});var sI,Wn,zm,kl=Ne(()=>{sI=require("events"),Wn=class extends sI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new zm;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)}},zm=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 cI={};$e(cI,{HAS_EXPIRATION:()=>nS,LAST_TIMESTAMP_PLACEHOLDER:()=>Yl,LOCAL_TIMESTAMP:()=>FK,METADATA:()=>$l,NO_TIMESTAMP:()=>Xm,PENDING_LOCAL_TIME:()=>sS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rS,RecordEncoder:()=>tS,TIMESTAMP_ASSIGN_LAST:()=>$K,TIMESTAMP_ASSIGN_NEW:()=>oI,TIMESTAMP_ASSIGN_PREVIOUS:()=>aI,TIMESTAMP_PLACEHOLDER:()=>$d,TIMESTAMP_RECORD_PREVIOUS:()=>Zm,getUpdateRecord:()=>iS,handleLocalTimeForGets:()=>Wd});function YK(){return Vl[0]=Vl[0]^64,kK.getFloat64(0)}function Wd(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?.[$l];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?.[$l]>=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[$l];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(){this.timerTracked||(this.timerTracked=!0,Go.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Go.length;l++){let _=Go[l].deref();(!_||_.isDone||_.isCommitted)&&Go.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function iS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?rc=i?.localTime?Zm|aI:Xm:rc=l?i?.localTime?Zm|16384:oI|16384:Xm,u>0&&(c|=nS),Yd=c,eS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:rc>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let R=_?.user?.username;if(E&&(Vd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,A=r.get(g);if(A){let P=xt(A).previousLocalTime;return r.put(g,Kd(o,t,n,P,R,d,Vd),{ifVersion:m}),S}}r.put(Yl,Kd(o,t,n,i?.localTime?1:0,R,d,Vd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var iI,Jm,$d,Yl,rS,FK,$l,Vl,kK,Xm,oI,$K,aI,Zm,nS,sS,VK,Vd,rc,Yd,eS,tS,Go,Kl=Ne(()=>{iI=require("msgpackr");xo();Jm=q(x()),$d=new Uint8Array([1,1,1,1,4,64,0,0]),Yl=new Uint8Array([1,1,1,1,1,0,0,0]),rS=new Uint8Array([1,1,1,1,3,64,0,0]),FK=Symbol("local-timestamp"),$l=Symbol("metadata"),Vl=new Uint8Array(8),kK=new DataView(Vl.buffer,0,8),Xm=0,oI=0,$K=1,aI=3,Zm=4,nS=16,sS=1,rc=0,Yd=-1,eS=0,tS=class extends iI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(rc||Yd>=0){let i=0,o=rc;o&&(i+=8,rc=0);let c=Yd,l=eS;c>=0&&(i+=2,Yd=-1,l&&(i+=8,eS=0));let _=VK=r.call(this,n,s|2048|i);Vd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&($d[4]=o,$d[5]=o>>8,_.set($d,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(Vl,0,c),c+=8;else for(let d=0;d<8;d++)Vl[d]=t[c++];l=YK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nS&&(_=(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,[$l]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(YK,"getTimestamp");a(Wd,"handleLocalTimeForGets");Go=[];setInterval(()=>{for(let e=0;e<Go.length;e++){let t=Go[e].deref();!t||t.isDone||t.isCommitted?Go.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Jm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Jm.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(iS,"getUpdateRecord")});var gI={};$e(gI,{AUDIT_STORE_OPTIONS:()=>SI,createAuditEntry:()=>Kd,openAuditStore:()=>Jd,readAuditEntry:()=>xt,setAuditRetention:()=>WK,transactionKeyEncoder:()=>mI});function Jd(e){let t=e.auditStore=e.openDB(EI.AUDIT_STORE_NAME,SI);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Qd){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()-oS})){if((_[0]&15)===lS){let u=xt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=KK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,oS/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,zd.getWorkerIndex)()===(0,zd.getWorkerCount)()-1&&s(Qd),t}function WK(e,t=Qd){oS=e,Qd=t}function Kd(e,t,r,n,s,i,o){let c=TI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?nc.setFloat64(0,n):bn.set(rS),l=9),f(0),f(t),d(r),nc.setFloat64(l,e),l+=8,s?d(s):bn[l++]=0,bn[n?8:0]=c;let u=bn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,sc.writeKey)(E,bn,l);let m=l-h-1;m>127?m>16383?(_S.error("Key or username was too large for audit entry",E),l=h+1,bn[h]=0):(bn.copyWithin(h+2,h+1,l),nc.setUint16(h,m|32768),l++):bn[h]=m}function f(E){E<128?bn[l++]=E:E<16384?(nc.setUint16(l,E|32768),l+=2):E<1056964608?(nc.setUint32(l,E|3221225472),l+=4):(bn[l]=255,nc.setUint32(l+1,E),l+=5)}}function xt(e){try{let t=e.dataView||(e.dataView=new uS(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:TI[n&7],tableId:i,get recordId(){return fI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?fI(e,u,d):void 0},getValue(f,E,h){if(n&aS||n&cS&&!E)return f.decoder.decode(e.subarray(t.position));if(n&cS&&h)return dS(f.getEntry(this.recordId),h,f)}}}catch(t){return _S.error("Reading audit entry error",t,e),{}}}function fI(e,t,r){let n=e.subarray(t,r);return(0,sc.readKey)(n,0,r-t)}var sc,jd,EI,hI,zd,pI,_S,bn,nc,mI,SI,oS,KK,Qd,aS,cS,lI,lS,uI,_I,dI,TI,uS,xo=Ne(()=>{sc=require("ordered-binary"),jd=q(X()),EI=q(_t()),hI=q(C()),zd=q(tt()),pI=q(K());Kl();_S=q(x());Xd();(0,jd.initSync)();bn=Buffer.alloc(1024),nc=new DataView(bn.buffer,bn.byteOffset,1024),mI={writeKey(e,t,r){return e===Yl?(t.set(Yl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,sc.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,sc.readKey)(e,t,r)}},SI={encoding:"binary",keyEncoder:mI},oS=(0,pI.convertToMS)((0,jd.get)(hI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,KK=1e3,Qd=1e4;a(Jd,"openAuditStore");a(WK,"setAuditRetention");aS=16,cS=32,lI=1,lS=2,uI=3,_I=4,dI=5,TI={put:lI|aS,[lI]:"put",delete:lS,[lS]:"delete",message:uI|aS,[uI]:"message",invalidate:_I,[_I]:"invalidate",patch:dI|cS,[dI]:"patch"};a(Kd,"createAuditEntry");a(xt,"readAuditEntry");uS=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(fI,"readKeySafely")});var fS={};$e(fS,{add:()=>Zd,applyReverse:()=>RI,getRecordAtTime:()=>dS,rebuildUpdateBefore:()=>ef});function Zd(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function ef(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,Zd(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function RI(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]=AI}}function dS(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":RI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===AI&&(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,AI,Xd=Ne(()=>{xo();a(Zd,"add");Zd.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};QK={add:Zd};a(ef,"rebuildUpdateBefore");a(RI,"applyReverse");AI={};a(dS,"getRecordAtTime")});function Qr(e){return e[Dt]||(e[Dt]=Object.create(null))}function of(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 yn.ClientError(`${c} must be a string, attempt to assign ${u}`);Qr(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 yn.ClientError(`${c} must be a string, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a number, attempt to assign ${u}`);Qr(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 yn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Qr(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 yn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Qr(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 yn.ClientError(`${c} must be a number, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Qr(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 yn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Qr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Qr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new yn.ClientError(`${c} must be an object, attempt to assign ${u}`);Qr(this)[c]=u},"set")}_={get(){let u=this[Dt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=NI(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[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new yn.ClientError("Can not add a property to a sealed table schema");Qr(this)[o]=c}),i("deleteProperty",function(o){Qr(this)[o]=void 0}),i("toJSON",function(){let o=this[Dt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));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[fe])),Object.assign(c,this)),c||this[fe]}),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 NI(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?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},of(r,t)),new r(e)):new tf(e);case Array:let n=new nf(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=NI(o,t?.elements)),n[s]=o}return n;default:return e}}function af(e){let t=e[Dt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=af(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function ko(e,t=e[Dt]){let r;if(OI.call(e,fe)&&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=ko(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[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=fS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=ko(s);r[n]=s}return r?Object.freeze(r):OI.call(e,fe)?e[fe]:e}function rf(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Fo]||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?.[fe]===s){if(rf(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[fe]===i){if(rf(s))return!0}else return!0}else return!0}}return!1}var yn,Dt,tf,OI,Fo,nf,sf,cf=Ne(()=>{Qn();yn=q(ie());Xd();Dt=Symbol("own-data");a(Qr,"getChanges");a(of,"assignTrackedAccessors");a(NI,"trackObject");tf=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};of(tf,{});a(af,"collapseData");OI=Object.prototype.hasOwnProperty;a(ko,"deepFreeze");a(rf,"hasChanges");Fo=Symbol.for("has-array-changes"),nf=class extends Array{static{a(this,"TrackedArray")}[Fo];constructor(t){super(t)}splice(...t){return this[Fo]=!0,super.splice(...t)}push(...t){return this[Fo]=!0,super.push(...t)}pop(){return this[Fo]=!0,super.pop()}unshift(...t){return this[Fo]=!0,super.unshift(...t)}shift(){return this[Fo]=!0,super.shift()}};nf.prototype.constructor=Array;sf=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function ZK(){XK=setInterval(function(){for(let e of ES)if(e.stale){let t=e[be]?.url;II.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},JK).unref()}var hS,yI,II,jK,ES,zK,Wl,bI,$o,lf,JK,XK,pS=Ne(()=>{hS=q(Tr()),yI=q(ie()),II=q(x());Qn();jK=100,ES=new Set,zK=25e3,$o=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;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===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),ES.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(ES.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Wl&&performance.now()-bI>zK)throw new yI.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){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,hS.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 R=S();E?E.push?E.push(R):E=[E,R]:E=R}}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?2:0;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<jK>>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 Wl||(Wl=s,bI=performance.now(),Wl.then(()=>{Wl=null})),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=0,this.writes=[]}},lf=class extends $o{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,hS.getNextMonotonicTime)())}getReadTxn(){}},JK=3e4;a(ZK,"startMonitoringTxns");ZK()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&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 $o;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 wI,Vo=Ne(()=>{wI=require("../index");Qn();pS();a(Ze,"transaction");(0,wI._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 TS(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?TS(d.conditions,d.operator,r,n,s,i,o,c):ac(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 g=h.operator==="or",A=u(h.conditions,!g,E);return g?(P,v)=>A.some(U=>U(P,v)):(P,v)=>A.every(U=>U(P,v))}let S=(h.attribute||h[0])===r.primaryKey,R=RS(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=cW(r.primaryStore,h.estimated_count,E)),R}).filter(Boolean)}a(u,"mapConditionsToFilters")}function ac(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 g=o[0],A=ti(n.attributes,g);if(A.relationship){if(o.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=A.definition?.tableClass||A.elements?.definition?.tableClass,v=new Map,U=ac({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,P,s,v);if(A.relationship.to){i[o[0]]=v;let F=!!ti(P.attributes,A.relationship.to)?.elements;U=sW(U,A,P.primaryStore,F,v)}if(A.relationship.from){let F=a(H=>ac({attribute:A.relationship.from,value:H},t,r,n,s,v),"searchEntry");A.elements?(i[o[0]]=v,U=iW(U,A,P.primaryStore,v,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(gS[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]=Os.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 jr.ClientError(`Unknown query comparator "${l}"`)}if(r){let g=_;_=u,u=g,g=!f,f=!d,d=g}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 jr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new jr.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 jr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new jr.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=RS(e),!S)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let g=m.getRange(R).map(S?function({key:A,value:P}){return this.isSync?P&&S(P)?A:$i.SKIP:new Promise((v,U)=>setImmediate(()=>{try{v(P&&S(P)?A:$i.SKIP)}catch(F){U(F)}}))}:A=>A.value==null?$i.SKIP:A);return g.hasEntries=!0,g}else return m?m.getRange(R).map(S?function({key:g,value:A}){return this.isSync?S({[o]:g})?A:$i.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(S({[o]:g})?A:$i.SKIP)}catch(U){v(U)}}))}:({value:g})=>g):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:g,value:A}){return this.isSync?A&&S(A)?g:$i.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(A&&S(A)?g:$i.SKIP)}catch(U){v(U)}}))})}function ti(e,t){if(Array.isArray(t))if(t.length>1){let r=ti(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ti(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 sW(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=jn(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 iW(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 _=jn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(jn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(jn(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 RS(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=ti(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=RS({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,R=a((g,A)=>{let P,v;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:m.from,value:F};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let U=S(g);return S.idFilter&&(R.idFilter=S.idFilter),U}v=m(g,r,A),P=v?.value}else P=g[u];return P?Array.isArray(P)?P.some(h):h(P,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),gS[o]||o){case mS.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,Os.compareKeys)(u,l[0])>=0&&(0,Os.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Os.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Os.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Os.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Os.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Os.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new jr.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&&_f(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function R(g){let A=g[u],P;if(typeof A!="object"||!A||E?P=d(A):Array.isArray(A)?P=A.some(d):A instanceof Date&&(P=d(A.getTime())),f&&(S++,!P&&!R.idFilter&&++m/S*(i-S)>h)){let v=ac(e,r.transaction.getReadTxn(),!1,t).map(jn),U=new Set(v);R.idFilter=F=>U.has(jn(F)),R.idFilter.idSet=U}return P}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(_,"attributeComparator")}function _f(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/ei(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=gS[n]||n,n===mS.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=ti(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=_f(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*ei(e.indices[i.relationship.from])/(ei(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=ei(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=rW*ei(e.primaryStore)+1:n==="between"?r.estimated_count=tW*ei(e.primaryStore)+1:n==="sort"?r.estimated_count=ei(e.primaryStore)+1:r.estimated_count=eW*ei(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function df(e){if(e)if(Vi=e,ic.lastIndex=0,oW.test(e))try{let t=Ql(new oc,"");if(gr!==Vi.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 ${gr} in '${Vi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ql(e,t){let r=ic,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Vi);){gr=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=CI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=jl(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=nW[d],l=SS[i]?CI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=jl(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"&&LI(h,u),uf(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(jl(u)),s=void 0;break;case"(":ic.lastIndex=gr;let E=Ql(u?[]:new oc,")");switch(u){case"":uf(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=DI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Vi[gr]===","?r.lastIndex=++gr: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");ic.lastIndex=gr,f=Ql([],"}"),f.name=u,e.push(f),Vi[gr]===","?r.lastIndex=++gr:o=!0;break;case"[":ic.lastIndex=gr,u?(f=Ql(new oc,"]"),f.name=u):f=Ql(e.conditions?new oc:[],"]"),e.conditions?(uf(e,_),e.conditions.push(f),s=null):e.push(f),Vi[gr]===","?r.lastIndex=++gr: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"&&LI(h,u),uf(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(jl(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?aW:ic,r.lastIndex=gr),gr===Vi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function uf(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 jl(e){return e.indexOf(".")>-1?e.split(".").map(jl):decodeURIComponent(e)}function CI(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 jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function LI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function DI(e){let t=PI(e[0]);return e.length>1&&(t.next=DI(e.slice(1))),t}function PI(e){if(Array.isArray(e)){let t=PI(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 jn(e){return Array.isArray(e)?e.join("\0"):e}function ei(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function cW(e,t,r){return t*r/ei(e)}var jr,mS,Os,$i,eW,tW,rW,nW,SS,gS,oW,ic,aW,gr,Vi,oc,ff=Ne(()=>{jr=q(ie()),mS=q(_t()),Os=require("ordered-binary"),$i=require("lmdb"),eW=.3,tW=.1,rW=.05,nW={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},SS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(TS,"executeConditions");a(ac,"searchByIndex");a(ti,"findAttribute");a(sW,"joinTo");a(iW,"joinFrom");gS={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(RS,"filterByType");a(_f,"estimateCondition");oW=/[()[\]|!<>.]|(=\w*=)/,ic=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,aW=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(df,"parseQuery");a(Ql,"parseBlock");a(uf,"assignOperator");a(jl,"decodeProperty");a(CI,"typedDecoding");a(LI,"wildcardDecoding");a(DI,"toSortObject");a(PI,"toSortEntry");oc=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(jn,"flattenKey");a(ei,"estimatedEntryCount");a(cW,"intersectionEstimate")});var NS={};$e(NS,{CONTEXT:()=>be,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>In,RECORD_PROPERTY:()=>fe,Resource:()=>jt,snake_case:()=>uW,transformForSelect:()=>hf});function uW(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MI(e,t){if(zl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(zl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new OS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){zl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function zr(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[Ue]??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 Ef(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Ef(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Jr(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 AS(e,t,r){let n=e[fe];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 hf(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):AS(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(AS(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(AS(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]=hf(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var UI,vI,BI,be,Ue,In,fe,lW,jt,Ef,zl,OS,Qn=Ne(()=>{UI=require("crypto");kl();vI=require("../index"),BI=q(ie());cf();Vo();ff();be=Symbol.for("context"),Ue=Symbol.for("primary-key"),In=Symbol("is-collection"),fe=Symbol("stored-record"),lW={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[be];this[be]=n!==void 0?n:r||null}static get=zr(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 _=hf(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=zr(function(t,r,n,s){if(Array.isArray(s)&&t[In]){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):Jr(t,"put")},{hasContent:!0,type:"update"});static patch=zr(function(t,r,n,s){return t.patch?t.patch(s,r):Jr(t,"patch")},{hasContent:!0,type:"update"});static delete=zr(function(t,r,n,s){return t.delete?t.delete(r):Jr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,UI.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):Jr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=zr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Jr(t,"delete")},{hasContent:!1,type:"update"});static post=zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=zr(function(t,r,n,s){return t.connect?t.connect(s,r):Jr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=zr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Jr(t,"subscribe")},{type:"read"});static publish=zr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Jr(t,"publish")},{hasContent:!0,type:"create"});static search=zr(function(t,r,n,s){let i=t.search?t.search(r):Jr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=hf(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=zr(function(t,r,n,s){return t.search?t.search(s,r):Jr(t,"search")},{hasContent:!0,type:"read"});static copy=zr(function(t,r,n,s){return t.copy?t.copy(s,r):Jr(t,"copy")},{type:"create"});static move=zr(function(t,r,n,s){return t.move?t.move(s,r):Jr(t,"move")},{type:"delete"});post(t){if(this[In])return this.constructor.create(this[Ue],t,this[be]);Jr(this,"post")}static isCollection(t){return t?.[In]}static coerceId(t){return t}static parseQuery(t){return df(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&&lW[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:MI(t,this),isCollection:zl}}let i=MI(t,this);return zl?{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(_=>_[Ue]===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[Ue],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[In]=!0),s}subscribe(t){return new Wn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Wn}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[Ue]}getContext(){return this[be]}};jt.prototype[be]=null;(0,vI._assignPackageExport)("Resource",jt);a(uW,"snake_case");Ef=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(MI,"pathToId");OS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(zr,"transactional");a(Jr,"missingMethod");a(AS,"selectFromObject");a(hf,"transformForSelect")});var HI={};$e(HI,{Resources:()=>pf,keyArrayToString:()=>cc,resetResources:()=>_W,resources:()=>Yi});function _W(){return Yi=new pf}function cc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var pf,Yi,Jl=Ne(()=>{Vo();pf=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(_W,"resetResources");a(cc,"keyArrayToString")});function GI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;lc||((0,mf.onMessageByType)(qI,u=>{xI(u.path)}),lc=Object.create(null));let o=lc[s]||(lc[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=cc(t);let l=new yS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function xI(e,t){if(!lc)return;let r=lc[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=cc(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,bS.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,bS.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 FI(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,mf.broadcast)({type:qI,path:s}),xI(s,!0)})}}var bS,mf,qI,lc,Zhe,yS,kI=Ne(()=>{bS=q(x()),mf=q(tt());kl();Jl();xo();qI="transaction",Zhe=Buffer.alloc(4096);a(GI,"addSubscription");yS=class extends Wn{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(xI,"notifyFromTransactionData");a(FI,"listenToCommits")});var VI=T((rpe,$I)=>{"use strict";var IS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};$I.exports=IS});var KI=T((spe,YI)=>{"use strict";var wS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};YI.exports=wS});var Sf=T((ope,WI)=>{"use strict";var LS=X(),DS=C(),{RecordEncoder:dW}=(Kl(),oe(cI));LS.initSync();var fW=LS.get(DS.CONFIG_PARAMS.STORAGE_COMPRESSION),EW=LS.get(DS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,hW=DS.UPDATES_PROPERTY,CS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=fW&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=EW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:dW},this.alwaysLazyProperty=n=>n===hW)}};WI.exports=CS});var gf=T((cpe,JI)=>{"use strict";var Ki=X(),Yo=C();Ki.initSync();var pW=Ki.get(Yo.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ki.get(Yo.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ki.get(Yo.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",QI=Ki.get(Yo.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),mW=Ki.get(Yo.CONFIG_PARAMS.STORAGE_NOREADAHEAD),jI=Ki.get(Yo.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD),zI=Ki.get(Yo.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN),Tf=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=pW,this.noFSAccess=!0,QI!==void 0&&(this.overlappingSync=QI),jI&&(this.maxFreeSpaceToLoad=jI),zI&&(this.maxFreeSpaceToRetain=zI),this.noReadAhead=mW}};JI.exports=Tf;Tf.MAX_DBS=1e4});var Ve=T((upe,aw)=>{"use strict";var MS=require("lmdb"),zn=require("fs-extra"),Xr=require("path"),Rf=Tr(),ew=x(),Rr=Wr().LMDB_ERRORS_ENUM,Af=KI(),US=Sf(),tw=gf(),Wi=_t(),XI=C(),{table:SW,resetDatabases:TW}=(ge(),oe(Fe)),ZI=X(),Jn=Wi.INTERNAL_DBIS_NAME,rw=Wi.DBI_DEFINITION_NAME,gW="data.mdb",RW="lock.mdb",Xl=".mdb",AW="-lock",PS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=wn(t,r),this.key_type=this.dbi[Wi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Wi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new MS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Of(e,t){if(e===void 0)throw new Error(Rr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Rr.ENV_NAME_REQUIRED)}a(Of,"pathEnvNameValidation");async function vS(e,t,r=!0){try{await zn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Rr.INVALID_BASE_PATH):n}try{let n=Xr.join(e,t+Xl);return await zn.access(n,zn.constants.R_OK|zn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await zn.access(Xr.join(e,t,gW),zn.constants.R_OK|zn.constants.F_OK),Xr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Rr.INVALID_ENVIRONMENT)}else throw new Error(Rr.INVALID_ENVIRONMENT);throw n}}a(vS,"validateEnvironmentPath");function Nf(e,t){if(Rf.validateEnv(e),t===void 0)throw new Error(Rr.DBI_NAME_REQUIRED)}a(Nf,"validateEnvDBIName");async function OW(e,t,r=!1,n=!1){Of(e,t);let s=Xr.basename(e);t=t.toString();let i=ZI.get(XI.CONFIG_PARAMS.DATABASES);i||ZI.setProperty(XI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await vS(e,t,n),nw(e,t,r)}catch(o){if(o.message===Rr.INVALID_ENVIRONMENT){let c=Xr.join(e,t);await zn.mkdirp(n?c:e);let l=new tw(n?c:c+Xl,!1),_=MS.open(l);_.dbis=Object.create(null);let u=new US(!1);_.openDB(Jn,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=BS(e,t,r);return _[Wi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(OW,"createEnvironment");async function NW(e,t,r,n=!0){Of(e,t),t=t.toString();let s=Xr.join(e,t);return SW({table:t,database:Xr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(NW,"copyEnvironment");async function nw(e,t,r=!1){Of(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 vS(e,t),i=Xr.join(e,t+Xl),o=s!=i,c=new tw(s,o),l=MS.open(c);l.dbis=Object.create(null);let _=iw(l);for(let u=0;u<_.length;u++)wn(l,_[u]);return l[Wi.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(nw,"openEnvironment");async function bW(e,t,r=!1){Of(e,t),t=t.toString();let n=Xr.join(e,t+Xl),s=await vS(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 sw(o),delete global.lmdb_map[i]}}await zn.remove(s),await zn.remove(s===n?s+AW:Xr.join(Xr.dirname(s),RW))}a(bW,"deleteEnvironment");async function sw(e){Rf.validateEnv(e);let t=e[Wi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(sw,"closeEnvironment");function BS(e,t,r=!1){let s=`${Xr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(BS,"getCachedEnvironmentName");function yW(e){Rf.validateEnv(e);let t=Object.create(null),r=wn(e,Jn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Jn)try{t[n]=Object.assign(new Af,s)}catch{ew.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(yW,"listDBIDefinitions");function iw(e){Rf.validateEnv(e);let t=[],r=wn(e,Jn);for(let{key:n}of r.getRange({start:!1}))n!==Jn&&t.push(n);return t}a(iw,"listDBIs");function IW(e,t){let n=wn(e,Jn).getEntry(t),s=new Af;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{ew.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(IW,"getDBIDefinition");function ow(e,t,r,n=!r){if(Nf(e,t),t=t.toString(),t===Jn)throw new Error(Rr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return wn(e,t)}catch(s){if(s.message===Rr.DBI_DOES_NOT_EXIST){let i=new US(r,n===!0),o=e.openDB(t,i),c=new Af(r===!0,n);return o[rw]=c,wn(e,Jn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(ow,"createDBI");function wn(e,t){if(Nf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Jn?r=IW(e,t):r=new Af,r===void 0)throw new Error(Rr.DBI_DOES_NOT_EXIST);let n;try{let s=new US(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(Rr.DBI_DOES_NOT_EXIST):s}return n[rw]=r,e.dbis[t]=n,n}a(wn,"openDBI");function wW(e,t){Nf(e,t),t=t.toString();let r=wn(e,t),n=r.getStats();return r[Wi.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(wW,"statDBI");async function CW(e,t){try{let r=Xr.join(e,t+Xl);return(await zn.stat(r)).size}catch{throw new Error(Rr.INVALID_ENVIRONMENT)}}a(CW,"environmentDataSize");function LW(e,t){if(Nf(e,t),t=t.toString(),t===Jn)throw new Error(Rr.CANNOT_DROP_INTERNAL_DBIS_NAME);wn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],wn(e,Jn).removeSync(t)}a(LW,"dropDBI");function DW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{wn(e,i)}catch(o){if(o.message===Rr.DBI_DOES_NOT_EXIST)ow(e,i,i!==t,i===t),n=!0;else throw o}}n&&TW()}a(DW,"initializeDBIs");aw.exports={openDBI:wn,openEnvironment:nw,createEnvironment:OW,listDBIs:iw,listDBIDefinitions:yW,createDBI:ow,dropDBI:LW,statDBI:wW,deleteEnvironment:bW,initializeDBIs:DW,TransactionCursor:PS,environmentDataSize:CW,copyEnvironment:NW,closeEnvironment:sw}});var uw=T((dpe,lw)=>{"use strict";var HS=Ve(),PW=x(),cw=Wr().LMDB_ERRORS_ENUM;lw.exports=MW;async function MW(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 HS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==cw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await HS.closeEnvironment(global.lmdb_map[n]),await HS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==cw.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){PW.error(t)}}a(MW,"cleanLMDBMap")});var ri=T((Epe,UW)=>{UW.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 Ow=T((ppe,Aw)=>{"use strict";var qS=require("recursive-iterator"),vW=require("alasql"),GS=require("clone"),_w=K(),{handleHDBError:dw,hdb_errors:BW}=ie(),{HDB_ERROR_MSGS:fw,HTTP_STATUS_CODES:Ew}=BW,{getDatabases:HW}=(ge(),oe(Fe)),qW=["DISTINCT_ARRAY"],hw=Symbol("validateTables"),xS=Symbol("validateTable"),hpe=Symbol("getAllColumns"),pw=Symbol("validateAllColumns"),bf=Symbol("findColumn"),mw=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),FS=Symbol("validateColumn"),Sw=Symbol("setColumnsForTable"),Tw=Symbol("checkColumnsForAsterisk"),gw=Symbol("validateGroupBy"),Rw=Symbol("hasColumns"),kS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[hw](),this[Tw](),this[pw]()}[hw](){if(this[Rw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xS](t.table)})}}[Rw](){let t=!1,r=new qS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=HW();if(!r[t.databaseid])throw dw(new Error,fw.SCHEMA_NOT_FOUND(t.databaseid),Ew.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw dw(new Error,fw.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ew.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=GS(s);i.table=GS(t),this.attributes.push(i)})}[bf](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)}[Tw](){let t=new qS(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 vW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[pw](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[gw](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new qS(t),s=[];for(let{node:i,path:o}of n)!_w.isEmpty(i)&&!_w.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[mw](i):s.push(this[FS](i)));return s}[gw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&qW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=GS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[bf](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[bf](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`}[mw](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[FS](t)}[FS](t){let r=this[bf](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]}};Aw.exports=kS});var bw=T((Spe,Nw)=>{"use strict";var $S=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")}};Nw.exports=$S});var Iw=T((gpe,yw)=>{"use strict";var VS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};yw.exports=VS});var Cw=T((Ape,ww)=>{"use strict";var YS=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}};ww.exports=YS});var Dw=T((Npe,Lw)=>{"use strict";var KS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Lw.exports=KS});var Wo=T((Cpe,Uw)=>{"use strict";var GW=Ve(),xW=Iw(),FW=Cw(),kW=Dw(),Ns=Tr(),eu=Wr().LMDB_ERRORS_ENUM,$W=_t(),ni=C(),VW=K(),YW=require("uuid"),ype=require("lmdb"),{handleHDBError:KW,hdb_errors:WW}=ie(),{OVERFLOW_MARKER:Ipe,MAX_SEARCH_KEY_LENGTH:wpe}=$W,Pw=X();Pw.initSync();var yf=Pw.get(ni.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),WS=ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ko=ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function QW(e,t,r,n,s=Ns.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new xW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Mw(_,!0,s);let u=jW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return jS(o,c,n,i,s)}a(QW,"insertRecords");function jW(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][ni.FUNC_VAL],n[o]=c)}let l=Ns.getIndexedValues(c),_=e.dbis[o];if(l){yf&&_.prefetch(l.map(u=>({key:u,value:s})),If);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}yf&&e.dbis[t].prefetch([s],If),e.dbis[t].put(s,n,n[Ko])})}a(jW,"insertRecord");function zW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(zW,"removeSkippedRecords");function Mw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Ko]))&&(e[Ko]=r||(r=Ns.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[WS]))&&(e[WS]=r||Ns.getNextMonotonicTime()):delete e[WS]}a(Mw,"setTimestamps");function QS(e,t,r){r.indexOf(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),GW.initializeDBIs(e,t,r)}a(QS,"initializeTransaction");async function JW(e,t,r,n,s=Ns.getNextMonotonicTime()){JS(e,t,r,n),QS(e,t,r);let i=new FW,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=zS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return jS(c,l,n,i,s,o)}a(JW,"updateRecords");async function XW(e,t,r,n,s=Ns.getNextMonotonicTime()){try{JS(e,t,r,n)}catch(l){throw KW(l,l.message,WW.HTTP_STATUS_CODES.BAD_REQUEST)}QS(e,t,r);let i=new kW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;VW.isEmpty(_[t])?(u=YW.v4(),_[t]=u):u=_[t];let d=zS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return jS(o,c,n,i,s)}a(XW,"upsertRecords");async function jS(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||Ns.getNextMonotonicTime(),zW(r,i),n}a(jS,"finalizeWrite");function zS(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(Mw(r,!u,o),Number.isInteger(r[Ko])&&_[Ko]>r[Ko])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 R=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ni.FUNC_VAL],r[h]=m)}if(m===R)continue;let g=Ns.getIndexedValues(R);if(g){yf&&S.prefetch(g.map(A=>({key:A,value:n})),If);for(let A=0,P=g.length;A<P;A++)S.remove(g[A],n)}if(g=Ns.getIndexedValues(m),g){yf&&S.prefetch(g.map(A=>({key:A,value:n})),If);for(let A=0,P=g.length;A<P;A++)S.put(g[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Ko])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:zS(e,t,r,n,s,i,o))}a(zS,"updateUpsertRecord");function ZW(e,t,r){if(Ns.validateEnv(e),t===void 0)throw new Error(eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(eu.WRITE_ATTRIBUTES_REQUIRED):new Error(eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ZW,"validateBasic");function JS(e,t,r,n){if(ZW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(eu.RECORDS_REQUIRED):new Error(eu.RECORDS_MUST_BE_ARRAY)}a(JS,"validateWrite");function If(){}a(If,"noop");Uw.exports={insertRecords:QW,updateRecords:JW,upsertRecords:XW}});var ys=T((Dpe,Hw)=>{"use strict";var Bw=K(),vw=C(),uc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bs=require("joi"),Qi={schema_format:{pattern:uc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},eQ=bs.alternatives(bs.string().min(1).max(Qi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Qi.schema_format.message}),bs.number(),bs.array()).required(),tQ=bs.alternatives(bs.string().min(1).max(Qi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Qi.schema_format.message}),bs.number()),rQ=bs.alternatives(bs.string().min(1).max(Qi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+Qi.schema_format.message}),bs.number()).required();function nQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Qi.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(nQ,"checkValidTable");function sQ(e,t){return Bw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(sQ,"validateSchemaExists");function iQ(e,t){let r=t.state.ancestors[0].schema;return Bw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(iQ,"validateTableExists");function oQ(e,t){return e.toLowerCase()===vw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${vw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(oQ,"validateSchemaName");Hw.exports={common_validators:Qi,schema_regex:uc,hdb_schema_table:eQ,validateSchemaExists:sQ,validateTableExists:iQ,validateSchemaName:oQ,checkValidTable:nQ,hdb_database:tQ,hdb_table:rQ}});var rt=T((Mpe,qw)=>{"use strict";var Ar=require("validate.js");Ar.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Ar.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ar.validators.type.checks={Object:function(e){return Ar.isObject(e)&&!Ar.isArray(e)},Array:Ar.isArray,Integer:Ar.isInteger,Number:Ar.isNumber,String:Ar.isString,Date:Ar.isDate,Boolean:function(e){return typeof e=="boolean"}};Ar.validators.hasValidFileExt=function(e,t){return Ar.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};qw.exports={validateObject:aQ,validateObjectAsync:cQ,validateBySchema:lQ};function aQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ar(e,t,{format:"flat"});return r?new Error(r):null}a(aQ,"validateObject");async function cQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ar.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(cQ,"validateObjectAsync");function lQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lQ,"validateBySchema")});var wf=T((vpe,Gw)=>{var{common_validators:Is}=ys(),ru=rt(),tu="is required",gt={database:{presence:!1,format:Is.schema_format,length:Is.schema_length},schema:{presence:!1,format:Is.schema_format,length:Is.schema_length},table:{presence:!0,format:Is.schema_format,length:Is.schema_length},attribute:{presence:!0,format:Is.schema_format,length:Is.schema_length},hash_attribute:{presence:!0,format:Is.schema_format,length:Is.schema_length}};function nu(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(nu,"makeAttributesStrings");function uQ(e){return e=nu(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(uQ,"schema_object");function _Q(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(_Q,"table_object");function dQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,ru.validateObject(e,gt)}a(dQ,"create_table_object");function fQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence={message:tu},gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(fQ,"attribute_object");function EQ(e){return e=nu(e),gt.table.presence={message:tu},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,ru.validateObject(e,gt)}a(EQ,"describe_table");function hQ(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(hQ,"validateTableResidence");Gw.exports={schema_object:uQ,create_table_object:dQ,table_object:_Q,attribute_object:fQ,describe_table:EQ,validateTableResidence:hQ}});var Fw=T((Hpe,xw)=>{"use strict";var pQ=require("uuid"),XS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||pQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};xw.exports=XS});var Cf=T((Gpe,kw)=>{"use strict";var mQ=Fw(),ZS=class extends mQ{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}};kw.exports=ZS});var Vw=T((Fpe,$w)=>{"use strict";$w.exports=TQ;var SQ="inserted";function TQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===SQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(TQ,"returnObject")});var Lf=T(($pe,jw)=>{"use strict";var gQ=C(),eT=Ve(),RQ=Wo(),{getSystemSchemaPath:AQ,getSchemaPath:OQ}=ze(),NQ=ri(),bQ=wf(),yQ=Cf(),IQ=Vw(),{handleHDBError:Yw,hdb_errors:Ww}=ie(),Kw=K(),{HTTP_STATUS_CODES:wQ}=Ww,tT=NQ.hdb_attribute,Qw=[];for(let e=0;e<tT.attributes.length;e++)Qw.push(tT.attributes[e].attribute);var CQ="inserted";jw.exports=LQ;async function LQ(e){let t=bQ.attribute_object(e);if(t)throw Yw(new Error,t.message,Ww.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Kw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Yw(new Error,r,wQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Kw.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 yQ(e.schema,e.table,e.attribute,e.id);try{let i=await eT.openEnvironment(OQ(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}`);eT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await eT.openEnvironment(AQ(),gQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await RQ.insertRecords(o,tT.hash_attribute,Qw,[s]);return IQ(CQ,c,{records:[s]},l)}catch(i){throw i}}a(LQ,"lmdbCreateAttribute")});var nT=T((Ype,Jw)=>{var{hdb_table:DQ,hdb_database:zw}=ys(),PQ=rt(),rT=require("joi"),MQ={undefined:"undefined",null:"null"},UQ=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||MQ[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"),vQ=rT.object({database:zw,schema:zw,table:DQ,records:rT.array().items(rT.object().custom(UQ)).required()});Jw.exports=function(e){return PQ.validateBySchema(e,vQ)}});var su=T((Qpe,Zw)=>{"use strict";var si=K(),Xw=x(),Wpe=nT(),{getDatabases:BQ}=(ge(),oe(Fe)),{ClientError:Qo}=ie();Zw.exports=HQ;function HQ(e){if(si.isEmpty(e))throw new Qo("invalid update parameters defined.");if(si.isEmptyOrZeroLength(e.schema))throw new Qo("invalid schema specified.");if(si.isEmptyOrZeroLength(e.table))throw new Qo("invalid table specified.");if(!Array.isArray(e.records))throw new Qo("records must be an array");let t=BQ()[e.schema]?.[e.table];if(si.isEmpty(t))throw new Qo(`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&&si.isEmptyOrZeroLength(o[r]))throw Xw.error("a valid hash attribute must be provided with update record:",o),new Qo("a valid hash attribute must be provided with update record, check log for more info");if(!si.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 Qo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!si.isEmpty(o[r])&&o[r]!==""&&n.has(si.autoCast(o[r]))&&(o.skip=!0),n.add(si.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(HQ,"insertUpdateValidate")});var iu=T((zpe,eC)=>{"use strict";var qQ=C().OPERATIONS_ENUM,sT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=qQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};eC.exports=sT});var ou=T((Zpe,rC)=>{"use strict";var Xpe=iu(),Df=C(),iT=K(),tC=x(),GQ=require("uuid"),{handleHDBError:Pf,hdb_errors:xQ}=ie(),{HDB_ERROR_MSGS:Mf,HTTP_STATUS_CODES:Uf}=xQ;rC.exports=FQ;function FQ(e,t,r){for(let s=0;s<t.length;s++)kQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];$Q(i,r,e.operation)}}a(FQ,"processRows");function kQ(e){if(Buffer.byteLength(String(e))>Df.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Pf(new Error,Mf.ATTR_NAME_LENGTH_ERR(e),Uf.BAD_REQUEST,void 0,void 0,!0);if(iT.isEmptyOrZeroLength(e)||iT.isEmpty(e.trim()))throw Pf(new Error,Mf.ATTR_NAME_NULLISH_ERR,Uf.BAD_REQUEST,void 0,void 0,!0)}a(kQ,"validateAttribute");function $Q(e,t,r){if(!e.hasOwnProperty(t)||iT.isEmptyOrZeroLength(e[t])){if(r===Df.OPERATIONS_ENUM.INSERT||r===Df.OPERATIONS_ENUM.UPSERT){e[t]=GQ.v4();return}throw tC.error("Update transaction aborted due to record with no hash value:",e),Pf(new Error,Mf.RECORD_MISSING_HASH_ERR,Uf.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Df.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw tC.error(e),Pf(new Error,Mf.HASH_VAL_LENGTH_ERR,Uf.BAD_REQUEST,void 0,void 0,!0)}a($Q,"validateHash")});var vf=T((tme,sC)=>{"use strict";var nC=K(),VQ=C(),YQ=x(),KQ=Lf(),WQ=Cf(),QQ=ii(),{SchemaEventMsg:jQ}=Xn(),zQ="already exists in";sC.exports=JQ;async function JQ(e,t,r){if(nC.isEmptyOrZeroLength(r))return r;let n=[];nC.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 XQ(e,t.schema,t.name,i)})),s}a(JQ,"lmdbCheckForNewAttributes");async function XQ(e,t,r,n){let s=new WQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ZQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(zQ))YQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(XQ,"createNewAttribute");async function ZQ(e){let t;return t=await KQ(e),QQ.signalSchemaChange(new jQ(process.pid,VQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ZQ,"createAttribute")});var _c=T((nme,iC)=>{"use strict";var oT=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}};iC.exports=oT});var aC=T((ime,oC)=>{"use strict";var ej=_c(),tj=C().OPERATIONS_ENUM,aT=class extends ej{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(tj.INSERT,r,n,s,i),this.records=t}};oC.exports=aT});var lC=T((ame,cC)=>{"use strict";var rj=_c(),nj=C().OPERATIONS_ENUM,cT=class extends rj{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(nj.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};cC.exports=cT});var _C=T((lme,uC)=>{"use strict";var sj=_c(),ij=C().OPERATIONS_ENUM,lT=class extends sj{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(ij.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};uC.exports=lT});var fC=T((_me,dC)=>{"use strict";var oj=_c(),aj=C().OPERATIONS_ENUM,uT=class extends oj{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(aj.DELETE,n,s,t,i),this.original_records=r}};dC.exports=uT});var au=T((Eme,mC)=>{"use strict";var fme=require("path"),EC=Ve(),cj=aC(),lj=lC(),uj=_C(),_j=fC(),dc=_t(),hC=K(),{CONFIG_PARAMS:dj}=C(),pC=X();pC.initSync();var Bf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:fj}=ze();mC.exports=Ej;async function Ej(e,t){if(pC.get(dj.LOGGING_AUDITLOG)===!1)return;let r=fj(e.schema,e.table),n=await EC.openEnvironment(r,e.table,!0),s=hj(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),hC.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(Ej,"writeTransaction");function hj(e,t){let r=hC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Bf.INSERT)return new cj(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bf.UPDATE)return new lj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bf.UPSERT)return new uj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bf.DELETE)return new _j(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(hj,"createTransactionObject")});var _T=T((mme,SC)=>{"use strict";var pj=su(),pme=iu(),cu=C(),mj=ou(),Sj=Wo().insertRecords,Tj=Ve(),gj=x(),Rj=vf(),{getSchemaPath:Aj}=ze(),Oj=au();SC.exports=Nj;async function Nj(e){try{let{schema_table:t,attributes:r}=pj(e);mj(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 Rj(e.hdb_auth_header,t,r),s=Aj(e.schema,e.table),i=await Tj.openEnvironment(s,e.table),o=await Sj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Oj(e,o)}catch(c){gj.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(Nj,"lmdbCreateRecords")});var RC=T((Tme,gC)=>{"use strict";var TC=C(),bj=_T(),yj=iu(),Ij=require("fs-extra"),{getSchemaPath:wj}=ze();gC.exports=Cj;async function Cj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new yj(TC.SYSTEM_SCHEMA_NAME,TC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await bj(r),await Ij.mkdirp(wj(e.schema))}a(Cj,"lmdbCreateSchema")});var OC=T((Rme,AC)=>{"use strict";var dT=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=dT});var IC=T((yme,yC)=>{"use strict";var NC=Ve(),fT=Tr(),ET=Wr().LMDB_ERRORS_ENUM,Lj=_t(),bC=x(),Ome=K(),Dj=require("lmdb"),Pj=OC(),Mj=C(),{OVERFLOW_MARKER:Nme,MAX_SEARCH_KEY_LENGTH:bme}=Lj,Uj=Mj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function vj(e,t,r,n){if(fT.validateEnv(e),t===void 0)throw new Error(ET.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ET.IDS_REQUIRED):new Error(ET.IDS_MUST_BE_ITERABLE);try{let s=NC.listDBIs(e);NC.initializeDBIs(e,t,s);let i=new Pj,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[Uj]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,Dj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let R=s[S];if(!h.hasOwnProperty(R)||R===t)continue;let g=e.dbis[R],A=h[R];if(A!=null)try{let P=fT.getIndexedValues(A);if(P)for(let v=0,U=P.length;v<U;v++)g.remove(P[v],o)}catch{bC.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){bC.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=fT.getNextMonotonicTime(),i}catch(s){throw s}}a(vj,"deleteRecords");yC.exports={deleteRecords:vj}});var lu=T((wme,CC)=>{"use strict";var fc=K(),Bj=IC(),Hj=Ve(),{getSchemaPath:qj}=ze(),Gj=au(),xj=x();CC.exports=Fj;async function Fj(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 wC([],[]);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=qj(e.schema,e.table),i=await Hj.openEnvironment(s,e.table),o=await Bj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Gj(e,o)}catch(c){xj.error(`unable to write transaction due to ${c.message}`)}return wC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Fj,"lmdbDeleteRecords");function wC(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(wC,"createDeleteResponse")});var pT=T((Dme,LC)=>{"use strict";var kj=C(),Lme=Tr();function hT(e,t){let r=Object.create(null);if(t.length===1&&kj.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(hT,"parseRow");function $j(e,t,r,n){let s=hT(r,e);n.push(s)}a($j,"searchAll");function Vj(e,t,r,n){let s=hT(r,e);n[t]=s}a(Vj,"searchAllToMap");function Yj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Yj,"iterateDBI");function jo(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(jo,"pushResults");function Kj(e,t,r,n,s,i){t.toString().endsWith(e)&&jo(t,r,n,s,i)}a(Kj,"endsWith");function Wj(e,t,r,n,s,i){t.toString().includes(e)&&jo(t,r,n,s,i)}a(Wj,"contains");function Qj(e,t,r,n,s,i){t>e&&jo(t,r,n,s,i)}a(Qj,"greaterThanCompare");function jj(e,t,r,n,s,i){t>=e&&jo(t,r,n,s,i)}a(jj,"greaterThanEqualCompare");function zj(e,t,r,n,s,i){t<e&&jo(t,r,n,s,i)}a(zj,"lessThanCompare");function Jj(e,t,r,n,s,i){t<=e&&jo(t,r,n,s,i)}a(Jj,"lessThanEqualCompare");LC.exports={parseRow:hT,searchAll:$j,searchAllToMap:Vj,iterateDBI:Yj,endsWith:Kj,contains:Wj,greaterThanCompare:Qj,greaterThanEqualCompare:jj,lessThanCompare:zj,lessThanEqualCompare:Jj,pushResults:jo}});var Ec=T((Bme,HC)=>{"use strict";var ji=Ve(),Mme=x(),Zr=Tr(),Hf=_t(),dt=Wr().LMDB_ERRORS_ENUM,Ume=K(),Xj=C(),qf=pT(),{parseRow:Zj}=qf,vme=require("lmdb"),{OVERFLOW_MARKER:DC,MAX_SEARCH_KEY_LENGTH:ez}=Hf;function PC(e,t,r,n=!1,s=void 0,i=void 0){return zo(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(PC,"iterateFullIndex");function uu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return zo(e,t,r,(u,d,f,E)=>{let g={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?(g.values=!1,d.getRange(g).map(A=>({value:A}))):d.getRange(g)})}a(uu,"iterateRangeBetween");function zo(e,t,r,n){let s=e.database||e,i=ji.openDBI(s,r);i[Hf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ji.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(zo,"setupTransaction");function MC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(DC)){if(!s)if(r)s=ji.openDBI(e,r);else{let l=ji.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=ji.openDBI(e,l[_]),!s[Hf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(MC,"getOverflowCheck");function tz(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 zo(e,t,t,(o,c,l)=>(Gf(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(_=>Zj(_.value,r))))}a(tz,"searchAll");function rz(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);Gf(r),r=_u(e.database||e,r);let o=new Map;for(let{key:c,value:l}of PC(e,t,t,n,s,i))o.set(c,qf.parseRow(l,r));return o}a(rz,"searchAllToMap");function nz(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=PC(e,void 0,t,r,n,s),c=o.transaction,l=MC(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(nz,"iterateDBI");function sz(e,t){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return ji.statDBI(e,t).entryCount}a(sz,"countAll");function iz(e,t,r,n,s=!1,i=void 0,o=void 0){return zi(e,r,n),zo(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(iz,"equals");function oz(e,t,r){return zi(e,t,r),ji.openDBI(e,t).getValuesCount(r)}a(oz,"count");function az(e,t,r,n,s=!1,i=void 0,o=void 0){return zi(e,r,n),zo(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(az,"startsWith");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return UC(e,t,r,n,s,i,o,!0)}a(cz,"endsWith");function UC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return zi(e,r,n),zo(e,null,r,(l,_,u,d)=>{let f=MC(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(DC)?_.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))?_[Hf.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(UC,"contains");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){zi(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(lz,"greaterThan");function uz(e,t,r,n,s=!1,i=void 0,o=void 0){zi(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(uz,"greaterThanEqual");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){zi(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(_z,"lessThan");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){zi(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(dz,"lessThanEqual");function fz(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(fz,"between");function Ez(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(Gf(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=qf.parseRow(c,r)),o}a(Ez,"searchByHash");function hz(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(hz,"checkHashExists");function pz(e,t,r,n,s=[]){return BC(e,t,r,n,s),vC(e,t,r,n,s).map(i=>i[1])}a(pz,"batchSearchByHash");function mz(e,t,r,n,s=[]){BC(e,t,r,n,s);let i=new Map;for(let[o,c]of vC(e,t,r,n,s))i.set(o,c);return i}a(mz,"batchSearchByHashToMap");function vC(e,t,r,n,s=[]){return zo(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[_,qf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(vC,"batchHashSearch");function BC(e,t,r,n,s){if(Zr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(Gf(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(BC,"initializeBatchSearchByHash");function Gf(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Gf,"validateFetchAttributes");function zi(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>ez)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(zi,"validateComparisonFunctions");function _u(e,t){return t.length===1&&Xj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ji.listDBIs(e)),t}a(_u,"setGetWholeRowAttributes");HC.exports={searchAll:tz,searchAllToMap:rz,count:oz,countAll:sz,equals:iz,startsWith:az,endsWith:cz,contains:UC,searchByHash:Ez,setGetWholeRowAttributes:_u,batchSearchByHash:pz,batchSearchByHashToMap:mz,checkHashExists:hz,iterateDBI:nz,greaterThan:lz,greaterThanEqual:uz,lessThan:_z,lessThanEqual:dz,between:fz}});var hc=T((qme,kC)=>{var qC=require("lodash"),GC=rt(),he=require("joi"),Sz=K(),{hdb_schema_table:du,checkValidTable:xC,hdb_table:FC,hdb_database:xf}=ys(),{handleHDBError:Tz,hdb_errors:gz}=ie(),{getDatabases:Rz}=(ge(),oe(Fe)),{HTTP_STATUS_CODES:Az}=gz,Oz=he.object({database:xf,schema:xf,table:FC,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)}),Nz=he.object({database:xf,schema:xf,table:FC,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()});kC.exports=function(e,t){let r=null;switch(t){case"value":r=GC.validateBySchema(e,Oz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(xC("database",e.schema)),i(xC("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=GC.validateBySchema(e,Nz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Sz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Tz(new Error,s,Az.NOT_FOUND);let o=Rz()[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 _=qC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!qC.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 mT=T((xme,$C)=>{"use strict";var bz=Ve(),yz=hc(),{getSchemaPath:Iz}=ze();$C.exports=wz;function wz(e){let t=yz(e,"hashes");if(t)throw t;let r=Iz(e.schema,e.table);return bz.openEnvironment(r,e.table)}a(wz,"initialize")});var ST=T((kme,VC)=>{"use strict";var Cz=Ec(),Lz=mT();VC.exports=Dz;async function Dz(e){let t=await Lz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Cz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Dz,"lmdbGetDataByHash")});var pc=T((Vme,YC)=>{"use strict";var TT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};YC.exports=TT});var WC=T((Wme,KC)=>{"use strict";var Kme=pc(),Pz=Ec(),Mz=mT();KC.exports=Uz;async function Uz(e){let t=await Mz(e),r=global.hdb_schema[e.schema][e.table];return Pz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Uz,"lmdbSearchByHash")});var Zn=T((jme,QC)=>{"use strict";var gT=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}};QC.exports=gT});var Ff=T((Jme,eL)=>{"use strict";var rr=Ec(),vz=Ve(),Bz=K(),pe=_t(),Jo=C(),Hz=ri(),jC=Wr().LMDB_ERRORS_ENUM,{getSchemaPath:qz}=ze(),oi=Jo.SEARCH_WILDCARDS;async function Gz(e,t,r){let n;e.schema===Jo.SYSTEM_SCHEMA_NAME?n=Hz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=ZC(e,n.hash_attribute,r,t);return JC(e,s,n.hash_attribute,r)}a(Gz,"prepSearch");async function JC(e,t,r,n){let s=qz(e.schema,e.table),i=await vz.openEnvironment(s,e.table),o=XC(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(xz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?zC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?zC(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(JC,"executeSearch");function XC(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(XC,"searchByType");function zC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(zC,"createMapFromIterable");function xz(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(xz,"checkToFetchMore");function ZC(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),oi.indexOf(s)>-1)return r===!0?pe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:pe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(oi[0])<0&&s.indexOf(oi[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(oi.indexOf(i)>=0&&oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),pe.SEARCH_TYPES.CONTAINS;if(oi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),pe.SEARCH_TYPES.ENDS_WITH;if(oi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),pe.SEARCH_TYPES.STARTS_WITH;if(s.includes(oi[0])||s.includes(oi[1]))return pe.SEARCH_TYPES.EQUALS;throw new Error(jC.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(jC.UNKNOWN_SEARCH_TYPE)}}a(ZC,"createSearchTypeFromSearchObject");eL.exports={executeSearch:JC,createSearchTypeFromSearchObject:ZC,prepSearch:Gz,searchByType:XC}});var rL=T((eSe,tL)=>{"use strict";var Zme=Zn(),Fz=hc(),kz=K(),$z=C(),Vz=Ff();tL.exports=Yz;function Yz(e,t){if(!kz.isEmpty(t)&&$z.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Fz(e,"value");if(n)throw n;return Vz.prepSearch(e,t,!0)}a(Yz,"lmdbGetDataByValue")});var fu=T((nSe,nL)=>{"use strict";var rSe=Zn(),Kz=hc(),Wz=K(),Qz=C(),jz=Ff();nL.exports=zz;async function zz(e,t){if(!Wz.isEmpty(t)&&Qz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kz(e,"value");if(n)throw n;return jz.prepSearch(e,t,!1)}a(zz,"lmdbSearchByValue")});var iL=T((oSe,sL)=>{"use strict";var iSe=_t(),RT=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}},AT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},OT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};sL.exports={SearchByConditionsObject:RT,SearchCondition:AT,SortAttribute:OT}});var uL=T((uSe,lL)=>{"use strict";var cSe=iL().SearchByConditionsObject,Jz=Zn(),Xz=hc(),NT=Ec(),kf=_t(),{Resource:lSe}=(Qn(),oe(NS)),cL=Ff(),Zz=pT(),eJ=require("lodash"),{getSchemaPath:tJ}=ze(),oL=Ve(),{handleHDBError:rJ,hdb_errors:nJ}=ie(),{HTTP_STATUS_CODES:sJ}=nJ,iJ=1e8;lL.exports=oJ;async function oJ(e){let t=Xz(e,"conditions");if(t)throw rJ(t,t.message,sJ.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=tJ(e.schema,e.table),n=await oL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)oL.openDBI(n,_.search_attribute);let i=eJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===kf.SEARCH_TYPES.EQUALS?_.estimated_count=NT.count(n,_.search_attribute,_.search_value):u===kf.SEARCH_TYPES.CONTAINS||u===kf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=iJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await aL(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(cL.filterByType),d=u.length,f=NT.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=>Zz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await aL(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=NT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(oJ,"lmdbSearchByConditions");async function aL(e,t,r,n){let s=new Jz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===kf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,cL.searchByType(e,s,i,n).map(o=>o.value)}a(aL,"executeConditionSearch")});var Eu=T((dSe,_L)=>{"use strict";var aJ=C().OPERATIONS_ENUM,bT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=aJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};_L.exports=bT});var yT=T((ESe,TL)=>{"use strict";var hL=Zn(),pL=Eu(),mL=fu(),SL=lu(),Or=C(),dL=K(),fL=Ve(),{getTransactionAuditStorePath:cJ,getSchemaPath:lJ}=ze(),EL=x();TL.exports=uJ;async function uJ(e){try{if(dL.isEmpty(global.hdb_schema[e.schema])||dL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _J(e),await dJ(e);let t=lJ(e.schema,e.table);try{await fL.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=cJ(e.schema,e.table);await fL.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(uJ,"lmdbDropTable");async function _J(e){let t=new hL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await mL(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 pL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await SL(s)}a(_J,"deleteAttributesFromSystem");async function dJ(e){let t=new hL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await mL(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 pL(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await SL(s)}catch(i){throw i}}a(dJ,"dropTableFromSystem")});var RL=T((pSe,gL)=>{"use strict";var fJ=require("fs-extra"),EJ=Zn(),hJ=pc(),pJ=Eu(),mJ=yT(),SJ=lu(),TJ=ST(),gJ=fu(),ai=C(),{getSchemaPath:RJ}=ze(),{handleHDBError:AJ,hdb_errors:OJ}=ie(),{HDB_ERROR_MSGS:NJ,HTTP_STATUS_CODES:bJ}=OJ;gL.exports=yJ;async function yJ(e){let t;try{t=await IJ(e.schema);let r=new EJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await gJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await mJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new pJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await SJ(s);let i=RJ(t);await fJ.remove(i)}catch(r){throw r}}a(yJ,"lmdbDropSchema");async function IJ(e){let t=new hJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ai.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await TJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw AJ(new Error,NJ.SCHEMA_NOT_FOUND(e),bJ.NOT_FOUND,void 0,void 0,!0);return n}a(IJ,"validateDropSchema")});var hu=T((SSe,AL)=>{"use strict";var IT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};AL.exports=IT});var CT=T((RSe,OL)=>{"use strict";var wJ=require("fs-extra"),$f=Ve(),{getTransactionAuditStorePath:CJ}=ze(),wT=_t(),gSe=hu();OL.exports=LJ;async function LJ(e){let t;try{let r=CJ(e.schema,e.table);await wJ.mkdirp(r),t=await $f.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{$f.createDBI(t,wT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),$f.createDBI(t,wT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),$f.createDBI(t,wT.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(LJ,"createTransactionsAuditEnvironment")});var IL=T((OSe,yL)=>{"use strict";var LT=C(),NL=Ve(),DJ=Wo(),{getSystemSchemaPath:PJ,getSchemaPath:MJ}=ze(),UJ=ri(),vJ=Lf(),DT=Cf(),BJ=x(),HJ=CT(),MT=UJ.hdb_table,bL=[];for(let e=0;e<MT.attributes.length;e++)bL.push(MT.attributes[e].attribute);yL.exports=qJ;async function qJ(e,t){let r=MJ(t.schema,t.table),n=new DT(t.schema,t.table,LT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new DT(t.schema,t.table,LT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new DT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await NL.createEnvironment(r,t.table),e!==void 0){let o=await NL.openEnvironment(PJ(),LT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await DJ.insertRecords(o,MT.hash_attribute,bL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await PT(n),await PT(s),await PT(i)}await HJ(t)}catch(o){throw o}}a(qJ,"lmdbCreateTable");async function PT(e){try{await vJ(e)}catch(t){BJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(PT,"createAttribute")});var CL=T((bSe,wL)=>{"use strict";var GJ=su(),xJ=ou(),FJ=vf(),pu=C(),kJ=Wo().updateRecords,$J=Ve(),{getSchemaPath:VJ}=ze(),YJ=au(),KJ=x();wL.exports=WJ;async function WJ(e){try{let{schema_table:t,attributes:r}=GJ(e);xJ(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 FJ(e.hdb_auth_header,t,r),s=VJ(e.schema,e.table),i=await $J.openEnvironment(s,e.table),o=await kJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await YJ(e,o)}catch(c){KJ.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(WJ,"lmdbUpdateRecords")});var DL=T((ISe,LL)=>{"use strict";var QJ=C().OPERATIONS_ENUM,UT=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}};LL.exports=UT});var ML=T((LSe,PL)=>{"use strict";var CSe=DL(),jJ=su(),zJ=ou(),JJ=vf(),mu=C(),XJ=Wo().upsertRecords,ZJ=Ve(),{getSchemaPath:e2}=ze(),t2=au(),r2=x(),{handleHDBError:n2,hdb_errors:s2}=ie();PL.exports=i2;async function i2(e){let t;try{t=jJ(e)}catch(l){throw n2(l,l.message,s2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;zJ(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 JJ(e.hdb_auth_header,r,n),i=e2(e.schema,e.table),o=await ZJ.openEnvironment(i,e.table),c=await XJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await t2(e,c)}catch(l){r2.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(i2,"lmdbUpsertRecords")});var vL=T((PSe,UL)=>{"use strict";var vT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};UL.exports=vT});var HL=T((USe,BL)=>{"use strict";var BT=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}};BL.exports=BT});var xL=T((HSe,GL)=>{"use strict";var HT=Ve(),{getTransactionAuditStorePath:o2}=ze(),BSe=vL(),Su=_t(),a2=K(),qL=HL(),c2=require("util").promisify,l2=c2(setTimeout),u2=1e4,_2=100;GL.exports=d2;async function d2(e){let t=o2(e.schema,e.table),r=await HT.openEnvironment(t,e.table,!0),n=HT.listDBIs(r);HT.initializeDBIs(r,Su.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new qL;do s=await f2(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 l2(_2);while(s.transactions_deleted>0);return i}a(d2,"deleteAuditLogsBefore");async function f2(e,t){let r=new qL;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];a2.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>u2)break}return await s,r}catch(n){throw n}}a(f2,"deleteTransactions")});var kL=T((GSe,FL)=>{"use strict";var qT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};FL.exports=qT});var VL=T((kSe,$L)=>{"use strict";var E2=Zn(),h2=Eu(),FSe=kL(),ws=C(),p2=K(),GT=Ve(),m2=ri(),S2=fu(),T2=lu(),{getSchemaPath:g2}=ze();$L.exports=R2;async function R2(e,t=!0){let r;e.schema===ws.SYSTEM_SCHEMA_NAME?r=m2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await O2(e),s=g2(e.schema,e.table),i=await GT.openEnvironment(s,e.table);return t===!0&&await A2(e,i,r.hash_attribute),GT.dropDBI(i,e.attribute),n}a(R2,"lmdbDropAttribute");async function A2(e,t,r){let n=GT.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(A2,"removeAttributeFromAllObjects");async function O2(e){let t=new E2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await S2(t)).filter(o=>o[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(p2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new h2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return T2(i)}a(O2,"dropAttributeFromSystem")});var zL=T((YSe,jL)=>{"use strict";var xT=Ve(),mc=_t(),VSe=Tr(),FT=C(),YL=K(),{getTransactionAuditStorePath:N2}=ze(),b2=Ec(),Vf=_c(),y2=x();jL.exports=I2;async function I2(e){let t=N2(e.schema,e.table),r=await xT.openEnvironment(t,e.table,!0),n=xT.listDBIs(r);xT.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case FT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return KL(r,e.search_values);case FT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,C2(r,e.search_values,s);case FT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return w2(r,e.search_values);default:return KL(r)}}a(I2,"readAuditLog");function KL(e,t=[0,Date.now()]){YL.isEmpty(t[0])&&(t[0]=0),YL.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 Vf,s))}a(KL,"searchTransactionsByTimestamp");function w2(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,QL(e,i))}return Object.fromEntries(r)}a(w2,"searchTransactionsByUsername");function C2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=b2.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=QL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);WL(l,"records",r,u,o),WL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(C2,"searchTransactionsByHashValues");function WL(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 Vf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Vf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(WL,"loopRecords");function QL(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 Vf,i);r.push(o)}}catch(i){y2.warn(i)}return r}catch(n){throw n}}a(QL,"batchSearchTransactions")});var XL=T((jSe,JL)=>{"use strict";var{getSchemaPath:WSe}=ze(),QSe=Ve(),{database:L2}=(ge(),oe(Fe));JL.exports={writeTransaction:D2};async function D2(e,t,r){return L2({database:e,table:t}).transaction(r)}a(D2,"writeTransaction")});var rD=T((JSe,tD)=>{"use strict";var{getSchemaPath:ZL}=ze(),eD=Ve();tD.exports={flush:P2,resetReadTxn:M2};async function P2(e,t){return(await eD.openEnvironment(ZL(e,t),t.toString())).flushed}a(P2,"flush");async function M2(e,t){try{(await eD.openEnvironment(ZL(e,t),t.toString())).resetReadTxn()}catch{}}a(M2,"resetReadTxn")});var oD=T((ZSe,iD)=>{"use strict";var{Readable:U2}=require("stream"),{getDatabases:v2}=(ge(),oe(Fe)),{readSync:B2,openSync:H2,createReadStream:nD}=require("fs"),{open:q2}=require("lmdb"),sD=Sf(),G2=gf(),{AUDIT_STORE_OPTIONS:x2}=(xo(),oe(gI)),{INTERNAL_DBIS_NAME:F2,AUDIT_STORE_NAME:k2}=_t();iD.exports=V2;var kT=32768,$2=100;async function V2(e){let t=e.database||e.schema||"data",r=v2()[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=q2({noSync:!0,maxDbs:G2.MAX_DBS}),f,E=d.openDB(F2,new sD(!1)),h=u.useReadTransaction(),m=0,S=a(async function(g,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(g,A),v=u.openDB(g,A);for(let{key:U,version:F,value:H}of v.getRange({transaction:h,versions:v.useVersions}))f=P.put(U,H,F),m++%$2===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>g.startsWith?.(P+"/"))){E.put(g,A);let[,P]=g.split("/"),v=!P,U=new sD(!v,v);await S(g,U)}e.include_audit&&await S(k2,Object.assign({},x2)),await f;let R=nD(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=H2(o.path);return o.transaction(()=>{let _=Buffer.alloc(kT);B2(c,_,0,kT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=nD(null,{fd:c,start:kT}),f=new U2.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(V2,"getBackup")});var lD=T((tTe,cD)=>{"use strict";var Y2=x(),{handleHDBError:K2}=ie(),W2=bw(),Q2=Lf(),j2=_T(),z2=RC(),J2=lu(),X2=ST(),Z2=WC(),e4=rL(),t4=fu(),r4=uL(),n4=RL(),s4=IL(),i4=CL(),o4=ML(),a4=xL(),c4=yT(),l4=VL(),u4=zL(),_4=XL(),aD=rD(),d4=oD(),$T=class extends W2{static{a(this,"LMDBBridge")}async searchByConditions(t){return r4(t)}async getDataByHash(t){return await X2(t)}async searchByHash(t){return await Z2(t)}async getDataByValue(t,r){return await e4(t,r)}async searchByValue(t){return await t4(t)}async createSchema(t){return await z2(t)}async dropSchema(t){return await n4(t)}async createTable(t,r){return await s4(t,r)}async dropTable(t){return await c4(t)}async createAttribute(t){return await Q2(t)}async createRecords(t){return await j2(t)}async updateRecords(t){return await i4(t)}async upsertRecords(t){try{return await o4(t)}catch(r){throw K2(r,null,null,Y2.ERR,r)}}async deleteRecords(t){return await J2(t)}async dropAttribute(t){return await l4(t)}async deleteAuditLogsBefore(t){return await a4(t)}async readAuditLog(t){return await u4(t)}writeTransaction(t,r,n){return _4.writeTransaction(t,r,n)}flush(t,r){return aD.flush(t,r)}resetReadTxn(t,r){return aD.resetReadTxn(t,r)}getBackup(t){return d4(t)}};cD.exports=$T});var SD={};$e(SD,{ResourceBridge:()=>KT});function WT({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 _D(e,t){let r=Cs(e),n=WT(e,r);if(!r)throw new es.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&&af(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 Cs(e){let t=e.database||e.schema||E4,r=ts()[t];if(!r)throw(0,es.handleHDBError)(new Error,f4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function dD(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*fD(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,Yf,es,hD,pD,rs,VT,YT,mD,f4,E4,h4,p4,uD,KT,TD=Ne(()=>{"use strict";ED=q(lD()),Yf=q(hc()),es=q(ie());ge();hD=q(su()),pD=q(ou()),rs=q(C()),VT=q(ii()),YT=q(Xn()),mD=q(K());Vo();cf();({HDB_ERROR_MSGS:f4}=es.hdb_errors),E4="data",h4=1e4,p4=10,KT=class extends ED.default{static{a(this,"ResourceBridge")}constructor(t){super(t),uD=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,Yf.default)(t,"conditions");if(r)throw(0,es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Cs(t);if(!n)throw new es.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:WT(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 es.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 Cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Cs(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){Cs(t).dropTable()}createSchema(t){return Tu({database:t.schema,table:null}),VT.signalSchemaChange(new YT.SchemaEventMsg(process.pid,rs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await QT(t.schema),VT.signalSchemaChange(new YT.SchemaEventMsg(process.pid,rs.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,uD.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,hD.default)(t);(0,pD.default)(t,n,r.primaryKey);let s,i=ts()[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=af(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=ts()[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 dD(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ts()[t.schema][t.table];if(!r.createdTimeProperty)throw new es.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:rs.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,mD.async_set_timeout)(p4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%h4===0&&await _();return l.length>0&&await _(),s?dD(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Yf.default)(t,"hashes");if(r)throw r;return _D(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of _D(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&rs.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,Yf.default)(t,"value");if(n)throw n;let s=Cs(t);if(!s)throw new es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===rs.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:WT(t,s)})}async getDataByValue(t,r){let n=new Map,s=Cs(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){Cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Cs(t),n={};switch(t.search_type){case rs.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 rs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of fD(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return fD(r,t.search_values?.[0],t.search_values?.[1])}}};a(WT,"getSelect");a(_D,"getRecords");a(Cs,"getTable");a(dD,"createDeleteResponse");a(fD,"groupRecordsInHistory")});var Cn=T((aTe,gD)=>{"use strict";var{ResourceBridge:m4}=(TD(),oe(SD)),S4=X();S4.initSync();var Kf;function T4(){return Kf||(Kf=new m4,Kf)}a(T4,"getBridge");gD.exports=T4()});var ND=T((lTe,OD)=>{"use strict";var RD=require("lodash"),gu=require("mathjs"),g4=require("jsonata"),AD=K();OD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?RD.uniqWith(e,RD.isEqual):e,searchJSON:R4,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 R4(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=g4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(R4,"searchJSON")});var yD=T((_Te,bD)=>{"use strict";var Rt=require("moment"),jT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;bD.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(jT),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(jT),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(jT)}});var LD=T((dTe,CD)=>{"use strict";var A4=require("@turf/area"),O4=require("@turf/length"),N4=require("@turf/circle"),b4=require("@turf/difference"),y4=require("@turf/distance"),I4=require("@turf/boolean-contains"),w4=require("@turf/boolean-equal"),C4=require("@turf/boolean-disjoint"),L4=require("@turf/helpers"),ID=C(),Se=K(),ci=x();CD.exports={geoArea:D4,geoLength:P4,geoCircle:M4,geoDifference:U4,geoDistance:wD,geoNear:v4,geoContains:B4,geoEqual:H4,geoCrosses:q4,geoConvert:G4};function D4(e){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return A4.default(e)}catch(t){return ci.trace(t,e),NaN}}a(D4,"geoArea");function P4(e,t){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return O4.default(e,{units:t||"kilometers"})}catch(r){return ci.trace(r,e),NaN}}a(P4,"geoLength");function M4(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return N4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(M4,"geoCircle");function U4(e,t){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return b4(e,t)}catch(r){return ci.trace(r,e,t),NaN}}a(U4,"geoDifference");function wD(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return y4.default(e,t,{units:r||"kilometers"})}catch(n){return ci.trace(n,e,t),NaN}}a(wD,"geoDistance");function v4(e,t,r,n){if(Se.isEmpty(e)||Se.isEmpty(t))return!1;if(Se.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return wD(e,t,n)<=r}catch(s){return ci.trace(s,e,t),!1}}a(v4,"geoNear");function B4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return I4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(B4,"geoContains");function H4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return w4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(H4,"geoEqual");function q4(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return!C4.default(e,t)}catch(r){return ci.trace(r,e,t),!1}}a(q4,"geoCrosses");function G4(e,t,r){if(Se.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Se.isEmpty(t))throw new Error("geo_type is required");if(Se.isEmpty(ID.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(ID.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Se.autoCastJSON(e)),L4[t](e,r)}a(G4,"geoConvert")});var Wf=T((ETe,DD)=>{var Xo=ND(),en=yD(),Ls=LD();DD.exports=e=>{e.aggr.mad=e.aggr.MAD=Xo.mad,e.aggr.mean=e.aggr.MEAN=Xo.mean,e.aggr.mode=e.aggr.MODE=Xo.mode,e.aggr.prod=e.aggr.PROD=Xo.prod,e.aggr.median=e.aggr.MEDIAN=Xo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=en.current_date,e.fn.current_time=e.fn.CURRENT_TIME=en.current_time,e.fn.extract=e.fn.EXTRACT=en.extract,e.fn.date=e.fn.DATE=en.date,e.fn.date_format=e.fn.DATE_FORMAT=en.date_format,e.fn.date_add=e.fn.DATE_ADD=en.date_add,e.fn.date_sub=e.fn.DATE_SUB=en.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=en.date_diff,e.fn.now=e.fn.NOW=en.now,e.fn.offset_utc=e.fn.OFFSET_UTC=en.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=en.get_server_time,e.fn.getdate=e.fn.GETDATE=en.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=en.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ls.geoNear}});var vD=T((hTe,UD)=>{"use strict";var Au=require("lodash"),Nr=require("alasql");Nr.options.cache=!1;var x4=Wf(),PD=require("clone"),Qf=require("recursive-iterator"),de=x(),Le=K(),Sc=Cn(),F4=C(),{hdb_errors:k4}=ie(),{getDatabases:MD}=(ge(),oe(Fe)),$4="IS NULL",ns="There was a problem performing this search. Please check the logs and try again.";x4(Nr);var zT=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.isEmpty(t))throw de.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 de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(ns)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(ns)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(ns)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(ns)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(ns)}}_getColumns(){let t=new Qf(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(PD(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=MD()[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)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Qf(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 Nr.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 Nr.yy.LogicValue({value:i}):n instanceof Nr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Nr.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Qf(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(F4.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 Nr.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.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(PD(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($4)>-1&&this.tables.forEach(s=>{let i={columnid:MD()[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 de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ns)}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 de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(ns)}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 de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(ns)}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 de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(ns)}}}_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 Nr.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 Nr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Nr.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 Nr.yy.FuncValue:new Nr.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 Nr.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.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,R=m.length;S<R;S++){let g=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Qf(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 de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(ns)}}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 de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.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();de.trace(`Final SQL: ${s}`),n=await Nr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.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 de.error(k4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.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 de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(ns)}}return Object.values(Object.values(this.data)[0].__merged_data)}};UD.exports=zT});var nr=T((mTe,BD)=>{"use strict";var V4=Ow();BD.exports={searchByConditions:K4,searchByHash:W4,searchByValue:Q4,search:j4};var JT=Cn(),{transformReq:XT}=K(),Y4=vD();async function K4(e){return XT(e),JT.searchByConditions(e)}a(K4,"searchByConditions");async function W4(e){XT(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of JT.searchByHash(e))r&&t.push(r);return t}a(W4,"searchByHash");async function Q4(e){XT(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of JT.searchByValue(e))t.push(r);return t}a(Q4,"searchByValue");function j4(e,t){try{let r=new V4(e);r.validate(),new Y4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(j4,"search")});var li=T((TTe,xD)=>{"use strict";var Ou=require("crypto"),z4=X(),{CONFIG_PARAMS:J4}=C(),qD="aes-256-cbc",X4=32,Z4=16,ZT=64,GD=32,e3=ZT+GD,HD=new Map;xD.exports={encrypt:t3,decrypt:r3,createNatsTableStreamName:n3};function t3(e){let t=Ou.randomBytes(X4),r=Ou.randomBytes(Z4),n=Ou.createCipheriv(qD,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(t3,"encrypt");function r3(e){let t=e.substr(0,ZT),r=e.substr(ZT,GD),n=e.substr(e3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Ou.createDecipheriv(qD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(r3,"decrypt");function n3(e,t){let r=z4.get(J4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=HD.get(r);return n||(n=Ou.createHash("md5").update(r).digest("hex"),HD.set(r,n)),n}a(n3,"createNatsTableStreamName")});var Ji=T((ATe,kD)=>{"use strict";var RTe=nr(),jf=x(),FD=wf(),s3=li(),zf=K(),{handleHDBError:Jf,hdb_errors:i3}=ie(),{HDB_ERROR_MSGS:Xf,HTTP_STATUS_CODES:eg}=i3,o3=X();o3.initSync();var{getDatabases:tg}=(ge(),oe(Fe));kD.exports={describeAll:a3,describeTable:Zf,describeSchema:c3};async function a3(e){try{let t=zf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=tg(),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 Zf({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 Zf({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){jf.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 jf.error("Got an error in describeAll"),jf.error(t),Jf(new Error,Xf.DESCRIBE_ALL_ERR)}}a(a3,"describeAll");async function Zf(e,t){zf.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=FD.describe_table(e);if(i)throw i;let c=tg()[r];if(!c)throw Jf(new Error,Xf.SCHEMA_NOT_FOUND(e.schema),eg.NOT_FOUND);let l=c[n];if(!l)throw Jf(new Error,Xf.TABLE_NOT_FOUND(e.schema,e.table),eg.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=s3.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){jf.warn(`unable to stat table dbi due to ${f}`)}return d}a(Zf,"descTable");async function c3(e){zf.transformReq(e);let t=FD.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=tg()[n];if(!i)throw Jf(new Error,Xf.SCHEMA_NOT_FOUND(e.schema),eg.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),zf.isEmpty(l)||l.describe){let _=await Zf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(c3,"describeSchema")});var Ln=T((yTe,WD)=>{var l3=ri(),{callbackify:VD,promisify:u3}=require("util"),{getDatabases:YD}=(ge(),oe(Fe));WD.exports={setSchemaDataToGlobal:$D,getTableSchema:_3,getSystemSchema:d3,setSchemaDataToGlobalAsync:u3($D)};var KD=Ji(),NTe=VD(KD.describeAll),bTe=VD(KD.describeTable);function $D(e){global.hdb_schema=YD(),e&&e()}a($D,"setSchemaDataToGlobal");function _3(e,t,r){let n=YD()[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(_3,"getTableSchema");function d3(){return l3}a(d3,"getSystemSchema")});var br=T((wTe,JD)=>{"use strict";var tE=nT(),zt=K(),f3=require("util"),rE=Cn(),E3=Ln(),QD=x(),{handleHDBError:Zo,hdb_errors:h3}=ie(),{HTTP_STATUS_CODES:ea}=h3,p3=f3.promisify(E3.getTableSchema),m3="updated",jD="inserted",zD="upserted";JD.exports={insert:T3,update:g3,upsert:R3,validation:S3,flush:A3};async function S3(e){if(zt.isEmpty(e))throw new Error("invalid update parameters defined.");if(zt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(zt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await p3(e.schema,e.table),r=tE(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&&zt.isEmptyOrZeroLength(c[n]))throw QD.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(!zt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw QD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!zt.isEmpty(c[n])&&c[n]!==""&&s.has(zt.autoCast(c[n]))&&(c.skip=!0),s.add(zt.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(S3,"validation");async function T3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=tE(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await rE.createRecords(e);return eE(jD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(T3,"insertData");async function g3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=tE(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await rE.updateRecords(e);return zt.isEmpty(n.existing_rows)?eE(m3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):eE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(g3,"updateData");async function R3(e){if(e.operation!=="upsert")throw Zo(new Error,"invalid operation, must be upsert",ea.INTERNAL_SERVER_ERROR);let t=tE(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await rE.upsertRecords(e);return eE(zD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(R3,"upsertData");function eE(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===jD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===zD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(eE,"returnObject");function A3(e){return zt.transformReq(e),rE.flush(e.schema,e.table)}a(A3,"flush")});var ng=T((LTe,eP)=>{var O3=rt(),rg=require("joi"),{hdb_table:N3,hdb_database:XD}=ys(),ZD={schema:XD,database:XD,table:N3},b3={date:rg.date().iso().required()},y3={timestamp:rg.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eP.exports=function(e,t){let r=t==="timestamp"?{...ZD,...y3}:{...ZD,...b3},n=rg.object(r);return O3.validateBySchema(e,n)}});var nP=T((DTe,rP)=>{var I3=rt(),sg=require("joi"),{hdb_table:w3,hdb_database:tP}=ys(),C3=sg.object({schema:tP,database:tP,table:w3,hash_values:sg.array().required(),ids:sg.array()});rP.exports=function(e){return I3.validateBySchema(e,C3)}});var cg=T((PTe,sP)=>{"use strict";var ig=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}},og=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}},ag=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};sP.exports={InsertObject:ig,NoSQLSeachObject:og,DeleteResponseObject:ag}});var na=T((UTe,lP)=>{"use strict";var oP=ng(),L3=nP(),ta=K(),iP=require("moment"),aP=x(),{promisify:D3,callbackify:P3}=require("util"),ra=C(),M3=Ln(),lg=D3(M3.getTableSchema),ug=Cn(),{DeleteResponseObject:U3}=cg(),{handleHDBError:Xi,hdb_errors:v3}=ie(),{HDB_ERROR_MSGS:nE,HTTP_STATUS_CODES:Zi}=v3,B3="records successfully deleted",H3=P3(cP);lP.exports={delete:H3,deleteRecord:cP,deleteFilesBefore:q3,deleteAuditLogsBefore:G3};async function q3(e){let t=oP(e,"date");if(t)throw Xi(t,t.message,Zi.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),!iP(e.date,iP.ISO_8601).isValid())throw Xi(new Error,nE.INVALID_DATE,Zi.BAD_REQUEST,ra.LOG_LEVELS.ERROR,nE.INVALID_DATE,!0);let n=ta.checkSchemaTableExist(e.schema,e.table);if(n)throw Xi(new Error,n,Zi.NOT_FOUND,ra.LOG_LEVELS.ERROR,n,!0);let s=await ug.deleteRecordsBefore(e);if(await lg(e.schema,e.table),aP.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(q3,"deleteFilesBefore");async function G3(e){let t=oP(e,"timestamp");if(t)throw Xi(t,t.message,Zi.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),isNaN(e.timestamp))throw Xi(new Error,nE.INVALID_VALUE("Timestamp"),Zi.BAD_REQUEST,ra.LOG_LEVELS.ERROR,nE.INVALID_VALUE("Timestamp"),!0);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw Xi(new Error,r,Zi.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);let n=await ug.deleteAuditLogsBefore(e);return await lg(e.schema,e.table),aP.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(G3,"deleteAuditLogsBefore");async function cP(e){e.ids&&(e.hash_values=e.ids);let t=L3(e);if(t)throw Xi(t,t.message,Zi.BAD_REQUEST,void 0,void 0,!0);ta.transformReq(e);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw Xi(new Error,r,Zi.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);try{await lg(e.schema,e.table);let n=await ug.deleteRecords(e);return ta.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${B3}`),n}catch(n){if(n.message===ra.SEARCH_NOT_FOUND_MESSAGE){let s=new U3;return s.message=ra.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(cP,"deleteRecord")});var sE=T((BTe,dP)=>{var x3=require("crypto"),uP=9;function F3(e){let t=$3(uP),r=_P(e+t);return t+r}a(F3,"createHash");function k3(e,t){let r=e?.substr(0,uP),n=r+_P(t+r);return e===n}a(k3,"validateHash");function $3(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($3,"generateSalt");function _P(e){return x3.createHash("md5").update(e).digest("hex")}a(_P,"md5");dP.exports={hash:F3,validate:k3}});var EP=T((qTe,fP)=>{var _g=rt(),sr={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 V3(e){return sr.password.presence=!0,sr.username.presence=!0,sr.role.presence=!0,sr.active.presence=!0,_g.validateObject(e,sr)}a(V3,"addUserValidation");function Y3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,_g.validateObject(e,sr)}a(Y3,"alterUserValidation");function K3(e){return sr.password.presence=!1,sr.username.presence=!0,sr.role.presence=!1,sr.active.presence=!1,_g.validateObject(e,sr)}a(K3,"dropUserValidation");fP.exports={addUserValidation:V3,alterUserValidation:Y3,dropUserValidation:K3}});var et=T((FTe,pP)=>{"use strict";var{platform:xTe}=require("os"),W3="nats-server.zip",dg="nats-server",Q3=process.platform==="win32"?`${dg}.exe`:dg,j3=/^[^\s.,*>]+$/,hP="__request__",z3=a(e=>`${e}.${hP}`,"REQUEST_SUBJECT"),J3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},X3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Z3={HUB:"hub.pid",LEAF:"leaf.pid"},eX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tX={SUCCESS:"success",ERROR:"error"},rX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},nX={TXN:"txn",MSGID:"msgid"},Tc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sX={[Tc.ERR]:1,[Tc.WRN]:2,[Tc.INF]:3,[Tc.DBG]:4,[Tc.TRC]:5},iX={debug:"-D",trace:"-DVV"};pP.exports={NATS_SERVER_ZIP:W3,NATS_SERVER_NAME:dg,NATS_BINARY_NAME:Q3,PID_FILES:Z3,NATS_CONFIG_FILES:X3,SERVER_SUFFIX:eX,NATS_TERM_CONSTRAINTS_RX:j3,REQUEST_SUFFIX:hP,UPDATE_REMOTE_RESPONSE_STATUSES:tX,CLUSTER_STATUS_STATUSES:rX,REQUEST_SUBJECT:z3,SUBJECT_PREFIXES:nX,MSG_HEADERS:J3,LOG_LEVELS:Tc,LOG_LEVEL_FLAGS:iX,LOG_LEVEL_HIERARCHY:sX}});var fg=T(($Te,mP)=>{"use strict";var oX={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 mV=Object.create;var wl=Object.defineProperty;var SV=Object.getOwnPropertyDescriptor;var TV=Object.getOwnPropertyNames;var gV=Object.getPrototypeOf,RV=Object.prototype.hasOwnProperty;var a=(e,t)=>wl(e,"name",{value:t,configurable:!0});var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)wl(e,r,{get:t[r],enumerable:!0})},JN=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of TV(t))!RV.call(e,s)&&s!==r&&wl(e,s,{get:()=>t[s],enumerable:!(n=SV(t,s))||n.enumerable});return e};var G=(e,t,r)=>(r=e!=null?mV(gV(e)):{},JN(t||!e||!e.__esModule?wl(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>JN(wl({},"__esModule",{value:!0}),e);var ey=g(($Ee,ZN)=>{var AV=require("fast-glob"),{statSync:Gm,existsSync:qm,readFileSync:OV,writeFileSync:bV}=require("fs"),{spawnSync:NV,spawn:yV,execFileSync:kEe}=require("child_process"),{isMainThread:IV}=require("worker_threads"),{join:Fi,relative:XN}=require("path"),{PACKAGE_ROOT:jn}=C(),{tmpdir:wV,platform:CV}=require("os");require("source-map-support").install();var LV=["resources","server","dataLayer","components"],Cl="ts-build",xm,DV=__filename.endsWith("tsBuild.js");if(DV){if(IV){let r;try{Gm(Fi(jn,Cl)),r=!0}catch{}if(r)for(let n of AV.sync(LV.map(s=>s+"/**/*.ts"),{cwd:jn})){let s=0,i=0;try{s=Gm(Fi(jn,n)).mtimeMs-5e3,i=Gm(Fi(jn,Cl,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."),xm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),xm=!0;if(xm){let n=Fi(jn,"node_modules/.bin/tsc");CV()==="win32"&&(n+=".cmd");let s=NV(n,{cwd:jn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Fi(wV(),"harperdb-tsc.pid"),o;if(qm(i))try{process.kill(+OV(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=yV(n,["--watch"],{cwd:jn,detached:!0,stdio:"ignore"});bV(i,c.pid.toString()),c.unref()}}}}let e=ZN.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(jn)&&!n[0].includes("node_modules")){let i=XN(jn,n[0]),o;i.startsWith(Cl)?o=Fi(jn,XN(Cl,i)):o=Fi(jn,Cl,i);let c=Fi(o,r),l=c+".js";if(qm(l))return l;if(c.includes(".")&&qm(c))return c}return t(r,n,s)}}});var C=g((KEe,Ey)=>{"use strict";var yn=require("path"),PV=require("fs"),{relative:VEe,join:YEe}=yn,{existsSync:MV}=PV;function UV(){let e=__dirname;for(;!MV(yn.join(e,"package.json"));){let t=yn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(UV,"getHDBPackageRoot");var ki=UV(),ty="js",Md=ty,vV="harperdb-config.yaml",BV="defaultConfig.yaml",HV="hdb",ry=`harperdb.${Md}`,ny=`customFunctionsServer.${Md}`,GV=`restartHdb.${Md}`,km="HarperDB",Pd="Custom Functions",Ud="Clustering Hub",vd="Clustering Leaf",qV="Clustering Ingest Service",xV="Clustering Reply Service",FV="foreground.pid",kV="hdb.pid",$V="data",VV={HDB:km,CLUSTERING_HUB:Ud,CLUSTERING_LEAF:vd,CLUSTERING_INGEST_SERVICE:qV,CLUSTERING_REPLY_SERVICE:xV,CUSTOM_FUNCTIONS:Pd,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"},YV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},KV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},WV={harperdb:km,"clustering hub":Ud,"clustering leaf":vd,"custom functions":Pd,custom_functions:Pd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},QV={CLUSTERING_HUB_PROC_DESCRIPTOR:Ud,CLUSTERING_LEAF_PROC_DESCRIPTOR:vd},Fm={HDB:yn.join(ki,"server/harperdb"),CUSTOM_FUNCTIONS:yn.join(ki,"server/customFunctions"),CLUSTERING_HUB:yn.join(ki,"server/nats"),CLUSTERING_LEAF:yn.join(ki,"server/nats")},jV={HDB:yn.join(Fm.HDB,ry),CUSTOM_FUNCTIONS:yn.join(Fm.CUSTOM_FUNCTIONS,ny)},zV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:yn.join(ki,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:yn.join(ki,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:yn.join(ki,"launchServiceScripts/launchUpdateNodes4-0-0.js")},JV={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},sy="support@harperdb.io",XV="customer-success@harperdb.io",iy=1,ZV=4141,oy="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",eY="https://www.harperdb.io/product",tY=`For support, please submit a request at ${oy} or contact ${sy}`,ay=`For license support, please contact ${XV}`,rY="None of the specified records were found.",nY="hash attribute not found",sY=`Your current license only supports ${iy} role. ${ay}`,iY="Your current license only supports 3 connections to a node.",oY="127.0.0.1",aY=1,cY=/^\.$/,lY=/^\.\.$/,uY="U+002E",_Y=/\//g,dY="U+002F",fY=/U\+002F/g,EY=/^U\+002E$/,hY=/^U\+002EU\+002E$/,pY="d",mY=999999,SY="*",TY="--max-old-space-size=",gY="system",RY="__hdb_hash",AY=".harperdb",OY=".hdb",bY="keys",NY="hdb_boot_properties.file",yY=".updateConfig.json",IY="SIGTSTP",wY=24,CY=6e4,LY=448,DY="blob",PY="trash",MY="database",UY="schema",vY="transactions",BY=".count",HY="id",GY="PROCESS_NAME",cy={SETTINGS_PATH_KEY:"settings_path"},ly=require("lodash"),qY={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"},xY={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},FY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},kY={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"},$Y={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"},Wr="hdb_internal:",VY={CREATE_SCHEMA:Wr+"create_schema",CREATE_TABLE:Wr+"create_table",CREATE_ATTRIBUTE:Wr+"create_attribute",ADD_USER:Wr+"add_user",ALTER_USER:Wr+"alter_user",DROP_USER:Wr+"drop_user",HDB_NODES:Wr+"hdb_nodes",HDB_USERS:Wr+"hdb_users",HDB_WORKERS:Wr+"hdb_workers",CATCHUP:Wr+"catchup",SCHEMA_CATCHUP:Wr+"schema_catchup",WORKER_ROOM:Wr+"cluster_workers"},YY={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"},KY="060493.ks",WY=".license",QY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},ee={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"},jY={CSV:".csv",JSON:".json"},zY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},JY={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ll={};Ll[ee.INSERT]=ee.INSERT;Ll[ee.UPDATE]=ee.UPDATE;Ll[ee.UPSERT]=ee.UPSERT;Ll[ee.DELETE]=ee.DELETE;var xe=Object.create(null);xe[ee.DESCRIBE_ALL]=ee.DESCRIBE_ALL;xe[ee.DESCRIBE_TABLE]=ee.DESCRIBE_TABLE;xe[ee.DESCRIBE_SCHEMA]=ee.DESCRIBE_SCHEMA;xe[ee.READ_LOG]=ee.READ_LOG;xe[ee.ADD_NODE]=ee.ADD_NODE;xe[ee.LIST_USERS]=ee.LIST_USERS;xe[ee.LIST_ROLES]=ee.LIST_ROLES;xe[ee.USER_INFO]=ee.USER_INFO;xe[ee.SQL]=ee.SQL;xe[ee.GET_JOB]=ee.GET_JOB;xe[ee.SEARCH_JOBS_BY_START_DATE]=ee.SEARCH_JOBS_BY_START_DATE;xe[ee.DELETE_FILES_BEFORE]=ee.DELETE_FILES_BEFORE;xe[ee.EXPORT_LOCAL]=ee.EXPORT_LOCAL;xe[ee.EXPORT_TO_S3]=ee.EXPORT_TO_S3;xe[ee.CLUSTER_STATUS]=ee.CLUSTER_STATUS;xe[ee.REMOVE_NODE]=ee.REMOVE_NODE;xe[ee.RESTART]=ee.RESTART;xe[ee.CUSTOM_FUNCTIONS_STATUS]=ee.CUSTOM_FUNCTIONS_STATUS;xe[ee.GET_CUSTOM_FUNCTIONS]=ee.GET_CUSTOM_FUNCTIONS;xe[ee.GET_CUSTOM_FUNCTION]=ee.GET_CUSTOM_FUNCTION;xe[ee.SET_CUSTOM_FUNCTION]=ee.SET_CUSTOM_FUNCTION;xe[ee.DROP_CUSTOM_FUNCTION]=ee.DROP_CUSTOM_FUNCTION;xe[ee.ADD_CUSTOM_FUNCTION_PROJECT]=ee.ADD_CUSTOM_FUNCTION_PROJECT;xe[ee.DROP_CUSTOM_FUNCTION_PROJECT]=ee.DROP_CUSTOM_FUNCTION_PROJECT;xe[ee.PACKAGE_CUSTOM_FUNCTION_PROJECT]=ee.PACKAGE_CUSTOM_FUNCTION_PROJECT;xe[ee.DEPLOY_CUSTOM_FUNCTION_PROJECT]=ee.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",COPYDB:"copy-db"},ZY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},uy={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"},e1=ly.invert(uy),t1={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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",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",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",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"},_y={settings_path:cy.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_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,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];_y[t.toLowerCase()]=t}var r1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},n1={csv_file_load:"csv_file_load",csv_data_load:ee.CSV_DATA_LOAD,csv_url_load:ee.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"},s1={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"},i1={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},o1={VERSION_DEFAULT:"2.2.0"},a1={DEVELOPMENT:8192,DEFAULT:512},c1={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"},l1={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"},u1={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},dy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},_1=Symbol("metadata"),d1="__clustering__",f1=Object.values(dy),E1=15984864e5,fy={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},h1=ly.invert(fy),p1={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"},m1=111,S1=`\r
3
+ `,T1={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},g1=["*","%"],R1="unauthorized_access",A1="func_val",O1={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},b1={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},N1={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",NATS_CONSUMER_UPDATE:"nats_consumer_update"},y1={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},I1={HTTP:"http"},w1={STOPPED:"stopped",ONLINE:"online"},C1="3.x.x",L1={SUCCESS:"success",FAILURE:"failure"},D1={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Ey.exports={LOCAL_HARPERDB_OPERATIONS:xe,HDB_SUPPORT_ADDRESS:sy,HDB_SUPPORT_URL:oy,HDB_PRICING_URL:eY,SUPPORT_HELP_MSG:tY,LICENSE_HELP_MSG:ay,HDB_PROC_NAME:ry,HDB_PROC_DESCRIPTOR:km,CLUSTERING_LEAF_PROC_DESCRIPTOR:vd,CLUSTERING_HUB_PROC_DESCRIPTOR:Ud,SYSTEM_SCHEMA_NAME:gY,HASH_FOLDER_NAME:RY,HDB_HOME_DIR_NAME:AY,UPDATE_FILE_NAME:yY,LICENSE_KEY_DIR_NAME:bY,BOOT_PROPS_FILE_NAME:NY,JOB_TYPE_ENUM:n1,JOB_STATUS_ENUM:QY,SYSTEM_TABLE_NAMES:kY,SYSTEM_TABLE_HASH_ATTRIBUTES:$Y,OPERATIONS_ENUM:ee,VALID_S3_FILE_TYPES:jY,S3_BUCKET_AUTH_KEYS:zY,VALID_SQL_OPS_ENUM:JY,GEO_CONVERSION_ENUM:ZY,HDB_SETTINGS_NAMES:uy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:e1,SERVICE_ACTIONS_ENUM:XY,CLUSTER_MESSAGE_TYPE_ENUM:s1,CLUSTER_CONNECTION_DIRECTION_ENUM:i1,CLUSTER_EVENTS_DEFS_ENUM:c1,PERIOD_REGEX:cY,DOUBLE_PERIOD_REGEX:lY,UNICODE_PERIOD:uY,FORWARD_SLASH_REGEX:_Y,UNICODE_FORWARD_SLASH:dY,ESCAPED_FORWARD_SLASH_REGEX:fY,ESCAPED_PERIOD_REGEX:EY,ESCAPED_DOUBLE_PERIOD_REGEX:hY,REG_KEY_FILE_NAME:KY,RESTART_TIMEOUT_MS:CY,HDB_FILE_PERMISSIONS:LY,DATABASES_DIR_NAME:MY,LEGACY_DATABASES_DIR_NAME:UY,TRANSACTIONS_DIR_NAME:vY,LIMIT_COUNT_NAME:BY,ID_ATTRIBUTE_STRING:HY,INSERT_MODULE_ENUM:xY,UPGRADE_JSON_FIELD_NAMES_ENUM:FY,RESTART_CODE:IY,RESTART_CODE_NUM:wY,CLUSTER_OPERATIONS:Ll,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:YY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Wr,INTERNAL_SC_CHANNELS:VY,CLUSTERING_MESSAGE_TYPES:p1,HDB_FILE_SUFFIX:OY,BLOB_FOLDER_NAME:DY,HDB_TRASH_DIR:PY,ORIGINATOR_SET_VALUE:m1,LICENSE_VALUES:o1,RAM_ALLOCATION_ENUM:a1,TIME_STAMP_NAMES_ENUM:dy,TIME_STAMP_NAMES:f1,PERMS_UPDATE_RELEASE_TIMESTAMP:E1,SEARCH_NOT_FOUND_MESSAGE:rY,SEARCH_ATTRIBUTE_NOT_FOUND:nY,LICENSE_ROLE_DENIED_RESPONSE:sY,LICENSE_MAX_CONNS_REACHED:iY,BASIC_LICENSE_MAX_NON_CU_ROLES:iy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:ZV,VALUE_SEARCH_COMPARATORS:fy,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:h1,LICENSE_FILE_NAME:WY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:l1,NEW_LINE:S1,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:aY,MOMENT_DAYS_TAG:pY,API_TURNOVER_SEC:mY,LOOPBACK:oY,CODE_EXTENSION:Md,WILDCARD_SEARCH_VALUE:SY,NODE_ERROR_CODES:u1,JAVASCRIPT_EXTENSION:ty,PERMS_CRUD_ENUM:T1,UNAUTHORIZED_PERMISSION_NAME:R1,SEARCH_WILDCARDS:g1,FUNC_VAL:A1,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:O1,JWT_ENUM:b1,CLUSTERING_FLAG:d1,ITC_EVENT_TYPES:N1,CUSTOM_FUNCTION_PROC_NAME:ny,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Pd,SERVICES:y1,THREAD_TYPES:I1,MEM_SETTING_KEY:TY,HDB_RESTART_SCRIPT:GV,PROCESS_DESCRIPTORS:VV,SERVICE_SERVERS:jV,SERVICE_SERVERS_CWD:Fm,PROCESS_DESCRIPTORS_VALIDATE:WV,LAUNCH_SERVICE_SCRIPTS:zV,LOG_LEVELS:KV,PROCESS_NAME_ENV_PROP:GY,LOG_NAMES:YV,PM2_PROCESS_STATUSES:w1,CONFIG_PARAM_MAP:_y,CONFIG_PARAMS:w,HDB_CONFIG_FILE:vV,HDB_DEFAULT_CONFIG_FILE:BV,ROLE_TYPES_ENUM:JV,BOOT_PROP_PARAMS:cy,INSTALL_PROMPTS:qY,HDB_ROOT_DIR_NAME:HV,CLUSTERING_PROCESSES:QV,FOREGROUND_PID_FILE:FV,PACKAGE_ROOT:ki,PRE_4_0_0_VERSION:C1,DATABASES_PARAM_CONFIG:r1,METADATA_PROPERTY:_1,AUTH_AUDIT_STATUS:L1,AUTH_AUDIT_TYPES:D1,HDB_PID_FILE:kV,DEFAULT_DATABASE_NAME:$V,LEGACY_CONFIG_PARAMS:t1};ey()});var Ho=g((QEe,my)=>{"use strict";var hy=require("minimist");my.exports=P1;function P1(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=py(process.env),n=py(hy(process.argv))):(r=process.env,n=hy(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(P1,"assignCMDENVVariables");function py(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(py,"objKeysToLowerCase")});var x=g((zEe,jm)=>{"use strict";var Go=require("fs-extra"),{workerData:M1,threadId:U1}=require("worker_threads"),ei=require("path"),gy=require("yaml"),Ry=require("properties-reader"),Pt=C(),Sy=Ho(),v1=require("os"),{PACKAGE_ROOT:Vm}=C(),{_assignPackageExport:B1}=require("../index"),Pl={};for(let e in console)Pl[e]||(Pl[e]=console[e]);var Tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ay={STDOUT:"stdOut",STDERR:"stdErr"},H1=ei.join(Vm,"logs"),G1=ei.join(Vm,"config/yaml/",Pt.HDB_DEFAULT_CONFIG_FILE),q1=1e4,Zs,bs,Sr,Bd,Hd,Ml,ec,Dl;Dl===void 0&&Oy();jm.exports={notify:yy,fatal:Iy,error:Ul,warn:Qm,info:Gd,debug:Wm,trace:Km,setLogLevel:K1,log_level:Sr,loggerWithTag:x1,suppressLogging:F1,initLogSettings:Oy,setupConsoleLogging:by,logCustomLevel:V1,closeLogFile:Ym,getLogFilePath:()=>Ml,OUTPUTS:Ay,AuthAuditLog:j1};B1("logger",jm.exports);function Oy(e=!1){try{if(Dl===void 0||e){Ym();let t=Y1(),r=Sy(["ROOTPATH"]);try{Dl=Ry(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Go.pathExistsSync(ei.join(r.ROOTPATH,Pt.HDB_CONFIG_FILE)))throw n}({level:Sr,config_log_path:Hd,to_file:Zs,to_stream:bs}=W1(r.ROOTPATH?ei.join(r.ROOTPATH,Pt.HDB_CONFIG_FILE):Dl.get("settings_path"))),Bd=Pt.LOG_NAMES.HDB,Ml=ei.join(Hd,Bd)}}catch(t){if(Dl=void 0,t.code===Pt.NODE_ERROR_CODES.ENOENT){let r=Sy(Object.keys(Pt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Pt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Pt.CONFIG_PARAMS.LOGGING_LEVEL){Sr=l;continue}if(c===Pt.CONFIG_PARAMS.LOGGING_STDSTREAMS){bs=l;continue}c===Pt.CONFIG_PARAMS.LOGGING_FILE&&(Zs=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=Q1();Zs=Zs===void 0?s:Zs,Zs=Ty(Zs),bs=bs===void 0?i:bs,bs=Ty(bs),Sr=Sr===void 0?n:Sr,Hd=H1,Bd=Pt.LOG_NAMES.INSTALL,Ml=ei.join(Hd,Bd);return}throw Ul("Error initializing log settings"),Ul(t),t}process.env.DEV_MODE&&(bs=!0),by()}a(Oy,"initLogSettings");var $m=!0;function by(){Za("error",Ul),Za("warn",Qm),Za("log",Gd),Za("info",Gd),Za("debug",Wm),Za("trace",Km)}a(by,"setupConsoleLogging");function Za(e,t){console[e]=function(...r){if($m&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Pl[e](...r)}}a(Za,"logConsole");function x1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(yy),fatal:r(Iy),error:r(Ul),warn:r(Qm),info:r(Gd),debug:r(Wm),trace:r(Km)};function r(n){return function(...s){return n(t,...s)}}}a(x1,"loggerWithTag");function F1(e){try{$m=!1,e()}finally{$m=!0}}a(F1,"suppressLogging");var k1=M1?.name?.replace(/ /g,"-")||"main";function ti(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||k1+"/"+U1);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(ti,"createLogRecord");function vl(e){Zs&&Ny(e),bs&&process.stdout.write(e)}a(vl,"logStdOut");function qd(e){Zs&&Ny(e),bs&&process.stderr.write(e)}a(qd,"logStdErr");function Ny(e){$1(),ec?Go.appendFileSync(ec,e):Pl.log(e)}a(Ny,"logToFile");function Ym(){try{Go.closeSync(ec)}catch{}ec=null}a(Ym,"closeLogFile");function $1(){if(!ec){try{if(!Ml)debugger;ec=Go.openSync(Ml,"a")}catch(e){Pl.error(e)}setTimeout(()=>{Ym()},q1).unref()}}a($1,"openLogFile");function Gd(...e){Tr[Sr]<=Tr.info&&vl(ti("info",e))}a(Gd,"info");function Km(...e){Tr[Sr]<=Tr.trace&&vl(ti("trace",e))}a(Km,"trace");function Ul(...e){Tr[Sr]<=Tr.error&&qd(ti("error",e))}a(Ul,"error");function Wm(...e){Tr[Sr]<=Tr.debug&&vl(ti("debug",e))}a(Wm,"debug");function yy(...e){Tr[Sr]<=Tr.notify&&vl(ti("notify",e))}a(yy,"notify");function Iy(...e){Tr[Sr]<=Tr.fatal&&qd(ti("fatal",e))}a(Iy,"fatal");function Qm(...e){Tr[Sr]<=Tr.warn&&qd(ti("warn",e))}a(Qm,"warn");function V1(e,t,...r){t===Ay.STDERR?qd(ti(e,r)):vl(ti(e,r))}a(V1,"logCustomLevel");function Y1(){let e;try{e=v1.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ei.join(e,Pt.HDB_HOME_DIR_NAME,Pt.BOOT_PROPS_FILE_NAME);return Go.existsSync(t)||(t=ei.join(Vm,"utility/hdb_boot_properties.file")),t}a(Y1,"getPropsFilePath");function K1(e){Sr=e}a(K1,"setLogLevel");function Ty(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ty,"autoCastBoolean");function W1(e){try{if(e.includes("config/settings.js")){let o=Ry(e);return{level:o.get(Pt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ei.dirname(o.get(Pt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Pt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Pt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=gy.parseDocument(Go.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===Pt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(W1,"getLogConfig");function Q1(){try{let e=gy.parseDocument(Go.readFileSync(G1,"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(Q1,"getDefaultConfig");function j1(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(j1,"AuthAuditLog")});var qo=g((XEe,z1)=>{z1.exports={name:"harperdb",version:"4.3.0-beta.13",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.7","nats-server":"2.10.11"},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:"3.0.0-beta.10",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.19.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"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var $i=g((ZEe,wy)=>{"use strict";wy.exports={version:J1,printVersion:X1};var xd=qo();function J1(){if(xd)return xd.version}a(J1,"version");function X1(){xd&&console.log(`HarperDB Version ${xd.version}`)}a(X1,"printVersion")});var Dy=g((the,Ly)=>{"use strict";var Cy=require("semver/functions/major"),Z1=qo(),zm=process.versions&&process.versions.node?process.versions.node:void 0;Ly.exports=eK;function eK(){let e=Z1.engines["minimum-node"];if(zm&&Cy(zm)<Cy(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${zm}. Please install a version of Node.js that is withing the defined range.`}}a(eK,"checkNodeVersion")});var xo={};Fe(xo,{server:()=>ot});var Py,ot,gr=Ae(()=>{Py=require("../index"),ot={};(0,Py._assignPackageExport)("server",ot)});var Jm=g((nhe,My)=>{"use strict";var tK=require("util"),rK=require("path"),nK=require("child_process"),sK=tK.promisify(nK.execFile),iK=1e3*1e3*10;My.exports={findPs:oK};async function oK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await sK("ps",["wwxo",`pid,${r}`],{maxBuffer:iK});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:rK.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(oK,"findPs")});var at=g((ihe,vy)=>{"use strict";var aK="__dbis__",cK="__txns__",lK="__environment_name__",uK="__dbi_defintion__",_K={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"},dK=["__createdtime__","__updatedtime__"],fK="\uFFFF",Uy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},EK=Object.values(Uy);vy.exports={AUDIT_STORE_NAME:cK,INTERNAL_DBIS_NAME:aK,DBI_DEFINITION_NAME:uK,SEARCH_TYPES:_K,TIMESTAMP_NAMES:dK,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:lK,TRANSACTIONS_DBI_NAMES_ENUM:Uy,TRANSACTIONS_DBIS:EK,OVERFLOW_MARKER:fK}});var Qr=g((ohe,Vy)=>{"use strict";var By=C(),Hy=at(),Gy={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},qy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),xy={500:qy("There was an error processing your request."),400:"Invalid request"},hK=xy[Gy.INTERNAL_SERVER_ERROR],pK={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.`},mK={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},SK={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"},TK={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 ${Hy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Hy.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"},gK={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"},Fy={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"},RK={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."},AK={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`},OK={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"},bK={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},NK={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`},ky={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.`},$y={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}`},yK={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."},IK={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},wK={...Fy,...SK,...pK,...RK,...AK,...OK,...bK,...NK,...gK,...ky,...$y,...yK,...IK,...mK};Vy.exports={CHECK_LOGS_WRAPPER:qy,HDB_ERROR_MSGS:wK,DEFAULT_ERROR_MSGS:xy,DEFAULT_ERROR_RESP:hK,HTTP_STATUS_CODES:Gy,LMDB_ERRORS_ENUM:TK,AUTHENTICATION_ERROR_MSGS:Fy,VALIDATION_ERROR_MSGS:ky,ITC_ERRORS:$y}});var ie=g((che,Wy)=>{"use strict";var tc=Qr(),CK=x(),LK=C(),Fd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Yy),this.statusCode=n||tc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(tc.DEFAULT_ERROR_MSGS[n]?tc.DEFAULT_ERROR_MSGS[n]:tc.DEFAULT_ERROR_MSGS[tc.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&&CK[s](i)}},Xm=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}},Zm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Yy(e,t,r,n=LK.LOG_LEVELS.ERROR,s=null,i=!1){if(Ky(e))return e;let o=new Fd(e,t,r,n,s);return i&&delete o.stack,o}a(Yy,"handleHDBError");function Ky(e){return e.__proto__.constructor.name===Fd.name}a(Ky,"isHDBError");Wy.exports={isHDBError:Ky,handleHDBError:Yy,ClientError:Xm,ServerError:Zm,hdb_errors:tc}});var ze=g((uhe,eI)=>{"use strict";var xl=C(),DK=K(),Rr=X(),Fl=require("path"),PK=require("minimist"),Qy=require("fs-extra"),jy=require("lodash");Rr.initSync();var{CONFIG_PARAMS:Vi,DATABASES_PARAM_CONFIG:Bl,SYSTEM_SCHEMA_NAME:kd}=xl,Hl,Gl,ql;function zy(){if(Hl!==void 0)return Hl;if(Rr.getHdbBasePath()!==void 0)return Hl=Rr.get(Vi.STORAGE_PATH)||Fl.join(Rr.getHdbBasePath(),xl.DATABASES_DIR_NAME),Hl}a(zy,"getBaseSchemaPath");function Jy(){if(Gl!==void 0)return Gl;if(Rr.getHdbBasePath()!==void 0)return Gl=Zy(kd),Gl}a(Jy,"getSystemSchemaPath");function Xy(){if(ql!==void 0)return ql;if(Rr.getHdbBasePath()!==void 0)return ql=Rr.get(xl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Fl.join(Rr.getHdbBasePath(),xl.TRANSACTIONS_DIR_NAME),ql}a(Xy,"getTransactionAuditStoreBasePath");function MK(e,t){let r=Rr.get(Vi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Fl.join(Xy(),e.toString())}a(MK,"getTransactionAuditStorePath");function Zy(e,t){e=e.toString(),t=t&&t.toString();let r=Rr.get(xl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Fl.join(zy(),e)}a(Zy,"getSchemaPath");function UK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,PK(process.argv));let n=r[Vi.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!DK.isObject(n))throw o;i=n}for(let o of i){let c=o[kd];if(!c)continue;let l=Rr.get(Vi.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Bl.PATH];if(_)return jy.set(l,[kd,Bl.TABLES,t,Bl.PATH],_),Rr.setProperty(Vi.DATABASES,l),_;let u=c?.[Bl.PATH];if(u)return jy.set(l,[kd,Bl.PATH],u),Rr.setProperty(Vi.DATABASES,l),u}}let s=r[Vi.STORAGE_PATH.toUpperCase()];if(s){if(!Qy.pathExistsSync(s))throw new Error(s+" does not exist");let i=Fl.join(s,e);return Qy.mkdirsSync(i),Rr.setProperty(Vi.STORAGE_PATH,s),i}return Jy()}a(UK,"initSystemSchemaPaths");function vK(){Hl=void 0,Gl=void 0,ql=void 0}a(vK,"resetPaths");eI.exports={getBaseSchemaPath:zy,getSystemSchemaPath:Jy,getTransactionAuditStorePath:MK,getTransactionAuditStoreBasePath:Xy,getSchemaPath:Zy,initSystemSchemaPaths:UK,resetPaths:vK}});var Ar=g((Ehe,iI)=>{"use strict";var BK=Qr().LMDB_ERRORS_ENUM,dhe=require("lmdb"),HK=at(),fhe=require("buffer").Buffer,{OVERFLOW_MARKER:tI,MAX_SEARCH_KEY_LENGTH:$d}=HK,rI=["number","string","symbol","boolean","bigint"];function GK(e){if(e=e?.primaryStore||e,!e)throw new Error(BK.ENV_REQUIRED)}a(GK,"validateEnv");function qK(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(qK,"stringifyData");function xK(e){return e instanceof Date?e.valueOf():e}a(xK,"convertKeyValueToWrite");function FK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(rI.includes(typeof e))return e.length>$d?[e.slice(0,$d)+tI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(rI.includes(typeof i))i.length>$d?r.push(i.slice(0,$d)+tI):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(FK,"getIndexedValues");var Vd=0,nI=0;function sI(){nI=Date.now()-performance.now()}a(sI,"adjustStartTime");sI();var kK=6e4;setInterval(sI,kK).unref();function $K(){let e=performance.now()+nI;return e>Vd?(Vd=e,e):(Vd+=488e-6,Vd)}a($K,"getNextMonotonicTime");iI.exports={validateEnv:GK,stringifyData:qK,convertKeyValueToWrite:xK,getNextMonotonicTime:$K,getIndexedValues:FK}});var oI,zn,eS,kl=Ae(()=>{oI=require("events"),zn=class extends oI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new eS;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)}},eS=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 uI={};Fe(uI,{HAS_EXPIRATION:()=>aS,LAST_TIMESTAMP_PLACEHOLDER:()=>Yl,LOCAL_TIMESTAMP:()=>VK,METADATA:()=>$l,NO_TIMESTAMP:()=>rS,PENDING_LOCAL_TIME:()=>cS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>oS,RecordEncoder:()=>iS,TIMESTAMP_ASSIGN_LAST:()=>KK,TIMESTAMP_ASSIGN_NEW:()=>cI,TIMESTAMP_ASSIGN_PREVIOUS:()=>lI,TIMESTAMP_PLACEHOLDER:()=>Yd,TIMESTAMP_RECORD_PREVIOUS:()=>nS,getUpdateRecord:()=>lS,handleLocalTimeForGets:()=>jd});function QK(){return Vl[0]=Vl[0]^64,YK.getFloat64(0)}function jd(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?.[$l];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?.[$l]>=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[$l];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(){this.timerTracked||(this.timerTracked=!0,Fo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Fo.length;l++){let _=Fo[l].deref();(!_||_.isDone||_.isCommitted)&&Fo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function lS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?rc=i?.localTime?nS|lI:rS:rc=l?i?.localTime?nS|16384:cI|16384:rS,u>0&&(c|=aS),Wd=c,sS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:rc>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let R=_?.user?.username;if(E&&(Kd=e.encoder.encode(E)),f&&i?.localTime){let T=i?.localTime,A=r.get(T);if(A){let P=Ft(A).previousLocalTime;return r.put(T,Qd(o,t,n,P,R,d,Kd),{ifVersion:m}),S}}r.put(Yl,Qd(o,t,n,i?.localTime?1:0,R,d,Kd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var aI,tS,Yd,Yl,oS,VK,$l,Vl,YK,rS,cI,KK,lI,nS,aS,cS,WK,Kd,rc,Wd,sS,iS,Fo,Kl=Ae(()=>{aI=require("msgpackr");Yi();tS=G(x()),Yd=new Uint8Array([1,1,1,1,4,64,0,0]),Yl=new Uint8Array([1,1,1,1,1,0,0,0]),oS=new Uint8Array([1,1,1,1,3,64,0,0]),VK=Symbol("local-timestamp"),$l=Symbol("metadata"),Vl=new Uint8Array(8),YK=new DataView(Vl.buffer,0,8),rS=0,cI=0,KK=1,lI=3,nS=4,aS=16,cS=1,rc=0,Wd=-1,sS=0,iS=class extends aI.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(rc||Wd>=0){let i=0,o=rc;o&&(i+=8,rc=0);let c=Wd,l=sS;c>=0&&(i+=2,Wd=-1,l&&(i+=8,sS=0));let _=WK=r.call(this,n,s|2048|i);Kd=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(Yd[4]=o,Yd[5]=o>>8,_.set(Yd,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(Vl,0,c),c+=8;else for(let d=0;d<8;d++)Vl[d]=t[c++];l=QK(),i=t[c]}let _;i<32&&(o=i,c+=2,o&aS&&(_=(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,[$l]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(QK,"getTimestamp");a(jd,"handleLocalTimeForGets");Fo=[];setInterval(()=>{for(let e=0;e<Fo.length;e++){let t=Fo[e].deref();!t||t.isDone||t.isCommitted?Fo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(tS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):tS.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(lS,"getUpdateRecord")});var RI={};Fe(RI,{AUDIT_STORE_OPTIONS:()=>Zd,createAuditEntry:()=>Qd,openAuditStore:()=>ef,readAuditEntry:()=>Ft,setAuditRetention:()=>zK,transactionKeyEncoder:()=>TI});function ef(e){let t=e.auditStore=e.openDB(pI.AUDIT_STORE_NAME,Zd);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=zd){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()-uS})){if((_[0]&15)===fS){let u=Ft(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=jK){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,uS/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,Xd.getWorkerIndex)()===(0,Xd.getWorkerCount)()-1&&s(zd),t}function zK(e,t=zd){uS=e,zd=t}function Qd(e,t,r,n,s,i,o){let c=gI[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?nc.setFloat64(0,n):In.set(oS),l=9),f(0),f(t),d(r),nc.setFloat64(l,e),l+=8,s?d(s):In[l++]=0,In[n?8:0]=c;let u=In.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,sc.writeKey)(E,In,l);let m=l-h-1;m>127?m>16383?(hS.error("Key or username was too large for audit entry",E),l=h+1,In[h]=0):(In.copyWithin(h+2,h+1,l),nc.setUint16(h,m|32768),l++):In[h]=m}function f(E){E<128?In[l++]=E:E<16384?(nc.setUint16(l,E|32768),l+=2):E<1056964608?(nc.setUint32(l,E|3221225472),l+=4):(In[l]=255,nc.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:gI[n&7],tableId:i,get recordId(){return hI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?hI(e,u,d):void 0},getValue(f,E,h){if(n&_S||n&dS&&!E)return f.decoder.decode(e.subarray(t.position));if(n&dS&&h)return pS(f.getEntry(this.recordId),h,f)}}}catch(t){return hS.error("Reading audit entry error",t,e),{}}}function hI(e,t,r){let n=e.subarray(t,r);return(0,sc.readKey)(n,0,r-t)}var sc,Jd,pI,mI,Xd,SI,hS,In,nc,TI,Zd,uS,jK,zd,_S,dS,_I,fS,dI,fI,EI,gI,ES,Yi=Ae(()=>{sc=require("ordered-binary"),Jd=G(X()),pI=G(at()),mI=G(C()),Xd=G(tt()),SI=G(K());Kl();hS=G(x());tf();(0,Jd.initSync)();In=Buffer.alloc(1024),nc=new DataView(In.buffer,In.byteOffset,1024),TI={writeKey(e,t,r){return e===Yl?(t.set(Yl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,sc.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,sc.readKey)(e,t,r)}},Zd={encoding:"binary",keyEncoder:TI},uS=(0,SI.convertToMS)((0,Jd.get)(mI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,jK=1e3,zd=1e4;a(ef,"openAuditStore");a(zK,"setAuditRetention");_S=16,dS=32,_I=1,fS=2,dI=3,fI=4,EI=5,gI={put:_I|_S,[_I]:"put",delete:fS,[fS]:"delete",message:dI|_S,[dI]:"message",invalidate:fI,[fI]:"invalidate",patch:EI|dS,[EI]:"patch"};a(Qd,"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(hI,"readKeySafely")});var mS={};Fe(mS,{add:()=>rf,applyReverse:()=>AI,getRecordAtTime:()=>pS,rebuildUpdateBefore:()=>nf});function rf(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function nf(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,rf(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function AI(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=JK[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=OI}}function pS(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":AI(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===OI&&(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 JK,OI,tf=Ae(()=>{Yi();a(rf,"add");rf.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};JK={add:rf};a(nf,"rebuildUpdateBefore");a(AI,"applyReverse");OI={};a(pS,"getRecordAtTime")});function jr(e){return e[Mt]||(e[Mt]=Object.create(null))}function lf(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[Ne])},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 wn.ClientError(`${c} must be a string, attempt to assign ${u}`);jr(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 wn.ClientError(`${c} must be a string, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be a number, attempt to assign ${u}`);jr(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 wn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);jr(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 wn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);jr(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 wn.ClientError(`${c} must be a number, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);jr(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 wn.ClientError(`${c} must be a Date, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);jr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){jr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new wn.ClientError(`${c} must be an object, attempt to assign ${u}`);jr(this)[c]=u},"set")}_={get(){let u=this[Mt];if(u&&c in u){let f=u[c];if(f?.__op__){let E=this[fe]?.[c];return f.update(E)}return f}let d=this[fe]?.[c];if(d&&typeof d=="object"){let f=NI(d,o);if(f)return u||(u=this[Mt]=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[Mt];return l?.[o]!==void 0?l[o]:this[fe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new wn.ClientError("Can not add a property to a sealed table schema");jr(this)[o]=c}),i("deleteProperty",function(o){jr(this)[o]=void 0}),i("toJSON",function(){let o=this[Mt],c;for(let _ in o){c||(c=Object.assign({},this[fe]));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[fe])),Object.assign(c,this)),c||this[fe]}),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 NI(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?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=s}},lf(r,t)),new r(e)):new sf(e);case Array:let n=new af(e.length);n[fe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=NI(o,t?.elements)),n[s]=o}return n;default:return e}}function uf(e){let t=e[Mt],r;for(let s in t){r||(r=Object.assign({},e[fe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=uf(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[fe])),Object.assign(r,e)),r||e[fe]}function $o(e,t=e[Mt]){let r;if(bI.call(e,fe)&&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=$o(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[fe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=mS[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=$o(s);r[n]=s}return r?Object.freeze(r):bI.call(e,fe)?e[fe]:e}function of(e){let t=e[fe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[ko]||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?.[fe]===s){if(of(i))return!0}else return!0}}else{let r=e[Mt];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[fe]===i){if(of(s))return!0}else return!0}else return!0}}return!1}var wn,Mt,sf,bI,ko,af,cf,_f=Ae(()=>{Jn();wn=G(ie());tf();Mt=Symbol("own-data");a(jr,"getChanges");a(lf,"assignTrackedAccessors");a(NI,"trackObject");sf=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[fe])throw new Error("Can not track an already tracked object, check for circular references");this[fe]=t}};lf(sf,{});a(uf,"collapseData");bI=Object.prototype.hasOwnProperty;a($o,"deepFreeze");a(of,"hasChanges");ko=Symbol.for("has-array-changes"),af=class extends Array{static{a(this,"TrackedArray")}[ko];constructor(t){super(t)}splice(...t){return this[ko]=!0,super.splice(...t)}push(...t){return this[ko]=!0,super.push(...t)}pop(){return this[ko]=!0,super.pop()}unshift(...t){return this[ko]=!0,super.unshift(...t)}shift(){return this[ko]=!0,super.shift()}};af.prototype.constructor=Array;cf=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});function rW(){tW=setInterval(function(){for(let e of SS)if(e.stale){let t=e[Ne]?.url;wI.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},eW).unref()}var TS,II,wI,XK,SS,ZK,Wl,yI,Vo,df,eW,tW,gS=Ae(()=>{TS=G(Ar()),II=G(ie()),wI=G(x());Jn();XK=100,SS=new Set,ZK=25e3,Vo=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=1;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===1)return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0),SS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),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()}checkOverloaded(){if(Wl&&performance.now()-yI>ZK)throw new II.ServerError("Outstanding write transactions have too long of queue, please try again later",503)}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){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,TS.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 R=S();E?E.push?E.push(R):E=[E,R]:E=R}}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?2:0;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 Wl||(Wl=s,yI=performance.now(),Wl.then(()=>{Wl=null})),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=0,this.writes=[]}},df=class extends Vo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,TS.getNextMonotonicTime)())}getReadTxn(){}},eW=3e4;a(rW,"startMonitoringTxns");rW()});function Ze(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&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 Vo;e.timestamp&&(n.timestamp=e.timestamp),n[Ne]=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 CI,Yo=Ae(()=>{CI=require("../index");Jn();gS();a(Ze,"transaction");(0,CI._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function OS(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?OS(d.conditions,d.operator,r,n,s,i,o,c):ac(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",A=u(h.conditions,!T,E);return T?(P,v)=>A.some(U=>U(P,v)):(P,v)=>A.every(U=>U(P,v))}let S=(h.attribute||h[0])===r.primaryKey,R=NS(h,r,i,c,S,E);return f&&m<d.length-1&&E&&(E=_W(r.primaryStore,h.estimated_count,E)),R}).filter(Boolean)}a(u,"mapConditionsToFilters")}function ac(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],A=ni(n.attributes,T);if(A.relationship){if(o.length<2)throw new zr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=A.definition?.tableClass||A.elements?.definition?.tableClass,v=new Map,U=ac({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,P,s,v);if(A.relationship.to){i[o[0]]=v;let F=!!ni(P.attributes,A.relationship.to)?.elements;U=aW(U,A,P.primaryStore,F,v)}if(A.relationship.from){let F=a(H=>ac({attribute:A.relationship.from,value:H},t,r,n,s,v),"searchEntry");A.elements?(i[o[0]]=v,U=cW(U,A,P.primaryStore,v,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new zr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(bS[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]=Ns.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 zr.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 zr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&E)throw new zr.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 zr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!m.indexNulls)throw new zr.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=NS(e),!S)throw new zr.ClientError(`Unknown search operator ${e.comparator}`)}let R={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let T=m.getRange(R).map(S?function({key:A,value:P}){return this.isSync?P&&S(P)?A:Ki.SKIP:new Promise((v,U)=>setImmediate(()=>{try{v(P&&S(P)?A:Ki.SKIP)}catch(F){U(F)}}))}:A=>A.value==null?Ki.SKIP:A);return T.hasEntries=!0,T}else return m?m.getRange(R).map(S?function({key:T,value:A}){return this.isSync?S({[o]:T})?A:Ki.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(S({[o]:T})?A:Ki.SKIP)}catch(U){v(U)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:A}){return this.isSync?A&&S(A)?T:Ki.SKIP:new Promise((P,v)=>setImmediate(()=>{try{P(A&&S(A)?T:Ki.SKIP)}catch(U){v(U)}}))})}function ni(e,t){if(Array.isArray(t))if(t.length>1){let r=ni(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ni(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 aW(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=Xn(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 cW(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 _=Xn(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(Xn(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}_.set(Xn(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 NS(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=ni(t.attributes,u),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[u],h=NS({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,R=a((T,A)=>{let P,v;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:m.from,value:F};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let U=S(T);return S.idFilter&&(R.idFilter=S.idFilter),U}v=m(T,r,A),P=v?.value}else P=T[u];return P?Array.isArray(P)?P.some(h):h(P,v):!1},"recordFilter");return R}}switch(l instanceof Date&&(l=l.getTime()),bS[o]||o){case RS.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,Ns.compareKeys)(u,l[0])>=0&&(0,Ns.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Ns.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Ns.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Ns.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Ns.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Ns.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new zr.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&&Ef(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(f=!1));let m=0,S=3;function R(T){let A=T[u],P;if(typeof A!="object"||!A||E?P=d(A):Array.isArray(A)?P=A.some(d):A instanceof Date&&(P=d(A.getTime())),f&&(S++,!P&&!R.idFilter&&++m/S*(i-S)>h)){let v=ac(e,r.transaction.getReadTxn(),!1,t).map(Xn),U=new Set(v);R.idFilter=F=>U.has(Xn(F)),R.idFilter.idSet=U}return P}return a(R,"recordFilter"),s&&(R.idFilter=d),R}a(_,"attributeComparator")}function Ef(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/ri(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=bS[n]||n,n===RS.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=ni(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Ef(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*ri(e.indices[i.relationship.from])/(ri(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=ri(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=iW*ri(e.primaryStore)+1:n==="between"?r.estimated_count=sW*ri(e.primaryStore)+1:n==="sort"?r.estimated_count=ri(e.primaryStore)+1:r.estimated_count=nW*ri(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function hf(e){if(e)if(Wi=e,ic.lastIndex=0,lW.test(e))try{let t=Ql(new oc,"");if(Or!==Wi.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 ${Or} in '${Wi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ql(e,t){let r=ic,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Wi);){Or=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=LI}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=jl(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=oW[d],l=AS[i]?LI:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=jl(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"&&DI(h,u),ff(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(jl(u)),s=void 0;break;case"(":ic.lastIndex=Or;let E=Ql(u?[]:new oc,")");switch(u){case"":ff(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=PI(E);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Wi[Or]===","?r.lastIndex=++Or: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");ic.lastIndex=Or,f=Ql([],"}"),f.name=u,e.push(f),Wi[Or]===","?r.lastIndex=++Or:o=!0;break;case"[":ic.lastIndex=Or,u?(f=Ql(new oc,"]"),f.name=u):f=Ql(e.conditions?new oc:[],"]"),e.conditions?(ff(e,_),e.conditions.push(f),s=null):e.push(f),Wi[Or]===","?r.lastIndex=++Or: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"&&DI(h,u),ff(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(jl(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?uW:ic,r.lastIndex=Or),Or===Wi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function ff(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 jl(e){return e.indexOf(".")>-1?e.split(".").map(jl):decodeURIComponent(e)}function LI(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 zr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function DI(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new zr.ClientError("wildcard can only be used at the end of a string")}function PI(e){let t=MI(e[0]);return e.length>1&&(t.next=PI(e.slice(1))),t}function MI(e){if(Array.isArray(e)){let t=MI(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 Xn(e){return Array.isArray(e)?e.join("\0"):e}function ri(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function _W(e,t,r){return t*r/ri(e)}var zr,RS,Ns,Ki,nW,sW,iW,oW,AS,bS,lW,ic,uW,Or,Wi,oc,pf=Ae(()=>{zr=G(ie()),RS=G(at()),Ns=require("ordered-binary"),Ki=require("lmdb"),nW=.3,sW=.1,iW=.05,oW={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},AS={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(OS,"executeConditions");a(ac,"searchByIndex");a(ni,"findAttribute");a(aW,"joinTo");a(cW,"joinFrom");bS={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(NS,"filterByType");a(Ef,"estimateCondition");lW=/[()[\]|!<>.]|(=\w*=)/,ic=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,uW=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(hf,"parseQuery");a(Ql,"parseBlock");a(ff,"assignOperator");a(jl,"decodeProperty");a(LI,"typedDecoding");a(DI,"wildcardDecoding");a(PI,"toSortObject");a(MI,"toSortEntry");oc=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(Xn,"flattenKey");a(ri,"estimatedEntryCount");a(_W,"intersectionEstimate")});var wS={};Fe(wS,{CONTEXT:()=>Ne,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Cn,RECORD_PROPERTY:()=>fe,Resource:()=>Jt,snake_case:()=>fW,transformForSelect:()=>Sf});function fW(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function UI(e,t){if(zl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(zl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new IS;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){zl=!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[Ne]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ne]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ne]||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 mf(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new mf(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function Xr(e,t){let r=new HI.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 yS(e,t,r){let n=e[fe];if(n){let s=e[Mt];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 Sf(e,t){let r=t?.propertyResolvers,n=t[Ne],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):yS(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(yS(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(yS(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]=Sf(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var vI,BI,HI,Ne,Ue,Cn,fe,dW,Jt,mf,zl,IS,Jn=Ae(()=>{vI=require("crypto");kl();BI=require("../index"),HI=G(ie());_f();Yo();pf();Ne=Symbol.for("context"),Ue=Symbol.for("primary-key"),Cn=Symbol("is-collection"),fe=Symbol("stored-record"),dW={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ne];this[Ne]=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 _=Sf(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[Cn]){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):Xr(t,"put")},{hasContent:!0,type:"update"});static patch=Jr(function(t,r,n,s){return t.patch?t.patch(s,r):Xr(t,"patch")},{hasContent:!0,type:"update"});static delete=Jr(function(t,r,n,s){return t.delete?t.delete(r):Xr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,vI.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):Xr(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):Xr(t,"delete")},{hasContent:!1,type:"update"});static post=Jr(function(t,r,n,s){return t[Ue]!=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):Xr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Jr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Xr(t,"subscribe")},{type:"read"});static publish=Jr(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Xr(t,"publish")},{hasContent:!0,type:"create"});static search=Jr(function(t,r,n,s){let i=t.search?t.search(r):Xr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Sf(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):Xr(t,"search")},{hasContent:!0,type:"read"});static copy=Jr(function(t,r,n,s){return t.copy?t.copy(s,r):Xr(t,"copy")},{type:"create"});static move=Jr(function(t,r,n,s){return t.move?t.move(s,r):Xr(t,"move")},{type:"delete"});post(t){if(this[Cn])return this.constructor.create(this[Ue],t,this[Ne]);Xr(this,"post")}static isCollection(t){return t?.[Cn]}static coerceId(t){return t}static parseQuery(t){return hf(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&&dW[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:UI(t,this),isCollection:zl}}let i=UI(t,this);return zl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ne],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(_=>_[Ue]===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[Ue],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[Cn]=!0),s}subscribe(t){return new zn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new zn}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[Ue]}getContext(){return this[Ne]}};Jt.prototype[Ne]=null;(0,BI._assignPackageExport)("Resource",Jt);a(fW,"snake_case");mf=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(UI,"pathToId");IS=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Jr,"transactional");a(Xr,"missingMethod");a(yS,"selectFromObject");a(Sf,"transformForSelect")});var GI={};Fe(GI,{Resources:()=>Tf,keyArrayToString:()=>cc,resetResources:()=>EW,resources:()=>Qi});function EW(){return Qi=new Tf}function cc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Tf,Qi,Jl=Ae(()=>{Yo();Tf=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(cc,"keyArrayToString")});function xI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;lc||((0,gf.onMessageByType)(qI,u=>{FI(u.path)}),lc=Object.create(null));let o=lc[s]||(lc[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=cc(t);let l=new LS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function FI(e,t){if(!lc)return;let r=lc[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=cc(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,CS.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,CS.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 kI(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,gf.broadcast)({type:qI,path:s}),FI(s,!0)})}}var CS,gf,qI,lc,epe,LS,$I=Ae(()=>{CS=G(x()),gf=G(tt());kl();Jl();Yi();qI="transaction",epe=Buffer.alloc(4096);a(xI,"addSubscription");LS=class extends zn{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(FI,"notifyFromTransactionData");a(kI,"listenToCommits")});var YI=g((npe,VI)=>{"use strict";var DS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};VI.exports=DS});var WI=g((ipe,KI)=>{"use strict";var PS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};KI.exports=PS});var Xl=g((cpe,jI)=>{"use strict";var QI=X(),hW=C(),{RecordEncoder:pW}=(Kl(),oe(uI)),ape=require("fs");QI.initSync();var mW=QI.get(hW.CONFIG_PARAMS.STORAGE_CACHING)!==!1,MS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=mW&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:pW})}};jI.exports=MS});var Zl=g((upe,zI)=>{"use strict";var Zr=X(),Ln=C();Zr.initSync();var Rf=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=Zr.get(Ln.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zr.get(Ln.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zr.get(Ln.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Zr.get(Ln.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Zr.get(Ln.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Zr.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Zr.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Zr.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Zr.get(Ln.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Zr.get(Ln.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Zr.get(Ln.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Zr.get(Ln.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};zI.exports=Rf;Rf.MAX_DBS=1e4});var Ve=g((dpe,ow)=>{"use strict";var vS=require("lmdb"),Zn=require("fs-extra"),en=require("path"),Af=Ar(),ZI=x(),br=Qr().LMDB_ERRORS_ENUM,Of=WI(),BS=Xl(),ew=Zl(),ji=at(),JI=C(),{table:SW,resetDatabases:TW}=(Te(),oe(ke)),XI=X(),es=ji.INTERNAL_DBIS_NAME,tw=ji.DBI_DEFINITION_NAME,gW="data.mdb",RW="lock.mdb",eu=".mdb",AW="-lock",US=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Dn(t,r),this.key_type=this.dbi[ji.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ji.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new vS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function bf(e,t){if(e===void 0)throw new Error(br.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(br.ENV_NAME_REQUIRED)}a(bf,"pathEnvNameValidation");async function HS(e,t,r=!0){try{await Zn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(br.INVALID_BASE_PATH):n}try{let n=en.join(e,t+eu);return await Zn.access(n,Zn.constants.R_OK|Zn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Zn.access(en.join(e,t,gW),Zn.constants.R_OK|Zn.constants.F_OK),en.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(br.INVALID_ENVIRONMENT)}else throw new Error(br.INVALID_ENVIRONMENT);throw n}}a(HS,"validateEnvironmentPath");function Nf(e,t){if(Af.validateEnv(e),t===void 0)throw new Error(br.DBI_NAME_REQUIRED)}a(Nf,"validateEnvDBIName");async function OW(e,t,r=!1,n=!1){bf(e,t);let s=en.basename(e);t=t.toString();let i=XI.get(JI.CONFIG_PARAMS.DATABASES);i||XI.setProperty(JI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await HS(e,t,n),rw(e,t,r)}catch(o){if(o.message===br.INVALID_ENVIRONMENT){let c=en.join(e,t);await Zn.mkdirp(n?c:e);let l=new ew(n?c:c+eu,!1),_=vS.open(l);_.dbis=Object.create(null);let u=new BS(!1);_.openDB(es,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=GS(e,t,r);return _[ji.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(OW,"createEnvironment");async function bW(e,t,r,n=!0){bf(e,t),t=t.toString();let s=en.join(e,t);return SW({table:t,database:en.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(bW,"copyEnvironment");async function rw(e,t,r=!1){bf(e,t),t=t.toString();let n=GS(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 HS(e,t),i=en.join(e,t+eu),o=s!=i,c=new ew(s,o),l=vS.open(c);l.dbis=Object.create(null);let _=sw(l);for(let u=0;u<_.length;u++)Dn(l,_[u]);return l[ji.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(rw,"openEnvironment");async function NW(e,t,r=!1){bf(e,t),t=t.toString();let n=en.join(e,t+eu),s=await HS(e,t);if(global.lmdb_map!==void 0){let i=GS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await nw(o),delete global.lmdb_map[i]}}await Zn.remove(s),await Zn.remove(s===n?s+AW:en.join(en.dirname(s),RW))}a(NW,"deleteEnvironment");async function nw(e){Af.validateEnv(e);let t=e[ji.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(nw,"closeEnvironment");function GS(e,t,r=!1){let s=`${en.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(GS,"getCachedEnvironmentName");function yW(e){Af.validateEnv(e);let t=Object.create(null),r=Dn(e,es);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==es)try{t[n]=Object.assign(new Of,s)}catch{ZI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(yW,"listDBIDefinitions");function sw(e){Af.validateEnv(e);let t=[],r=Dn(e,es);for(let{key:n}of r.getRange({start:!1}))n!==es&&t.push(n);return t}a(sw,"listDBIs");function IW(e,t){let n=Dn(e,es).getEntry(t),s=new Of;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{ZI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(IW,"getDBIDefinition");function iw(e,t,r,n=!r){if(Nf(e,t),t=t.toString(),t===es)throw new Error(br.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Dn(e,t)}catch(s){if(s.message===br.DBI_DOES_NOT_EXIST){let i=new BS(r,n===!0),o=e.openDB(t,i),c=new Of(r===!0,n);return o[tw]=c,Dn(e,es).putSync(t,c),e.dbis[t]=o,o}throw s}}a(iw,"createDBI");function Dn(e,t){if(Nf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==es?r=IW(e,t):r=new Of,r===void 0)throw new Error(br.DBI_DOES_NOT_EXIST);let n;try{let s=new BS(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(br.DBI_DOES_NOT_EXIST):s}return n[tw]=r,e.dbis[t]=n,n}a(Dn,"openDBI");function wW(e,t){Nf(e,t),t=t.toString();let r=Dn(e,t),n=r.getStats();return r[ji.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(wW,"statDBI");async function CW(e,t){try{let r=en.join(e,t+eu);return(await Zn.stat(r)).size}catch{throw new Error(br.INVALID_ENVIRONMENT)}}a(CW,"environmentDataSize");function LW(e,t){if(Nf(e,t),t=t.toString(),t===es)throw new Error(br.CANNOT_DROP_INTERNAL_DBIS_NAME);Dn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Dn(e,es).removeSync(t)}a(LW,"dropDBI");function DW(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Dn(e,i)}catch(o){if(o.message===br.DBI_DOES_NOT_EXIST)iw(e,i,i!==t,i===t),n=!0;else throw o}}n&&TW()}a(DW,"initializeDBIs");ow.exports={openDBI:Dn,openEnvironment:rw,createEnvironment:OW,listDBIs:sw,listDBIDefinitions:yW,createDBI:iw,dropDBI:LW,statDBI:wW,deleteEnvironment:NW,initializeDBIs:DW,TransactionCursor:US,environmentDataSize:CW,copyEnvironment:bW,closeEnvironment:nw}});var lw=g((Epe,cw)=>{"use strict";var qS=Ve(),PW=x(),aw=Qr().LMDB_ERRORS_ENUM;cw.exports=MW;async function MW(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 qS.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==aw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await qS.closeEnvironment(global.lmdb_map[n]),await qS.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==aw.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){PW.error(t)}}a(MW,"cleanLMDBMap")});var si=g((ppe,UW)=>{UW.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 Aw=g((Spe,Rw)=>{"use strict";var xS=require("recursive-iterator"),vW=require("alasql"),FS=require("clone"),uw=K(),{handleHDBError:_w,hdb_errors:BW}=ie(),{HDB_ERROR_MSGS:dw,HTTP_STATUS_CODES:fw}=BW,{getDatabases:HW}=(Te(),oe(ke)),GW=["DISTINCT_ARRAY"],Ew=Symbol("validateTables"),kS=Symbol("validateTable"),mpe=Symbol("getAllColumns"),hw=Symbol("validateAllColumns"),yf=Symbol("findColumn"),pw=Symbol("validateOrderBy"),tu=Symbol("validateSegment"),$S=Symbol("validateColumn"),mw=Symbol("setColumnsForTable"),Sw=Symbol("checkColumnsForAsterisk"),Tw=Symbol("validateGroupBy"),gw=Symbol("hasColumns"),VS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Ew](),this[Sw](),this[hw]()}[Ew](){if(this[gw]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[kS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[kS](t.table)})}}[gw](){let t=!1,r=new xS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[kS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=HW();if(!r[t.databaseid])throw _w(new Error,dw.SCHEMA_NOT_FOUND(t.databaseid),fw.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw _w(new Error,dw.TABLE_NOT_FOUND(t.databaseid,t.tableid),fw.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=FS(s);i.table=FS(t),this.attributes.push(i)})}[yf](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)}[Sw](){let t=new xS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[mw](r.tableid)}[mw](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new vW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[hw](){this[tu](this.statement.columns,!1),this[tu](this.statement.joins,!1),this[tu](this.statement.where,!1),this[Tw](this.statement.group,!1),this[tu](this.statement.order,!0)}[tu](t,r){if(!t)return;let n=new xS(t),s=[];for(let{node:i,path:o}of n)!uw.isEmpty(i)&&!uw.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[pw](i):s.push(this[$S](i)));return s}[Tw](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&GW.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=FS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[yf](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[yf](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`}[pw](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[$S](t)}[$S](t){let r=this[yf](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]}};Rw.exports=VS});var bw=g((gpe,Ow)=>{"use strict";var YS=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")}};Ow.exports=YS});var yw=g((Ape,Nw)=>{"use strict";var KS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Nw.exports=KS});var ww=g((bpe,Iw)=>{"use strict";var WS=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}};Iw.exports=WS});var Lw=g((ype,Cw)=>{"use strict";var QS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Cw.exports=QS});var Wo=g((Dpe,Mw)=>{"use strict";var qW=Ve(),xW=yw(),FW=ww(),kW=Lw(),ys=Ar(),ru=Qr().LMDB_ERRORS_ENUM,$W=at(),ii=C(),VW=K(),YW=require("uuid"),wpe=require("lmdb"),{handleHDBError:KW,hdb_errors:WW}=ie(),{OVERFLOW_MARKER:Cpe,MAX_SEARCH_KEY_LENGTH:Lpe}=$W,Dw=X();Dw.initSync();var If=Dw.get(ii.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),jS=ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ko=ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function QW(e,t,r,n,s=ys.getNextMonotonicTime()){ZS(e,t,r,n),zS(e,t,r);let i=new xW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Pw(_,!0,s);let u=jW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return JS(o,c,n,i,s)}a(QW,"insertRecords");function jW(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][ii.FUNC_VAL],n[o]=c)}let l=ys.getIndexedValues(c),_=e.dbis[o];if(l){If&&_.prefetch(l.map(u=>({key:u,value:s})),wf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}If&&e.dbis[t].prefetch([s],wf),e.dbis[t].put(s,n,n[Ko])})}a(jW,"insertRecord");function zW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(zW,"removeSkippedRecords");function Pw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Ko]))&&(e[Ko]=r||(r=ys.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[jS]))&&(e[jS]=r||ys.getNextMonotonicTime()):delete e[jS]}a(Pw,"setTimestamps");function zS(e,t,r){r.indexOf(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),qW.initializeDBIs(e,t,r)}a(zS,"initializeTransaction");async function JW(e,t,r,n,s=ys.getNextMonotonicTime()){ZS(e,t,r,n),zS(e,t,r);let i=new FW,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 JS(c,l,n,i,s,o)}a(JW,"updateRecords");async function XW(e,t,r,n,s=ys.getNextMonotonicTime()){try{ZS(e,t,r,n)}catch(l){throw KW(l,l.message,WW.HTTP_STATUS_CODES.BAD_REQUEST)}zS(e,t,r);let i=new kW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;VW.isEmpty(_[t])?(u=YW.v4(),_[t]=u):u=_[t];let d=XS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return JS(o,c,n,i,s)}a(XW,"upsertRecords");async function JS(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||ys.getNextMonotonicTime(),zW(r,i),n}a(JS,"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(Pw(r,!u,o),Number.isInteger(r[Ko])&&_[Ko]>r[Ko])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 R=_[h];if(typeof m=="function"){let A=m([[_]]);Array.isArray(A)&&(m=A[0][ii.FUNC_VAL],r[h]=m)}if(m===R)continue;let T=ys.getIndexedValues(R);if(T){If&&S.prefetch(T.map(A=>({key:A,value:n})),wf);for(let A=0,P=T.length;A<P;A++)S.remove(T[A],n)}if(T=ys.getIndexedValues(m),T){If&&S.prefetch(T.map(A=>({key:A,value:n})),wf);for(let A=0,P=T.length;A<P;A++)S.put(T[A],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Ko])},"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 ZW(e,t,r){if(ys.validateEnv(e),t===void 0)throw new Error(ru.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ru.WRITE_ATTRIBUTES_REQUIRED):new Error(ru.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ZW,"validateBasic");function ZS(e,t,r,n){if(ZW(e,t,r),!Array.isArray(n))throw n===void 0?new Error(ru.RECORDS_REQUIRED):new Error(ru.RECORDS_MUST_BE_ARRAY)}a(ZS,"validateWrite");function wf(){}a(wf,"noop");Mw.exports={insertRecords:QW,updateRecords:JW,upsertRecords:XW}});var ws=g((Mpe,Bw)=>{"use strict";var vw=K(),Uw=C(),uc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Is=require("joi"),zi={schema_format:{pattern:uc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},eQ=Is.alternatives(Is.string().min(1).max(zi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+zi.schema_format.message}),Is.number(),Is.array()).required(),tQ=Is.alternatives(Is.string().min(1).max(zi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+zi.schema_format.message}),Is.number()),rQ=Is.alternatives(Is.string().min(1).max(zi.schema_length.maximum).pattern(uc).messages({"string.pattern.base":"{:#label} "+zi.schema_format.message}),Is.number()).required();function nQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>zi.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(nQ,"checkValidTable");function sQ(e,t){return vw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(sQ,"validateSchemaExists");function iQ(e,t){let r=t.state.ancestors[0].schema;return vw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(iQ,"validateTableExists");function oQ(e,t){return e.toLowerCase()===Uw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Uw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(oQ,"validateSchemaName");Bw.exports={common_validators:zi,schema_regex:uc,hdb_schema_table:eQ,validateSchemaExists:sQ,validateTableExists:iQ,validateSchemaName:oQ,checkValidTable:nQ,hdb_database:tQ,hdb_table:rQ}});var rt=g((vpe,Hw)=>{"use strict";var Nr=require("validate.js");Nr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Nr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Nr.validators.type.checks={Object:function(e){return Nr.isObject(e)&&!Nr.isArray(e)},Array:Nr.isArray,Integer:Nr.isInteger,Number:Nr.isNumber,String:Nr.isString,Date:Nr.isDate,Boolean:function(e){return typeof e=="boolean"}};Nr.validators.hasValidFileExt=function(e,t){return Nr.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};Hw.exports={validateObject:aQ,validateObjectAsync:cQ,validateBySchema:lQ};function aQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Nr(e,t,{format:"flat"});return r?new Error(r):null}a(aQ,"validateObject");async function cQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Nr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(cQ,"validateObjectAsync");function lQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lQ,"validateBySchema")});var Cf=g((Hpe,Gw)=>{var{common_validators:Cs}=ws(),su=rt(),nu="is required",At={database:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},schema:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},table:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},hash_attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length}};function iu(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(iu,"makeAttributesStrings");function uQ(e){return e=iu(e),At.table.presence=!1,At.attribute.presence=!1,At.hash_attribute.presence=!1,su.validateObject(e,At)}a(uQ,"schema_object");function _Q(e){return e=iu(e),At.table.presence={message:nu},At.attribute.presence=!1,At.hash_attribute.presence=!1,su.validateObject(e,At)}a(_Q,"table_object");function dQ(e){return e=iu(e),At.table.presence={message:nu},At.attribute.presence=!1,su.validateObject(e,At)}a(dQ,"create_table_object");function fQ(e){return e=iu(e),At.table.presence={message:nu},At.attribute.presence={message:nu},At.hash_attribute.presence=!1,su.validateObject(e,At)}a(fQ,"attribute_object");function EQ(e){return e=iu(e),At.table.presence={message:nu},At.attribute.presence=!1,At.hash_attribute.presence=!1,su.validateObject(e,At)}a(EQ,"describe_table");function hQ(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(hQ,"validateTableResidence");Gw.exports={schema_object:uQ,create_table_object:dQ,table_object:_Q,attribute_object:fQ,describe_table:EQ,validateTableResidence:hQ}});var xw=g((qpe,qw)=>{"use strict";var pQ=require("uuid"),eT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||pQ.v4(),this.schema_table=`${this.schema}.${this.table}`}};qw.exports=eT});var Lf=g((Fpe,Fw)=>{"use strict";var mQ=xw(),tT=class extends mQ{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}};Fw.exports=tT});var $w=g(($pe,kw)=>{"use strict";kw.exports=TQ;var SQ="inserted";function TQ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===SQ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(TQ,"returnObject")});var Df=g((Ype,Qw)=>{"use strict";var gQ=C(),rT=Ve(),RQ=Wo(),{getSystemSchemaPath:AQ,getSchemaPath:OQ}=ze(),bQ=si(),NQ=Cf(),yQ=Lf(),IQ=$w(),{handleHDBError:Vw,hdb_errors:Kw}=ie(),Yw=K(),{HTTP_STATUS_CODES:wQ}=Kw,nT=bQ.hdb_attribute,Ww=[];for(let e=0;e<nT.attributes.length;e++)Ww.push(nT.attributes[e].attribute);var CQ="inserted";Qw.exports=LQ;async function LQ(e){let t=NQ.attribute_object(e);if(t)throw Vw(new Error,t.message,Kw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Yw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Vw(new Error,r,wQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Yw.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 yQ(e.schema,e.table,e.attribute,e.id);try{let i=await rT.openEnvironment(OQ(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}`);rT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await rT.openEnvironment(AQ(),gQ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await RQ.insertRecords(o,nT.hash_attribute,Ww,[s]);return IQ(CQ,c,{records:[s]},l)}catch(i){throw i}}a(LQ,"lmdbCreateAttribute")});var iT=g((Wpe,zw)=>{var{hdb_table:DQ,hdb_database:jw}=ws(),PQ=rt(),sT=require("joi"),MQ={undefined:"undefined",null:"null"},UQ=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||MQ[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"),vQ=sT.object({database:jw,schema:jw,table:DQ,records:sT.array().items(sT.object().custom(UQ)).required()});zw.exports=function(e){return PQ.validateBySchema(e,vQ)}});var ou=g((zpe,Xw)=>{"use strict";var oi=K(),Jw=x(),jpe=iT(),{getDatabases:BQ}=(Te(),oe(ke)),{ClientError:Qo}=ie();Xw.exports=HQ;function HQ(e){if(oi.isEmpty(e))throw new Qo("invalid update parameters defined.");if(oi.isEmptyOrZeroLength(e.schema))throw new Qo("invalid schema specified.");if(oi.isEmptyOrZeroLength(e.table))throw new Qo("invalid table specified.");if(!Array.isArray(e.records))throw new Qo("records must be an array");let t=BQ()[e.schema]?.[e.table];if(oi.isEmpty(t))throw new Qo(`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&&oi.isEmptyOrZeroLength(o[r]))throw Jw.error("a valid hash attribute must be provided with update record:",o),new Qo("a valid hash attribute must be provided with update record, check log for more info");if(!oi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Jw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Qo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!oi.isEmpty(o[r])&&o[r]!==""&&n.has(oi.autoCast(o[r]))&&(o.skip=!0),n.add(oi.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(HQ,"insertUpdateValidate")});var au=g((Xpe,Zw)=>{"use strict";var GQ=C().OPERATIONS_ENUM,oT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=GQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Zw.exports=oT});var cu=g((tme,tC)=>{"use strict";var eme=au(),Pf=C(),aT=K(),eC=x(),qQ=require("uuid"),{handleHDBError:Mf,hdb_errors:xQ}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:vf}=xQ;tC.exports=FQ;function FQ(e,t,r){for(let s=0;s<t.length;s++)kQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];$Q(i,r,e.operation)}}a(FQ,"processRows");function kQ(e){if(Buffer.byteLength(String(e))>Pf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Mf(new Error,Uf.ATTR_NAME_LENGTH_ERR(e),vf.BAD_REQUEST,void 0,void 0,!0);if(aT.isEmptyOrZeroLength(e)||aT.isEmpty(e.trim()))throw Mf(new Error,Uf.ATTR_NAME_NULLISH_ERR,vf.BAD_REQUEST,void 0,void 0,!0)}a(kQ,"validateAttribute");function $Q(e,t,r){if(!e.hasOwnProperty(t)||aT.isEmptyOrZeroLength(e[t])){if(r===Pf.OPERATIONS_ENUM.INSERT||r===Pf.OPERATIONS_ENUM.UPSERT){e[t]=qQ.v4();return}throw eC.error("Update transaction aborted due to record with no hash value:",e),Mf(new Error,Uf.RECORD_MISSING_HASH_ERR,vf.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Pf.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw eC.error(e),Mf(new Error,Uf.HASH_VAL_LENGTH_ERR,vf.BAD_REQUEST,void 0,void 0,!0)}a($Q,"validateHash")});var Bf=g((nme,nC)=>{"use strict";var rC=K(),VQ=C(),YQ=x(),KQ=Df(),WQ=Lf(),QQ=ai(),{SchemaEventMsg:jQ}=ts(),zQ="already exists in";nC.exports=JQ;async function JQ(e,t,r){if(rC.isEmptyOrZeroLength(r))return r;let n=[];rC.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 XQ(e,t.schema,t.name,i)})),s}a(JQ,"lmdbCheckForNewAttributes");async function XQ(e,t,r,n){let s=new WQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await ZQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(zQ))YQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(XQ,"createNewAttribute");async function ZQ(e){let t;return t=await KQ(e),QQ.signalSchemaChange(new jQ(process.pid,VQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(ZQ,"createAttribute")});var _c=g((ime,sC)=>{"use strict";var cT=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}};sC.exports=cT});var oC=g((ame,iC)=>{"use strict";var ej=_c(),tj=C().OPERATIONS_ENUM,lT=class extends ej{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(tj.INSERT,r,n,s,i),this.records=t}};iC.exports=lT});var cC=g((lme,aC)=>{"use strict";var rj=_c(),nj=C().OPERATIONS_ENUM,uT=class extends rj{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(nj.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};aC.exports=uT});var uC=g((_me,lC)=>{"use strict";var sj=_c(),ij=C().OPERATIONS_ENUM,_T=class extends sj{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(ij.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};lC.exports=_T});var dC=g((fme,_C)=>{"use strict";var oj=_c(),aj=C().OPERATIONS_ENUM,dT=class extends oj{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(aj.DELETE,n,s,t,i),this.original_records=r}};_C.exports=dT});var lu=g((pme,pC)=>{"use strict";var hme=require("path"),fC=Ve(),cj=oC(),lj=cC(),uj=uC(),_j=dC(),dc=at(),EC=K(),{CONFIG_PARAMS:dj}=C(),hC=X();hC.initSync();var Hf=C().OPERATIONS_ENUM,{getTransactionAuditStorePath:fj}=ze();pC.exports=Ej;async function Ej(e,t){if(hC.get(dj.LOGGING_AUDITLOG)===!1)return;let r=fj(e.schema,e.table),n=await fC.openEnvironment(r,e.table,!0),s=hj(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){fC.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(Ej,"writeTransaction");function hj(e,t){let r=EC.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Hf.INSERT)return new cj(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hf.UPDATE)return new lj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hf.UPSERT)return new uj(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hf.DELETE)return new _j(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(hj,"createTransactionObject")});var fT=g((Tme,mC)=>{"use strict";var pj=ou(),Sme=au(),uu=C(),mj=cu(),Sj=Wo().insertRecords,Tj=Ve(),gj=x(),Rj=Bf(),{getSchemaPath:Aj}=ze(),Oj=lu();mC.exports=bj;async function bj(e){try{let{schema_table:t,attributes:r}=pj(e);mj(e,r,t.hash_attribute),e.schema!==uu.SYSTEM_SCHEMA_NAME&&(r.includes(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Rj(e.hdb_auth_header,t,r),s=Aj(e.schema,e.table),i=await Tj.openEnvironment(s,e.table),o=await Sj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Oj(e,o)}catch(c){gj.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,"lmdbCreateRecords")});var gC=g((Rme,TC)=>{"use strict";var SC=C(),Nj=fT(),yj=au(),Ij=require("fs-extra"),{getSchemaPath:wj}=ze();TC.exports=Cj;async function Cj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new yj(SC.SYSTEM_SCHEMA_NAME,SC.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Nj(r),await Ij.mkdirp(wj(e.schema))}a(Cj,"lmdbCreateSchema")});var AC=g((Ome,RC)=>{"use strict";var ET=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}};RC.exports=ET});var yC=g((wme,NC)=>{"use strict";var OC=Ve(),hT=Ar(),pT=Qr().LMDB_ERRORS_ENUM,Lj=at(),bC=x(),Nme=K(),Dj=require("lmdb"),Pj=AC(),Mj=C(),{OVERFLOW_MARKER:yme,MAX_SEARCH_KEY_LENGTH:Ime}=Lj,Uj=Mj.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function vj(e,t,r,n){if(hT.validateEnv(e),t===void 0)throw new Error(pT.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(pT.IDS_REQUIRED):new Error(pT.IDS_MUST_BE_ITERABLE);try{let s=OC.listDBIs(e);OC.initializeDBIs(e,t,s);let i=new Pj,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[Uj]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,Dj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let R=s[S];if(!h.hasOwnProperty(R)||R===t)continue;let T=e.dbis[R],A=h[R];if(A!=null)try{let P=hT.getIndexedValues(A);if(P)for(let v=0,U=P.length;v<U;v++)T.remove(P[v],o)}catch{bC.warn(`cannot delete from attribute: ${R}, ${A}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){bC.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=hT.getNextMonotonicTime(),i}catch(s){throw s}}a(vj,"deleteRecords");NC.exports={deleteRecords:vj}});var _u=g((Lme,wC)=>{"use strict";var fc=K(),Bj=yC(),Hj=Ve(),{getSchemaPath:Gj}=ze(),qj=lu(),xj=x();wC.exports=Fj;async function Fj(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 IC([],[]);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=Gj(e.schema,e.table),i=await Hj.openEnvironment(s,e.table),o=await Bj.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await qj(e,o)}catch(c){xj.error(`unable to write transaction due to ${c.message}`)}return IC(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Fj,"lmdbDeleteRecords");function IC(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(IC,"createDeleteResponse")});var ST=g((Mme,CC)=>{"use strict";var kj=C(),Pme=Ar();function mT(e,t){let r=Object.create(null);if(t.length===1&&kj.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(mT,"parseRow");function $j(e,t,r,n){let s=mT(r,e);n.push(s)}a($j,"searchAll");function Vj(e,t,r,n){let s=mT(r,e);n[t]=s}a(Vj,"searchAllToMap");function Yj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Yj,"iterateDBI");function jo(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(jo,"pushResults");function Kj(e,t,r,n,s,i){t.toString().endsWith(e)&&jo(t,r,n,s,i)}a(Kj,"endsWith");function Wj(e,t,r,n,s,i){t.toString().includes(e)&&jo(t,r,n,s,i)}a(Wj,"contains");function Qj(e,t,r,n,s,i){t>e&&jo(t,r,n,s,i)}a(Qj,"greaterThanCompare");function jj(e,t,r,n,s,i){t>=e&&jo(t,r,n,s,i)}a(jj,"greaterThanEqualCompare");function zj(e,t,r,n,s,i){t<e&&jo(t,r,n,s,i)}a(zj,"lessThanCompare");function Jj(e,t,r,n,s,i){t<=e&&jo(t,r,n,s,i)}a(Jj,"lessThanEqualCompare");CC.exports={parseRow:mT,searchAll:$j,searchAllToMap:Vj,iterateDBI:Yj,endsWith:Kj,contains:Wj,greaterThanCompare:Qj,greaterThanEqualCompare:jj,lessThanCompare:zj,lessThanEqualCompare:Jj,pushResults:jo}});var Ec=g((Gme,BC)=>{"use strict";var Ji=Ve(),vme=x(),tn=Ar(),Gf=at(),ft=Qr().LMDB_ERRORS_ENUM,Bme=K(),Xj=C(),qf=ST(),{parseRow:Zj}=qf,Hme=require("lmdb"),{OVERFLOW_MARKER:LC,MAX_SEARCH_KEY_LENGTH:ez}=Gf;function DC(e,t,r,n=!1,s=void 0,i=void 0){return zo(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(DC,"iterateFullIndex");function du(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return zo(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(A=>({value:A}))):d.getRange(T)})}a(du,"iterateRangeBetween");function zo(e,t,r,n){let s=e.database||e,i=Ji.openDBI(s,r);i[Gf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ji.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(zo,"setupTransaction");function PC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(LC)){if(!s)if(r)s=Ji.openDBI(e,r);else{let l=Ji.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=Ji.openDBI(e,l[_]),!s[Gf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(PC,"getOverflowCheck");function tz(e,t,r,n=!1,s=void 0,i=void 0){if(tn.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return zo(e,t,t,(o,c,l)=>(xf(r),r=fu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>Zj(_.value,r))))}a(tz,"searchAll");function rz(e,t,r,n=!1,s=void 0,i=void 0){if(tn.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);xf(r),r=fu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of DC(e,t,t,n,s,i))o.set(c,qf.parseRow(l,r));return o}a(rz,"searchAllToMap");function nz(e,t,r=!1,n=void 0,s=void 0){if(tn.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=DC(e,void 0,t,r,n,s),c=o.transaction,l=PC(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(nz,"iterateDBI");function sz(e,t){if(tn.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);return Ji.statDBI(e,t).entryCount}a(sz,"countAll");function iz(e,t,r,n,s=!1,i=void 0,o=void 0){return Xi(e,r,n),zo(e,t,r,(c,l,_,u)=>(n=tn.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(iz,"equals");function oz(e,t,r){return Xi(e,t,r),Ji.openDBI(e,t).getValuesCount(r)}a(oz,"count");function az(e,t,r,n,s=!1,i=void 0,o=void 0){return Xi(e,r,n),zo(e,null,r,(c,l)=>{n=tn.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(az,"startsWith");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return MC(e,t,r,n,s,i,o,!0)}a(cz,"endsWith");function MC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Xi(e,r,n),zo(e,null,r,(l,_,u,d)=>{let f=PC(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(LC)?_.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))?_[Gf.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(MC,"contains");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){Xi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),du(e,t,r,n,l,s,i,o,!0,!1)}a(lz,"greaterThan");function uz(e,t,r,n,s=!1,i=void 0,o=void 0){Xi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),du(e,t,r,n,l,s,i,o,!1,!1)}a(uz,"greaterThanEqual");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){Xi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),du(e,t,r,l,n,s,i,o,!1,!0)}a(_z,"lessThan");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){Xi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),du(e,t,r,l,n,s,i,o,!1,!1)}a(dz,"lessThanEqual");function fz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(tn.validateEnv(e),r===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ft.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ft.END_VALUE_REQUIRED);if(n=tn.convertKeyValueToWrite(n),s=tn.convertKeyValueToWrite(s),n>s)throw new Error(ft.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return du(e,t,r,n,s,i,o,c)}a(fz,"between");function Ez(e,t,r,n){tn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(xf(r),r=fu(s,r),n===void 0)throw new Error(ft.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=qf.parseRow(c,r)),o}a(Ez,"searchByHash");function hz(e,t,r){tn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(hz,"checkHashExists");function pz(e,t,r,n,s=[]){return vC(e,t,r,n,s),UC(e,t,r,n,s).map(i=>i[1])}a(pz,"batchSearchByHash");function mz(e,t,r,n,s=[]){vC(e,t,r,n,s);let i=new Map;for(let[o,c]of UC(e,t,r,n,s))i.set(o,c);return i}a(mz,"batchSearchByHashToMap");function UC(e,t,r,n,s=[]){return zo(e,t,t,(i,o,c)=>{r=fu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,qf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(UC,"batchHashSearch");function vC(e,t,r,n,s){if(tn.validateEnv(e),t===void 0)throw new Error(ft.HASH_ATTRIBUTE_REQUIRED);if(xf(r),n==null)throw new Error(ft.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ft.IDS_MUST_BE_ITERABLE)}a(vC,"initializeBatchSearchByHash");function xf(e){if(!Array.isArray(e))throw e===void 0?new Error(ft.FETCH_ATTRIBUTES_REQUIRED):new Error(ft.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(xf,"validateFetchAttributes");function Xi(e,t,r){if(tn.validateEnv(e),t===void 0)throw new Error(ft.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ft.SEARCH_VALUE_REQUIRED);if(r?.length>ez)throw new Error(ft.SEARCH_VALUE_TOO_LARGE)}a(Xi,"validateComparisonFunctions");function fu(e,t){return t.length===1&&Xj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ji.listDBIs(e)),t}a(fu,"setGetWholeRowAttributes");BC.exports={searchAll:tz,searchAllToMap:rz,count:oz,countAll:sz,equals:iz,startsWith:az,endsWith:cz,contains:MC,searchByHash:Ez,setGetWholeRowAttributes:fu,batchSearchByHash:pz,batchSearchByHashToMap:mz,checkHashExists:hz,iterateDBI:nz,greaterThan:lz,greaterThanEqual:uz,lessThan:_z,lessThanEqual:dz,between:fz}});var hc=g((xme,FC)=>{var HC=require("lodash"),GC=rt(),pe=require("joi"),Sz=K(),{hdb_schema_table:Eu,checkValidTable:qC,hdb_table:xC,hdb_database:Ff}=ws(),{handleHDBError:Tz,hdb_errors:gz}=ie(),{getDatabases:Rz}=(Te(),oe(ke)),{HTTP_STATUS_CODES:Az}=gz,Oz=pe.object({database:Ff,schema:Ff,table:xC,search_attribute:Eu,search_value:pe.any().required(),get_attributes:pe.array().min(1).items(pe.alternatives(Eu,pe.object())).optional(),desc:pe.bool(),limit:pe.number().integer().min(1),offset:pe.number().integer().min(0)}),bz=pe.object({database:Ff,schema:Ff,table:xC,operator:pe.string().valid("and","or").default("and").lowercase(),offset:pe.number().integer().min(0),limit:pe.number().integer().min(1),get_attributes:pe.array().min(1).items(pe.alternatives(Eu,pe.object())).optional(),sort:pe.object({attribute:pe.alternatives(Eu,pe.array().min(1)),descending:pe.bool().optional()}).optional(),conditions:pe.array().min(1).items(pe.alternatives(pe.object({operator:pe.string().valid("and","or").default("and").lowercase(),conditions:pe.array()}),pe.object({search_attribute:pe.alternatives(Eu,pe.array().min(1)),search_type:pe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:pe.when("search_type",{switch:[{is:"equals",then:pe.any()},{is:"between",then:pe.array().items(pe.alternatives([pe.string(),pe.number()])).length(2)}],otherwise:pe.alternatives(pe.string(),pe.number())}).required()}))).required()});FC.exports=function(e,t){let r=null;switch(t){case"value":r=GC.validateBySchema(e,Oz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(qC("database",e.schema)),i(qC("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=GC.validateBySchema(e,bz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Sz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Tz(new Error,s,Az.NOT_FOUND);let o=Rz()[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 _=HC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!HC.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 TT=g((kme,kC)=>{"use strict";var Nz=Ve(),yz=hc(),{getSchemaPath:Iz}=ze();kC.exports=wz;function wz(e){let t=yz(e,"hashes");if(t)throw t;let r=Iz(e.schema,e.table);return Nz.openEnvironment(r,e.table)}a(wz,"initialize")});var gT=g((Vme,$C)=>{"use strict";var Cz=Ec(),Lz=TT();$C.exports=Dz;async function Dz(e){let t=await Lz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Cz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Dz,"lmdbGetDataByHash")});var pc=g((Kme,VC)=>{"use strict";var RT=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};VC.exports=RT});var KC=g((jme,YC)=>{"use strict";var Qme=pc(),Pz=Ec(),Mz=TT();YC.exports=Uz;async function Uz(e){let t=await Mz(e),r=global.hdb_schema[e.schema][e.table];return Pz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Uz,"lmdbSearchByHash")});var rs=g((Jme,WC)=>{"use strict";var AT=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}};WC.exports=AT});var kf=g((Zme,ZC)=>{"use strict";var sr=Ec(),vz=Ve(),Bz=K(),me=at(),Jo=C(),Hz=si(),QC=Qr().LMDB_ERRORS_ENUM,{getSchemaPath:Gz}=ze(),ci=Jo.SEARCH_WILDCARDS;async function qz(e,t,r){let n;e.schema===Jo.SYSTEM_SCHEMA_NAME?n=Hz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=XC(e,n.hash_attribute,r,t);return zC(e,s,n.hash_attribute,r)}a(qz,"prepSearch");async function zC(e,t,r,n){let s=Gz(e.schema,e.table),i=await vz.openEnvironment(s,e.table),o=JC(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(xz(e,r)===!1){let u=e.search_attribute;if(u===r)return n?jC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?jC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?sr.batchSearchByHashToMap(c,r,e.get_attributes,_):sr.batchSearchByHash(c,r,e.get_attributes,_)}a(zC,"executeSearch");function JC(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 me.SEARCH_TYPES.EQUALS:s=sr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.CONTAINS:s=sr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=sr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=sr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return sr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return sr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return sr.searchAll(e,n,t.get_attributes,o,c,l);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return sr.searchAllToMap(e,n,t.get_attributes,o,c,l);case me.SEARCH_TYPES.BETWEEN:s=sr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=sr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=sr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=sr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=sr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(JC,"searchByType");function jC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(jC,"createMapFromIterable");function xz(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(xz,"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),ci.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ci[0])<0&&s.indexOf(ci[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(ci.indexOf(i)>=0&&ci.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(ci.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(ci.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(ci[0])||s.includes(ci[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(QC.UNKNOWN_SEARCH_TYPE)}else switch(n){case Jo.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case Jo.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case Jo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case Jo.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case Jo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QC.UNKNOWN_SEARCH_TYPE)}}a(XC,"createSearchTypeFromSearchObject");ZC.exports={executeSearch:zC,createSearchTypeFromSearchObject:XC,prepSearch:qz,searchByType:JC}});var tL=g((rSe,eL)=>{"use strict";var tSe=rs(),Fz=hc(),kz=K(),$z=C(),Vz=kf();eL.exports=Yz;function Yz(e,t){if(!kz.isEmpty(t)&&$z.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Fz(e,"value");if(n)throw n;return Vz.prepSearch(e,t,!0)}a(Yz,"lmdbGetDataByValue")});var hu=g((iSe,rL)=>{"use strict";var sSe=rs(),Kz=hc(),Wz=K(),Qz=C(),jz=kf();rL.exports=zz;async function zz(e,t){if(!Wz.isEmpty(t)&&Qz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kz(e,"value");if(n)throw n;return jz.prepSearch(e,t,!1)}a(zz,"lmdbSearchByValue")});var sL=g((cSe,nL)=>{"use strict";var aSe=at(),OT=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}},bT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},NT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};nL.exports={SearchByConditionsObject:OT,SearchCondition:bT,SortAttribute:NT}});var lL=g((dSe,cL)=>{"use strict";var uSe=sL().SearchByConditionsObject,Jz=rs(),Xz=hc(),yT=Ec(),$f=at(),{Resource:_Se}=(Jn(),oe(wS)),aL=kf(),Zz=ST(),eJ=require("lodash"),{getSchemaPath:tJ}=ze(),iL=Ve(),{handleHDBError:rJ,hdb_errors:nJ}=ie(),{HTTP_STATUS_CODES:sJ}=nJ,iJ=1e8;cL.exports=oJ;async function oJ(e){let t=Xz(e,"conditions");if(t)throw rJ(t,t.message,sJ.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=tJ(e.schema,e.table),n=await iL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)iL.openDBI(n,_.search_attribute);let i=eJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===$f.SEARCH_TYPES.EQUALS?_.estimated_count=yT.count(n,_.search_attribute,_.search_value):u===$f.SEARCH_TYPES.CONTAINS||u===$f.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=iJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await oL(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(aL.filterByType),d=u.length,f=yT.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=>Zz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await oL(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=yT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(oJ,"lmdbSearchByConditions");async function oL(e,t,r,n){let s=new Jz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===$f.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,aL.searchByType(e,s,i,n).map(o=>o.value)}a(oL,"executeConditionSearch")});var pu=g((ESe,uL)=>{"use strict";var aJ=C().OPERATIONS_ENUM,IT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=aJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};uL.exports=IT});var wT=g((pSe,SL)=>{"use strict";var EL=rs(),hL=pu(),pL=hu(),mL=_u(),yr=C(),_L=K(),dL=Ve(),{getTransactionAuditStorePath:cJ,getSchemaPath:lJ}=ze(),fL=x();SL.exports=uJ;async function uJ(e){try{if(_L.isEmpty(global.hdb_schema[e.schema])||_L.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await _J(e),await dJ(e);let t=lJ(e.schema,e.table);try{await dL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")fL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=cJ(e.schema,e.table);await dL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")fL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(uJ,"lmdbDropTable");async function _J(e){let t=new EL(yr.SYSTEM_SCHEMA_NAME,yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await pL(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 hL(yr.SYSTEM_SCHEMA_NAME,yr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await mL(s)}a(_J,"deleteAttributesFromSystem");async function dJ(e){let t=new EL(yr.SYSTEM_SCHEMA_NAME,yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,yr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[yr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,yr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,yr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await pL(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 hL(yr.SYSTEM_SCHEMA_NAME,yr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await mL(s)}catch(i){throw i}}a(dJ,"dropTableFromSystem")});var gL=g((SSe,TL)=>{"use strict";var fJ=require("fs-extra"),EJ=rs(),hJ=pc(),pJ=pu(),mJ=wT(),SJ=_u(),TJ=gT(),gJ=hu(),li=C(),{getSchemaPath:RJ}=ze(),{handleHDBError:AJ,hdb_errors:OJ}=ie(),{HDB_ERROR_MSGS:bJ,HTTP_STATUS_CODES:NJ}=OJ;TL.exports=yJ;async function yJ(e){let t;try{t=await IJ(e.schema);let r=new EJ(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await gJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await mJ(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new pJ(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await SJ(s);let i=RJ(t);await fJ.remove(i)}catch(r){throw r}}a(yJ,"lmdbDropSchema");async function IJ(e){let t=new hJ(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[li.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await TJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw AJ(new Error,bJ.SCHEMA_NOT_FOUND(e),NJ.NOT_FOUND,void 0,void 0,!0);return n}a(IJ,"validateDropSchema")});var mu=g((gSe,RL)=>{"use strict";var CT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};RL.exports=CT});var DT=g((OSe,AL)=>{"use strict";var wJ=require("fs-extra"),Vf=Ve(),{getTransactionAuditStorePath:CJ}=ze(),LT=at(),ASe=mu();AL.exports=LJ;async function LJ(e){let t;try{let r=CJ(e.schema,e.table);await wJ.mkdirp(r),t=await Vf.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{Vf.createDBI(t,LT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Vf.createDBI(t,LT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Vf.createDBI(t,LT.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(LJ,"createTransactionsAuditEnvironment")});var yL=g((NSe,NL)=>{"use strict";var PT=C(),OL=Ve(),DJ=Wo(),{getSystemSchemaPath:PJ,getSchemaPath:MJ}=ze(),UJ=si(),vJ=Df(),MT=Lf(),BJ=x(),HJ=DT(),vT=UJ.hdb_table,bL=[];for(let e=0;e<vT.attributes.length;e++)bL.push(vT.attributes[e].attribute);NL.exports=GJ;async function GJ(e,t){let r=MJ(t.schema,t.table),n=new MT(t.schema,t.table,PT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new MT(t.schema,t.table,PT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new MT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await OL.createEnvironment(r,t.table),e!==void 0){let o=await OL.openEnvironment(PJ(),PT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await DJ.insertRecords(o,vT.hash_attribute,bL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await UT(n),await UT(s),await UT(i)}await HJ(t)}catch(o){throw o}}a(GJ,"lmdbCreateTable");async function UT(e){try{await vJ(e)}catch(t){BJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(UT,"createAttribute")});var wL=g((ISe,IL)=>{"use strict";var qJ=ou(),xJ=cu(),FJ=Bf(),Su=C(),kJ=Wo().updateRecords,$J=Ve(),{getSchemaPath:VJ}=ze(),YJ=lu(),KJ=x();IL.exports=WJ;async function WJ(e){try{let{schema_table:t,attributes:r}=qJ(e);xJ(e,r,t.hash_attribute),e.schema!==Su.SYSTEM_SCHEMA_NAME&&(r.includes(Su.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Su.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Su.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Su.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await FJ(e.hdb_auth_header,t,r),s=VJ(e.schema,e.table),i=await $J.openEnvironment(s,e.table),o=await kJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await YJ(e,o)}catch(c){KJ.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(WJ,"lmdbUpdateRecords")});var LL=g((CSe,CL)=>{"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}};CL.exports=BT});var PL=g((PSe,DL)=>{"use strict";var DSe=LL(),jJ=ou(),zJ=cu(),JJ=Bf(),Tu=C(),XJ=Wo().upsertRecords,ZJ=Ve(),{getSchemaPath:e2}=ze(),t2=lu(),r2=x(),{handleHDBError:n2,hdb_errors:s2}=ie();DL.exports=i2;async function i2(e){let t;try{t=jJ(e)}catch(l){throw n2(l,l.message,s2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;zJ(e,n,r.hash_attribute),e.schema!==Tu.SYSTEM_SCHEMA_NAME&&(n.includes(Tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await JJ(e.hdb_auth_header,r,n),i=e2(e.schema,e.table),o=await ZJ.openEnvironment(i,e.table),c=await XJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await t2(e,c)}catch(l){r2.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(i2,"lmdbUpsertRecords")});var UL=g((USe,ML)=>{"use strict";var HT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};ML.exports=HT});var BL=g((BSe,vL)=>{"use strict";var GT=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}};vL.exports=GT});var qL=g((qSe,GL)=>{"use strict";var qT=Ve(),{getTransactionAuditStorePath:o2}=ze(),GSe=UL(),gu=at(),a2=K(),HL=BL(),c2=require("util").promisify,l2=c2(setTimeout),u2=1e4,_2=100;GL.exports=d2;async function d2(e){let t=o2(e.schema,e.table),r=await qT.openEnvironment(t,e.table,!0),n=qT.listDBIs(r);qT.initializeDBIs(r,gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new HL;do s=await f2(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 l2(_2);while(s.transactions_deleted>0);return i}a(d2,"deleteAuditLogsBefore");async function f2(e,t){let r=new HL;try{let n=e.dbis[gu.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[gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];a2.isEmpty(c)||(s=e.dbis[gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>u2)break}return await s,r}catch(n){throw n}}a(f2,"deleteTransactions")});var FL=g((FSe,xL)=>{"use strict";var xT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};xL.exports=xT});var $L=g((VSe,kL)=>{"use strict";var E2=rs(),h2=pu(),$Se=FL(),Ls=C(),p2=K(),FT=Ve(),m2=si(),S2=hu(),T2=_u(),{getSchemaPath:g2}=ze();kL.exports=R2;async function R2(e,t=!0){let r;e.schema===Ls.SYSTEM_SCHEMA_NAME?r=m2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await O2(e),s=g2(e.schema,e.table),i=await FT.openEnvironment(s,e.table);return t===!0&&await A2(e,i,r.hash_attribute),FT.dropDBI(i,e.attribute),n}a(R2,"lmdbDropAttribute");async function A2(e,t,r){let n=FT.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(A2,"removeAttributeFromAllObjects");async function O2(e){let t=new E2(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await S2(t)).filter(o=>o[Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(p2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new h2(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return T2(i)}a(O2,"dropAttributeFromSystem")});var jL=g((WSe,QL)=>{"use strict";var kT=Ve(),mc=at(),KSe=Ar(),$T=C(),VL=K(),{getTransactionAuditStorePath:b2}=ze(),N2=Ec(),Yf=_c(),y2=x();QL.exports=I2;async function I2(e){let t=b2(e.schema,e.table),r=await kT.openEnvironment(t,e.table,!0),n=kT.listDBIs(r);kT.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case $T.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return YL(r,e.search_values);case $T.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,C2(r,e.search_values,s);case $T.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return w2(r,e.search_values);default:return YL(r)}}a(I2,"readAuditLog");function YL(e,t=[0,Date.now()]){VL.isEmpty(t[0])&&(t[0]=0),VL.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 Yf,s))}a(YL,"searchTransactionsByTimestamp");function w2(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,WL(e,i))}return Object.fromEntries(r)}a(w2,"searchTransactionsByUsername");function C2(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=N2.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=WL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);KL(l,"records",r,u,o),KL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(C2,"searchTransactionsByHashValues");function KL(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 Yf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Yf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(KL,"loopRecords");function WL(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 Yf,i);r.push(o)}}catch(i){y2.warn(i)}return r}catch(n){throw n}}a(WL,"batchSearchTransactions")});var JL=g((JSe,zL)=>{"use strict";var{getSchemaPath:jSe}=ze(),zSe=Ve(),{database:L2}=(Te(),oe(ke));zL.exports={writeTransaction:D2};async function D2(e,t,r){return L2({database:e,table:t}).transaction(r)}a(D2,"writeTransaction")});var tD=g((ZSe,eD)=>{"use strict";var{getSchemaPath:XL}=ze(),ZL=Ve();eD.exports={flush:P2,resetReadTxn:M2};async function P2(e,t){return(await ZL.openEnvironment(XL(e,t),t.toString())).flushed}a(P2,"flush");async function M2(e,t){try{(await ZL.openEnvironment(XL(e,t),t.toString())).resetReadTxn()}catch{}}a(M2,"resetReadTxn")});var iD=g((tTe,sD)=>{"use strict";var{Readable:U2}=require("stream"),{getDatabases:v2}=(Te(),oe(ke)),{readSync:B2,openSync:H2,createReadStream:rD}=require("fs"),{open:G2}=require("lmdb"),nD=Xl(),q2=Zl(),{AUDIT_STORE_OPTIONS:x2}=(Yi(),oe(RI)),{INTERNAL_DBIS_NAME:F2,AUDIT_STORE_NAME:k2}=at();sD.exports=V2;var VT=32768,$2=100;async function V2(e){let t=e.database||e.schema||"data",r=v2()[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=G2({noSync:!0,maxDbs:q2.MAX_DBS}),f,E=d.openDB(F2,new nD(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,A){A.encoding="binary",A.encoder=void 0;let P=d.openDB(T,A),v=u.openDB(T,A);for(let{key:U,version:F,value:H}of v.getRange({transaction:h,versions:v.useVersions}))f=P.put(U,H,F),m++%$2===0&&(await new Promise(j=>setTimeout(j,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:A}of u.getRange({transaction:h,start:!1}))if(s.some(P=>T.startsWith?.(P+"/"))){E.put(T,A);let[,P]=T.split("/"),v=!P,U=new nD(!v,v);await S(T,U)}e.include_audit&&await S(k2,Object.assign({},x2)),await f;let R=rD(d.path);return R.headers=l(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=H2(o.path);return o.transaction(()=>{let _=Buffer.alloc(VT);B2(c,_,0,VT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=rD(null,{fd:c,start:VT}),f=new U2.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(V2,"getBackup")});var cD=g((nTe,aD)=>{"use strict";var Y2=x(),{handleHDBError:K2}=ie(),W2=bw(),Q2=Df(),j2=fT(),z2=gC(),J2=_u(),X2=gT(),Z2=KC(),e4=tL(),t4=hu(),r4=lL(),n4=gL(),s4=yL(),i4=wL(),o4=PL(),a4=qL(),c4=wT(),l4=$L(),u4=jL(),_4=JL(),oD=tD(),d4=iD(),YT=class extends W2{static{a(this,"LMDBBridge")}async searchByConditions(t){return r4(t)}async getDataByHash(t){return await X2(t)}async searchByHash(t){return await Z2(t)}async getDataByValue(t,r){return await e4(t,r)}async searchByValue(t){return await t4(t)}async createSchema(t){return await z2(t)}async dropSchema(t){return await n4(t)}async createTable(t,r){return await s4(t,r)}async dropTable(t){return await c4(t)}async createAttribute(t){return await Q2(t)}async createRecords(t){return await j2(t)}async updateRecords(t){return await i4(t)}async upsertRecords(t){try{return await o4(t)}catch(r){throw K2(r,null,null,Y2.ERR,r)}}async deleteRecords(t){return await J2(t)}async dropAttribute(t){return await l4(t)}async deleteAuditLogsBefore(t){return await a4(t)}async readAuditLog(t){return await u4(t)}writeTransaction(t,r,n){return _4.writeTransaction(t,r,n)}flush(t,r){return oD.flush(t,r)}resetReadTxn(t,r){return oD.resetReadTxn(t,r)}getBackup(t){return d4(t)}};aD.exports=YT});var mD={};Fe(mD,{ResourceBridge:()=>QT});function jT({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 uD(e,t){let r=Ds(e),n=jT(e,r);if(!r)throw new ns.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&&uf(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 Ds(e){let t=e.database||e.schema||E4,r=rn()[t];if(!r)throw(0,ns.handleHDBError)(new Error,f4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function _D(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*dD(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 fD,Kf,ns,ED,hD,ss,KT,WT,pD,f4,E4,h4,p4,lD,QT,SD=Ae(()=>{"use strict";fD=G(cD()),Kf=G(hc()),ns=G(ie());Te();ED=G(ou()),hD=G(cu()),ss=G(C()),KT=G(ai()),WT=G(ts()),pD=G(K());Yo();_f();({HDB_ERROR_MSGS:f4}=ns.hdb_errors),E4="data",h4=1e4,p4=10,QT=class extends fD.default{static{a(this,"ResourceBridge")}constructor(t){super(t),lD=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,Kf.default)(t,"conditions");if(r)throw(0,ns.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ds(t);if(!n)throw new ns.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:jT(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 ns.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}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Ds(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ds(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){Ds(t).dropTable()}createSchema(t){return Ru({database:t.schema,table:null}),KT.signalSchemaChange(new WT.SchemaEventMsg(process.pid,ss.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zT(t.schema),KT.signalSchemaChange(new WT.SchemaEventMsg(process.pid,ss.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,lD.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ED.default)(t);(0,hD.default)(t,n,r.primaryKey);let s,i=rn()[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=uf(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=rn()[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 _D(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=rn()[t.schema][t.table];if(!r.createdTimeProperty)throw new ns.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:ss.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,pD.async_set_timeout)(p4),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%h4===0&&await _();return l.length>0&&await _(),s?_D(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Kf.default)(t,"hashes");if(r)throw r;return uD(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of uD(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ss.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,Kf.default)(t,"value");if(n)throw n;let s=Ds(t);if(!s)throw new ns.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===ss.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:jT(t,s)})}async getDataByValue(t,r){let n=new Map,s=Ds(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){Ds({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ds(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Ds(t),n={};switch(t.search_type){case ss.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 ss.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of dD(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return dD(r,t.search_values?.[0],t.search_values?.[1])}}};a(jT,"getSelect");a(uD,"getRecords");a(Ds,"getTable");a(_D,"createDeleteResponse");a(dD,"groupRecordsInHistory")});var Pn=g((lTe,TD)=>{"use strict";var{ResourceBridge:m4}=(SD(),oe(mD)),S4=X();S4.initSync();var Wf;function T4(){return Wf||(Wf=new m4,Wf)}a(T4,"getBridge");TD.exports=T4()});var OD=g((_Te,AD)=>{"use strict";var gD=require("lodash"),Au=require("mathjs"),g4=require("jsonata"),RD=K();AD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?gD.uniqWith(e,gD.isEqual):e,searchJSON:R4,mad:Ou.bind(null,Au.mad),mean:Ou.bind(null,Au.mean),mode:Ou.bind(null,Au.mode),prod:Ou.bind(null,Au.prod),median:Ou.bind(null,Au.median)};function Ou(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(Ou,"aggregateFunction");function R4(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(RD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),RD.isEmpty(this.__ala__.res[r])){let n=g4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(R4,"searchJSON")});var ND=g((fTe,bD)=>{"use strict";var Ot=require("moment"),JT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ot.suppressDeprecationWarnings=!0;bD.exports={current_date:()=>Ot().utc().format("YYYY-MM-DD"),current_time:()=>Ot().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ot(e).utc().format("YYYY");case"month":return Ot(e).utc().format("MM");case"day":return Ot(e).utc().format("DD");case"hour":return Ot(e).utc().format("HH");case"minute":return Ot(e).utc().format("mm");case"second":return Ot(e).utc().format("ss");case"millisecond":return Ot(e).utc().format("SSS");default:break}},date:e=>Ot(e).utc().format(JT),date_format:(e,t)=>Ot(e).utc().format(t),date_add:(e,t,r)=>Ot(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ot(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Ot(e).utc(),s=Ot(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Ot().utc().valueOf(),get_server_time:()=>Ot().format(JT),offset_utc:(e,t)=>Ot(e).utc().utcOffset(t).format(JT)}});var CD=g((ETe,wD)=>{"use strict";var A4=require("@turf/area"),O4=require("@turf/length"),b4=require("@turf/circle"),N4=require("@turf/difference"),y4=require("@turf/distance"),I4=require("@turf/boolean-contains"),w4=require("@turf/boolean-equal"),C4=require("@turf/boolean-disjoint"),L4=require("@turf/helpers"),yD=C(),ge=K(),ui=x();wD.exports={geoArea:D4,geoLength:P4,geoCircle:M4,geoDifference:U4,geoDistance:ID,geoNear:v4,geoContains:B4,geoEqual:H4,geoCrosses:G4,geoConvert:q4};function D4(e){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return A4.default(e)}catch(t){return ui.trace(t,e),NaN}}a(D4,"geoArea");function P4(e,t){if(ge.isEmpty(e))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return O4.default(e,{units:t||"kilometers"})}catch(r){return ui.trace(r,e),NaN}}a(P4,"geoLength");function M4(e,t,r){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e));try{return b4.default(e,t,{units:r||"kilometers"})}catch(n){return ui.trace(n,e,t),NaN}}a(M4,"geoCircle");function U4(e,t){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return N4(e,t)}catch(r){return ui.trace(r,e,t),NaN}}a(U4,"geoDifference");function ID(e,t,r){if(ge.isEmpty(e))return NaN;if(ge.isEmpty(t))return NaN;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return y4.default(e,t,{units:r||"kilometers"})}catch(n){return ui.trace(n,e,t),NaN}}a(ID,"geoDistance");function v4(e,t,r,n){if(ge.isEmpty(e)||ge.isEmpty(t))return!1;if(ge.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ID(e,t,n)<=r}catch(s){return ui.trace(s,e,t),!1}}a(v4,"geoNear");function B4(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return I4.default(e,t)}catch(r){return ui.trace(r,e,t),!1}}a(B4,"geoContains");function H4(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return w4.default(e,t)}catch(r){return ui.trace(r,e,t),!1}}a(H4,"geoEqual");function G4(e,t){if(ge.isEmpty(e)||ge.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ge.autoCastJSON(e)),typeof t=="string"&&(t=ge.autoCastJSON(t));try{return!C4.default(e,t)}catch(r){return ui.trace(r,e,t),!1}}a(G4,"geoCrosses");function q4(e,t,r){if(ge.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ge.isEmpty(t))throw new Error("geo_type is required");if(ge.isEmpty(yD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(yD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ge.autoCastJSON(e)),L4[t](e,r)}a(q4,"geoConvert")});var Qf=g((pTe,LD)=>{var Xo=OD(),nn=ND(),Ps=CD();LD.exports=e=>{e.aggr.mad=e.aggr.MAD=Xo.mad,e.aggr.mean=e.aggr.MEAN=Xo.mean,e.aggr.mode=e.aggr.MODE=Xo.mode,e.aggr.prod=e.aggr.PROD=Xo.prod,e.aggr.median=e.aggr.MEDIAN=Xo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=nn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=nn.current_time,e.fn.extract=e.fn.EXTRACT=nn.extract,e.fn.date=e.fn.DATE=nn.date,e.fn.date_format=e.fn.DATE_FORMAT=nn.date_format,e.fn.date_add=e.fn.DATE_ADD=nn.date_add,e.fn.date_sub=e.fn.DATE_SUB=nn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=nn.date_diff,e.fn.now=e.fn.NOW=nn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=nn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=nn.get_server_time,e.fn.getdate=e.fn.GETDATE=nn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=nn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ps.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ps.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ps.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ps.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ps.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ps.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ps.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ps.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ps.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ps.geoNear}});var UD=g((mTe,MD)=>{"use strict";var bu=require("lodash"),Ir=require("alasql");Ir.options.cache=!1;var x4=Qf(),DD=require("clone"),jf=require("recursive-iterator"),de=x(),De=K(),Sc=Pn(),F4=C(),{hdb_errors:k4}=ie(),{getDatabases:PD}=(Te(),oe(ke)),$4="IS NULL",is="There was a problem performing this search. Please check the logs and try again.";x4(Ir);var XT=class{static{a(this,"SQLSearch")}constructor(t,r){if(De.isEmpty(t))throw de.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 de.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw de.error("Error thrown from checkEmptySQL in SQLSearch class method search."),de.error(n),new Error(is)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw de.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),de.error(n),new Error(is)}if(Object.keys(this.data).length===0)return de.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw de.error("Error thrown from processJoins in SQLSearch class method search."),de.error(n),new Error(is)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw de.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),de.error(n),new Error(is)}try{return t=await this._finalSQL(),t}catch(n){throw de.error("Error thrown from finalSQL in SQLSearch class method search."),de.error(n),new Error(is)}}_getColumns(){let t=new jf(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(DD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=bu.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=PD()[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)){de.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new jf(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 Ir.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 Ir.yy.LogicValue({value:i}):n instanceof Ir.yy.StringValue&&De.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ir.yy.NumValue({value:i}))});if(t){de.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new jf(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(F4.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&&bu.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 Ir.promise(r)}catch(r){throw de.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),de.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(DD(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($4)>-1&&this.tables.forEach(s=>{let i={columnid:PD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=bu.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 de.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(is)}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 de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),de.error(u),new Error(is)}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 de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),de.error(u),new Error(is)}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 de.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),de.error(u),new Error(is)}}}_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 Ir.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 Ir.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ir.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 Ir.yy.FuncValue:new Ir.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 Ir.promise(h,t),t=null}catch(E){throw de.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),de.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=bu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,R=m.length;S<R;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 jf(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=bu.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 de.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),de.error(i),new Error(is)}}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 de.error("Error thrown from getDataByHash function in SQLSearch class method getData."),de.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();de.trace(`Final SQL: ${s}`),n=await Ir.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),de.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw de.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),de.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 de.error(k4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),de.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 de.error("There was an error when processing this SQL operation. Check your logs"),de.error(o),new Error(is)}}return Object.values(Object.values(this.data)[0].__merged_data)}};MD.exports=XT});var ir=g((TTe,vD)=>{"use strict";var V4=Aw();vD.exports={searchByConditions:K4,searchByHash:W4,searchByValue:Q4,search:j4};var ZT=Pn(),{transformReq:eg}=K(),Y4=UD();async function K4(e){return eg(e),ZT.searchByConditions(e)}a(K4,"searchByConditions");async function W4(e){eg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ZT.searchByHash(e))r&&t.push(r);return t}a(W4,"searchByHash");async function Q4(e){eg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ZT.searchByValue(e))t.push(r);return t}a(Q4,"searchByValue");function j4(e,t){try{let r=new V4(e);r.validate(),new Y4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(j4,"search")});var _i=g((RTe,qD)=>{"use strict";var Nu=require("crypto"),z4=X(),{CONFIG_PARAMS:J4}=C(),HD="aes-256-cbc",X4=32,Z4=16,tg=64,GD=32,e3=tg+GD,BD=new Map;qD.exports={encrypt:t3,decrypt:r3,createNatsTableStreamName:n3};function t3(e){let t=Nu.randomBytes(X4),r=Nu.randomBytes(Z4),n=Nu.createCipheriv(HD,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(t3,"encrypt");function r3(e){let t=e.substr(0,tg),r=e.substr(tg,GD),n=e.substr(e3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Nu.createDecipheriv(HD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(r3,"decrypt");function n3(e,t){let r=z4.get(J4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=BD.get(r);return n||(n=Nu.createHash("md5").update(r).digest("hex"),BD.set(r,n)),n}a(n3,"createNatsTableStreamName")});var Zi=g((bTe,FD)=>{"use strict";var OTe=ir(),zf=x(),xD=Cf(),s3=_i(),Jf=K(),{handleHDBError:Xf,hdb_errors:i3}=ie(),{HDB_ERROR_MSGS:Zf,HTTP_STATUS_CODES:rg}=i3,o3=X();o3.initSync();var{getDatabases:ng}=(Te(),oe(ke));FD.exports={describeAll:a3,describeTable:eE,describeSchema:c3};async function a3(e){try{let t=Jf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=ng(),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 eE({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 eE({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){zf.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 zf.error("Got an error in describeAll"),zf.error(t),Xf(new Error,Zf.DESCRIBE_ALL_ERR)}}a(a3,"describeAll");async function eE(e,t){Jf.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=xD.describe_table(e);if(i)throw i;let c=ng()[r];if(!c)throw Xf(new Error,Zf.SCHEMA_NOT_FOUND(e.schema),rg.NOT_FOUND);let l=c[n];if(!l)throw Xf(new Error,Zf.TABLE_NOT_FOUND(e.schema,e.table),rg.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=s3.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){zf.warn(`unable to stat table dbi due to ${f}`)}return d}a(eE,"descTable");async function c3(e){Jf.transformReq(e);let t=xD.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=ng()[n];if(!i)throw Xf(new Error,Zf.SCHEMA_NOT_FOUND(e.schema),rg.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Jf.isEmpty(l)||l.describe){let _=await eE({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(c3,"describeSchema")});var Mn=g((wTe,KD)=>{var l3=si(),{callbackify:$D,promisify:u3}=require("util"),{getDatabases:VD}=(Te(),oe(ke));KD.exports={setSchemaDataToGlobal:kD,getTableSchema:_3,getSystemSchema:d3,setSchemaDataToGlobalAsync:u3(kD)};var YD=Zi(),yTe=$D(YD.describeAll),ITe=$D(YD.describeTable);function kD(e){global.hdb_schema=VD(),e&&e()}a(kD,"setSchemaDataToGlobal");function _3(e,t,r){let n=VD()[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(_3,"getTableSchema");function d3(){return l3}a(d3,"getSystemSchema")});var wr=g((LTe,zD)=>{"use strict";var rE=iT(),Xt=K(),f3=require("util"),nE=Pn(),E3=Mn(),WD=x(),{handleHDBError:Zo,hdb_errors:h3}=ie(),{HTTP_STATUS_CODES:ea}=h3,p3=f3.promisify(E3.getTableSchema),m3="updated",QD="inserted",jD="upserted";zD.exports={insert:T3,update:g3,upsert:R3,validation:S3,flush:A3};async function S3(e){if(Xt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Xt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Xt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await p3(e.schema,e.table),r=rE(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&&Xt.isEmptyOrZeroLength(c[n]))throw WD.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(!Xt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw WD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Xt.isEmpty(c[n])&&c[n]!==""&&s.has(Xt.autoCast(c[n]))&&(c.skip=!0),s.add(Xt.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(S3,"validation");async function T3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=rE(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await nE.createRecords(e);return tE(QD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(T3,"insertData");async function g3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=rE(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await nE.updateRecords(e);return Xt.isEmpty(n.existing_rows)?tE(m3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):tE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(g3,"updateData");async function R3(e){if(e.operation!=="upsert")throw Zo(new Error,"invalid operation, must be upsert",ea.INTERNAL_SERVER_ERROR);let t=rE(e);if(t)throw Zo(new Error,t.message,ea.BAD_REQUEST);Xt.transformReq(e);let r=Xt.checkSchemaTableExist(e.schema,e.table);if(r)throw Zo(new Error,r,ea.BAD_REQUEST);let n=await nE.upsertRecords(e);return tE(jD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(R3,"upsertData");function tE(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===QD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===jD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(tE,"returnObject");function A3(e){return Xt.transformReq(e),nE.flush(e.schema,e.table)}a(A3,"flush")});var ig=g((PTe,ZD)=>{var O3=rt(),sg=require("joi"),{hdb_table:b3,hdb_database:JD}=ws(),XD={schema:JD,database:JD,table:b3},N3={date:sg.date().iso().required()},y3={timestamp:sg.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ZD.exports=function(e,t){let r=t==="timestamp"?{...XD,...y3}:{...XD,...N3},n=sg.object(r);return O3.validateBySchema(e,n)}});var rP=g((MTe,tP)=>{var I3=rt(),og=require("joi"),{hdb_table:w3,hdb_database:eP}=ws(),C3=og.object({schema:eP,database:eP,table:w3,hash_values:og.array().required(),ids:og.array()});tP.exports=function(e){return I3.validateBySchema(e,C3)}});var ug=g((UTe,nP)=>{"use strict";var ag=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}},cg=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}},lg=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};nP.exports={InsertObject:ag,NoSQLSeachObject:cg,DeleteResponseObject:lg}});var na=g((BTe,cP)=>{"use strict";var iP=ig(),L3=rP(),ta=K(),sP=require("moment"),oP=x(),{promisify:D3,callbackify:P3}=require("util"),ra=C(),M3=Mn(),_g=D3(M3.getTableSchema),dg=Pn(),{DeleteResponseObject:U3}=ug(),{handleHDBError:eo,hdb_errors:v3}=ie(),{HDB_ERROR_MSGS:sE,HTTP_STATUS_CODES:to}=v3,B3="records successfully deleted",H3=P3(aP);cP.exports={delete:H3,deleteRecord:aP,deleteFilesBefore:G3,deleteAuditLogsBefore:q3};async function G3(e){let t=iP(e,"date");if(t)throw eo(t,t.message,to.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),!sP(e.date,sP.ISO_8601).isValid())throw eo(new Error,sE.INVALID_DATE,to.BAD_REQUEST,ra.LOG_LEVELS.ERROR,sE.INVALID_DATE,!0);let n=ta.checkSchemaTableExist(e.schema,e.table);if(n)throw eo(new Error,n,to.NOT_FOUND,ra.LOG_LEVELS.ERROR,n,!0);let s=await dg.deleteRecordsBefore(e);if(await _g(e.schema,e.table),oP.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(G3,"deleteFilesBefore");async function q3(e){let t=iP(e,"timestamp");if(t)throw eo(t,t.message,to.BAD_REQUEST,void 0,void 0,!0);if(ta.transformReq(e),isNaN(e.timestamp))throw eo(new Error,sE.INVALID_VALUE("Timestamp"),to.BAD_REQUEST,ra.LOG_LEVELS.ERROR,sE.INVALID_VALUE("Timestamp"),!0);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw eo(new Error,r,to.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);let n=await dg.deleteAuditLogsBefore(e);return await _g(e.schema,e.table),oP.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(q3,"deleteAuditLogsBefore");async function aP(e){e.ids&&(e.hash_values=e.ids);let t=L3(e);if(t)throw eo(t,t.message,to.BAD_REQUEST,void 0,void 0,!0);ta.transformReq(e);let r=ta.checkSchemaTableExist(e.schema,e.table);if(r)throw eo(new Error,r,to.NOT_FOUND,ra.LOG_LEVELS.ERROR,r,!0);try{await _g(e.schema,e.table);let n=await dg.deleteRecords(e);return ta.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${B3}`),n}catch(n){if(n.message===ra.SEARCH_NOT_FOUND_MESSAGE){let s=new U3;return s.message=ra.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(aP,"deleteRecord")});var iE=g((GTe,_P)=>{var x3=require("crypto"),lP=9;function F3(e){let t=$3(lP),r=uP(e+t);return t+r}a(F3,"createHash");function k3(e,t){let r=e?.substr(0,lP),n=r+uP(t+r);return e===n}a(k3,"validateHash");function $3(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($3,"generateSalt");function uP(e){return x3.createHash("md5").update(e).digest("hex")}a(uP,"md5");_P.exports={hash:F3,validate:k3}});var fP=g((xTe,dP)=>{var fg=rt(),or={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 V3(e){return or.password.presence=!0,or.username.presence=!0,or.role.presence=!0,or.active.presence=!0,fg.validateObject(e,or)}a(V3,"addUserValidation");function Y3(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,fg.validateObject(e,or)}a(Y3,"alterUserValidation");function K3(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,fg.validateObject(e,or)}a(K3,"dropUserValidation");dP.exports={addUserValidation:V3,alterUserValidation:Y3,dropUserValidation:K3}});var et=g(($Te,hP)=>{"use strict";var{platform:kTe}=require("os"),W3="nats-server.zip",Eg="nats-server",Q3=process.platform==="win32"?`${Eg}.exe`:Eg,j3=/^[^\s.,*>]+$/,EP="__request__",z3=a(e=>`${e}.${EP}`,"REQUEST_SUBJECT"),J3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},X3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Z3={HUB:"hub.pid",LEAF:"leaf.pid"},eX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tX={SUCCESS:"success",ERROR:"error"},rX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},nX={TXN:"txn",MSGID:"msgid"},Tc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sX={[Tc.ERR]:1,[Tc.WRN]:2,[Tc.INF]:3,[Tc.DBG]:4,[Tc.TRC]:5},iX={debug:"-D",trace:"-DVV"};hP.exports={NATS_SERVER_ZIP:W3,NATS_SERVER_NAME:Eg,NATS_BINARY_NAME:Q3,PID_FILES:Z3,NATS_CONFIG_FILES:X3,SERVER_SUFFIX:eX,NATS_TERM_CONSTRAINTS_RX:j3,REQUEST_SUFFIX:EP,UPDATE_REMOTE_RESPONSE_STATUSES:tX,CLUSTER_STATUS_STATUSES:rX,REQUEST_SUBJECT:z3,SUBJECT_PREFIXES:nX,MSG_HEADERS:J3,LOG_LEVELS:Tc,LOG_LEVEL_FLAGS:iX,LOG_LEVEL_HIERARCHY:sX}});var hg=g((YTe,pP)=>{"use strict";var oX={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
- `)},aX="certificate.pem",cX="privateKey.pem",lX="ca.pem";mP.exports={CERTIFICATE_VALUES:oX,CERTIFICATE_PEM_NAME:aX,PRIVATEKEY_PEM_NAME:cX,CA_PEM_NAME:lX}});var hg=T((YTe,AP)=>{"use strict";var RP=require("fs-extra"),ae=require("joi"),uX=require("os"),{boolean:Ie,string:yr,number:Pt,array:Eg}=ae.types(),{totalmem:SP}=require("os"),sa=require("path"),_X=x(),iE=K(),VTe=fg(),TP=C(),dX=rt(),gP="log",fX="components",EX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",pX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",mX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SX="rootPath config parameter is undefined",TX="clustering.enabled config parameter is undefined",ia=Pt.min(0).required(),oE=Eg.items({host:yr.required(),port:ia}).empty(null),Ds;AP.exports={configValidator:gX,routesValidator:yX,route_constraints:oE};function gX(e){if(Ds=e.rootPath,iE.isEmpty(Ds))throw SX;let t=Ie.required(),r=Pt.min(0).max(1e3).empty(null).default(bX),n=yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Nu),s=yr.optional().empty(null),i=yr.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(AX).empty(null).default(Nu),l=e.clustering?.enabled;if(iE.isEmpty(l))throw TX;let _;return l===!0?_=ae.object({enabled:t,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:ia,routes:oE}).required()}).required(),leafNodes:ae.object({network:ae.object({port:ia}).required()}).required(),network:ae.object({port:ia}).required()}).required(),leafServer:ae.object({network:ae.object({port:ia,routes:oE}).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:yr.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:yr.custom(NX).optional().empty(null),maxSize:yr.custom(OX).optional().empty(null),path:yr.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:Eg.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:yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:ia,securePort:ia,mtls:ae.alternatives([Ie.optional(),ae.object({user:yr.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ae.object({compressionThreshold:Pt.optional(),cors:Ie.optional(),corsAccessList:Eg.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:yr.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:yr.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:yr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(gX,"configValidator");function RX(e){return RP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(RX,"doesPathExist");function AX(e,t){ae.assert(e,yr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=RX(e);if(r)return t.message(r)}a(AX,"validatePath");function OX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pX):e}a(OX,"validateRotationMaxSize");function NX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(hX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mX):e}a(NX,"validateRotationInterval");function bX(e,t){let r=t.state.path.join("."),n=uX.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),_X.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(bX,"setDefaultThreads");function Nu(e,t){let r=t.state.path.join(".");if(!iE.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(iE.isEmpty(Ds))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return sa.join(Ds,fX);case"logging.root":return sa.join(Ds,gP);case"clustering.leafServer.streams.path":return sa.join(Ds,"clustering","leaf");case"storage.path":let n=sa.join(Ds,TP.LEGACY_DATABASES_DIR_NAME);return RP.existsSync(n)?n:sa.join(Ds,TP.DATABASES_DIR_NAME);case"logging.rotation.path":return sa.join(Ds,gP);case"operationsApi.network.domainSocket":return r==null?null:sa.join(Ds,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Nu,"setDefaultRoot");function yX(e){let t=ae.object({routes:oE});return dX.validateBySchema({routes:e},t)}a(yX,"routesValidator")});var Et=T((QTe,DP)=>{"use strict";var rn=C(),Ft=K(),Mt=x(),{configValidator:IX,routesValidator:OP}=hg(),Ir=require("fs-extra"),wX=require("yaml"),ss=require("path"),CX=require("is-number"),bP=require("properties-reader"),LX=require("lodash"),{handleHDBError:DX}=ie(),{HTTP_STATUS_CODES:PX,HDB_ERROR_MSGS:aE}=Wr(),WTe=require("minimist"),{server:MX}=(mr(),oe(qo)),{DATABASES_PARAM_CONFIG:bu,CONFIG_PARAMS:tn,CONFIG_PARAM_MAP:is}=rn,UX="Unable to get config value because config is uninitialized",vX="Config successfully initialized",BX="Error backing up config file",HX="Empty parameter sent to getConfigValue",yP=ss.join(rn.PACKAGE_ROOT,"config","yaml",rn.HDB_DEFAULT_CONFIG_FILE),qX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",NP={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"},cE,Ut,lE;DP.exports={createConfigFile:GX,getDefaultConfig:xX,getConfigValue:wP,initConfig:mg,flattenConfig:gc,updateConfigValue:CP,updateConfigObject:kX,getConfiguration:YX,setConfiguration:KX,readConfigFile:Tg,getClusteringRoutes:WX,initOldConfig:LP,getConfigFromFile:QX,getConfigFilePath:oa,addConfig:jX,deleteConfigFromFile:zX,getConfigObj:JX};function GX(e){let t=eo(yP);cE=gc(t.toJSON());let r;for(let o in e){let c=is[o.toLowerCase()];if(c===tn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=pg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Mt.error(u)}}}r&&IP(t,r),Sg(t);let n=t.toJSON();Ut=gc(n);let s=t.getIn(["rootPath"]),i=ss.join(s,rn.HDB_CONFIG_FILE);Ir.createFileSync(i),Ir.writeFileSync(i,String(t)),Mt.trace(`Config file written to ${i}`)}a(GX,"createConfigFile");function IP(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=[tn.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=[tn.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(IP,"setSchemasConfig");function xX(e){if(cE===void 0){let r=eo(yP);cE=gc(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return cE[t.toLowerCase()]}a(xX,"getDefaultConfig");function wP(e){if(e==null){Mt.error(HX);return}if(Ut===void 0){Mt.trace(UX);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(wP,"getConfigValue");function oa(e=Ft.getPropsFilePath()){let t=Ft.getEnvCliRootPath();return t?ss.join(t,rn.HDB_CONFIG_FILE):bP(e).get(rn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(oa,"getConfigFilePath");function mg(e=!1){if(Ut===void 0||e){let t;if(!Ft.noBootFile()){t=Ft.getPropsFilePath();try{Ir.accessSync(t,Ir.constants.F_OK|Ir.constants.R_OK)}catch(i){throw Mt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=oa(t),n;if(r.includes("config/settings.js"))try{LP(r);return}catch(i){if(i.code!==rn.NODE_ERROR_CODES.ENOENT)throw i}try{n=eo(r)}catch(i){if(i.code===rn.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}`)}FX(n,r),Sg(n);let s=n.toJSON();if(MX.config=s,Ut=gc(s),Ut.logging_rotation_rotate)for(let i in NP)Ut[i]&&Mt.error(`Config ${NP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Mt.trace(vX)}}a(mg,"initConfig");function FX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.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"),Ir.writeFileSync(t,String(e)))}a(FX,"checkForUpdatedConfig");function Sg(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=IX(t);if(r.error)throw aE.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(Sg,"validateConfig");function kX(e,t){Ut===void 0&&(Ut={});let r=is[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(kX,"updateConfigObject");function CP(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&mg();let o=wP(is.hdb_root),c=ss.join(o,rn.HDB_CONFIG_FILE),l=eo(c),_;if(r===void 0&&e.toLowerCase()===tn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=is[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=pg(f,t);l.setIn([...E],h)}else for(let f in r){let E=is[f.toLowerCase()];if(E===tn.HTTP_SECUREPORT&&r[f]===Ut[tn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===tn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Ut[tn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===tn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=rn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=pg(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(R){Mt.error(R)}}}_&&IP(l,_),Sg(l);let u=l.getIn(["rootPath"]),d=ss.join(u,rn.HDB_CONFIG_FILE);n===!0&&$X(c,u),Ir.writeFileSync(d,String(l)),s&&(Ut=gc(l.toJSON())),Mt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(CP,"updateConfigValue");function $X(e,t){try{let r=ss.join(t,"backup",`${rn.HDB_CONFIG_FILE}.bak`);Ir.copySync(e,r),Mt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Mt.error(BX),Mt.error(r)}}a($X,"backupConfigFile");var VX=["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)),lE=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])&&!VX.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;!tn[l.toUpperCase()]&&is[l]&&(s[is[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 pg(e,t){if(e===tn.CLUSTERING_NODENAME||e===tn.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(CX(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(pg,"castConfigValue");function YX(){let e=Ft.getPropsFilePath(),t=oa(e);return eo(t).toJSON()}a(YX,"getConfiguration");async function KX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return CP(void 0,void 0,s,!0),qX}catch(i){throw typeof i=="string"||i instanceof String?DX(i,i,PX.BAD_REQUEST,void 0,void 0,!0):i}}a(KX,"setConfiguration");function Tg(){let e=Ft.getPropsFilePath();try{Ir.accessSync(e,Ir.constants.F_OK|Ir.constants.R_OK)}catch(n){if(!Ft.noBootFile())throw Mt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=oa(e);return eo(t).toJSON()}a(Tg,"readConfigFile");function eo(e){return wX.parseDocument(Ir.readFileSync(e,"utf8"),{simpleKeys:!0})}a(eo,"parseYamlDoc");function WX(){let e=Tg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ft.isEmptyOrZeroLength(t)?[]:t;let r=OP(t);if(r)throw aE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ft.isEmptyOrZeroLength(n)?[]:n;let s=OP(n);if(s)throw aE.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 aE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(WX,"getClusteringRoutes");function LP(e){let t=bP(e);Ut={};for(let r in is){let n=t.get(r.toUpperCase());if(Ft.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===tn.LOGGING_ROOT?Ut[s]=ss.dirname(n):Ut[s]=n}return Ut}a(LP,"initOldConfig");function QX(e){let t=Tg();return LX.get(t,e.replaceAll("_","."))}a(QX,"getConfigFromFile");async function jX(e,t){let r=eo(oa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ir.writeFile(oa(),String(r))}a(jX,"addConfig");function zX(e){let t=oa(Ft.getPropsFilePath()),r=eo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,rn.HDB_CONFIG_FILE);Ir.writeFileSync(s,String(r))}a(zX,"deleteConfigFromFile");function JX(){return lE||(mg(),lE)}a(JX,"getConfigObj")});var MP=T((zTe,PP)=>{"use strict";var uE=C(),_E=class{static{a(this,"BaseLicense")}constructor(t=0,r=uE.RAM_ALLOCATION_ENUM.DEFAULT,n=uE.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},gg=class extends _E{static{a(this,"ExtendedLicense")}constructor(t=0,r=uE.RAM_ALLOCATION_ENUM.DEFAULT,n=uE.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};PP.exports={BaseLicense:_E,ExtendedLicense:gg}});var aa=T((XTe,GP)=>{"use strict";var Ac=require("fs-extra"),vP=sE(),BP=require("crypto"),XX=require("moment"),ZX=require("uuid").v4,ir=x(),Ag=require("path"),eZ=K(),to=C(),{totalmem:UP}=require("os"),tZ=MP().ExtendedLicense,Rc="invalid license key format",rZ="061183",nZ="mofi25",sZ="aes-256-cbc",iZ=16,oZ=32,HP=X();HP.initSync();var Rg;GP.exports={validateLicense:qP,generateFingerPrint:cZ,licenseSearch:bg,getLicense:_Z,checkMemoryLimit:dZ};function Og(){return Ag.join(HP.getHdbBasePath(),to.LICENSE_KEY_DIR_NAME,to.LICENSE_FILE_NAME)}a(Og,"getLicenseDirPath");function aZ(){let e=Og();return Ag.join(e,to.LICENSE_FILE_NAME)}a(aZ,"getLicenseFilePath");function Ng(){let e=Og();return Ag.join(e,to.REG_KEY_FILE_NAME)}a(Ng,"getFingerPrintFilePath");async function cZ(){let e=Ng();try{return await Ac.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await lZ();throw ir.error(`Error writing fingerprint file to ${e}`),ir.error(t),new Error("There was an error generating the fingerprint")}}a(cZ,"generateFingerPrint");async function lZ(){let e=ZX(),t=vP.hash(e),r=Ng();try{await Ac.mkdirp(Og()),await Ac.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw ir.error(`Error writing fingerprint file to ${r}`),ir.error(n),new Error("There was an error generating the fingerprint")}return t}a(lZ,"writeFingerprint");function qP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:to.RAM_ALLOCATION_ENUM.DEFAULT,version:to.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return ir.error("empty license key passed to validate."),r;let n=Ng(),s=!1;try{s=Ac.statSync(n)}catch(i){ir.error(i)}if(s){let i;try{i=Ac.readFileSync(n,"utf8")}catch{ir.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nZ),c=o[1];c=Buffer.concat([Buffer.from(c)],iZ);let l=Buffer.concat([Buffer.from(i)],oZ),_=BP.createDecipheriv(sZ,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=uZ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Rc),ir.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),ir.error(Rc),new Error(Rc)}else r.exp_date=u;r.exp_date<XX().valueOf()&&(r.valid_date=!1),vP.validate(o[1],`${rZ}${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||ir.error("Invalid licence"),r}a(qP,"validateLicense");function uZ(e,t){try{let r=BP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{ir.warn("Check old license failed")}}a(uZ,"checkOldLicense");function bg(){let e=new tZ,t=[];try{t=Ac.readFileSync(aZ(),"utf-8").split(to.NEW_LINE)}catch(r){r.code==="ENOENT"?ir.info("no license file found"):ir.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=qP(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){ir.error("There was an error parsing the license string."),ir.error(s),e.ram_allocation=to.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Rg=e,e}a(bg,"licenseSearch");async function _Z(){return Rg||await bg(),Rg}a(_Z,"getLicense");function dZ(){let e=bg().ram_allocation,t=process.constrainedMemory?.()||UP();if(t=Math.round(Math.min(t,UP())/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(dZ,"checkMemoryLimit")});var wr=T((nge,tM)=>{"use strict";var $P="username is required",VP="nothing to update, must supply active, role or password to update",YP="password cannot be an empty string",KP="If role is specified, it cannot be empty.",WP="active must be true or false";tM.exports={addUser:RZ,alterUser:AZ,dropUser:NZ,getSuperUser:wZ,userInfo:bZ,listUsers:fE,listUsersExternal:yZ,setUsersToGlobal:Nc,findAndValidateUser:ZP,getClusterUser:CZ,USERNAME_REQUIRED:$P,ALTERUSER_NOTHING_TO_UPDATE:VP,EMPTY_PASSWORD:YP,EMPTY_ROLE:KP,ACTIVE_BOOLEAN:WP};var QP=br(),fZ=na(),wg=sE(),jP=EP(),zP=nr(),Cg=ii(),nn=K(),JP=require("validate.js"),Re=x(),{promisify:EZ}=require("util"),Lg=li(),xP=C(),FP=et(),hZ=Et(),ege=X(),tge=aa(),pZ=ri(),{table:rge}=(ge(),oe(Fe)),{handleHDBError:Ps,hdb_errors:mZ}=ie(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:yg,HDB_ERROR_MSGS:Oc}=mZ,{UserEventMsg:Dg}=Xn(),Ig=require("lodash"),{server:Pg}=(mr(),oe(qo)),SZ=x();Pg.getUser=(e,t)=>ZP(e,t,t!=null);var XP={username:!0,active:!0,role:!0,password:!0},kP=new Map,dE=zP.searchByValue,TZ=zP.searchByHash,gZ=EZ(fZ.delete);async function RZ(e){let t=JP.cleanAttributes(e,XP),r=jP.addUserValidation(t);if(r)throw Ps(new Error,r.message,Ms.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 dE(n),s=s&&Array.from(s)}catch(l){throw Re.error("There was an error searching for a role in add user"),Re.error(l),l}if(!s||s.length<1)throw Ps(new Error,Oc.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ps(new Error,Oc.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Lg.encrypt(t.password)),t.password=wg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await QP.insert(i)}catch(l){throw Re.error("There was an error searching for a user."),Re.error(l),l}Re.debug(o);try{await Nc()}catch(l){throw Re.error("Got an error setting users to global"),Re.error(l),l}if(o.skipped_hashes.length===1)throw Ps(new Error,Oc.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Cg.signalUserChange(new Dg(process.pid)),`${c.username} successfully added`}a(RZ,"addUser");async function AZ(e){let t=JP.cleanAttributes(e,XP);if(nn.isEmptyOrZeroLength(t.username))throw new Error($P);if(nn.isEmptyOrZeroLength(t.password)&&nn.isEmptyOrZeroLength(t.role)&&nn.isEmptyOrZeroLength(t.active))throw new Error(VP);if(!nn.isEmpty(t.password)&&nn.isEmptyOrZeroLength(t.password.trim()))throw new Error(YP);if(!nn.isEmpty(t.active)&&!nn.isBoolean(t.active))throw new Error(WP);let r=OZ(t.username);if(!nn.isEmpty(t.password)&&!nn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Lg.encrypt(t.password)),t.password=wg.hash(t.password)),t.role==="")throw new Error(KP);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 dE(i)||[])}catch(c){throw Re.error("Got an error searching for a role."),Re.error(c),c}if(!o||o.length===0){let c=Oc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Re.error(c),Ps(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Oc.ALTER_USER_DUP_ROLES(t.role);throw Re.error(c),Ps(new Error,c,Ms.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 QP.update(n)}catch(i){throw Re.error("Error during update."),Re.error(i),i}try{await Nc()}catch(i){throw Re.error("Got an error setting users to global"),Re.error(i),i}return Cg.signalUserChange(new Dg(process.pid)),s}a(AZ,"alterUser");function OZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OZ,"isClusterUser");async function NZ(e){try{let t=jP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(nn.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,Oc.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gZ(r)}catch(s){throw Re.error("Got an error deleting a user."),Re.error(s),s}Re.debug(n);try{await Nc()}catch(s){throw Re.error("Got an error setting users to global."),Re.error(s),s}return Cg.signalUserChange(new Dg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(NZ,"dropUser");async function bZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Ig.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TZ(r)}catch(s){throw Re.error("Got an error searching for a role."),Re.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Re.error(r),r}return t}a(bZ,"userInfo");async function yZ(){let e;try{e=await fE()}catch(t){throw Re.error("Got an error listing users."),Re.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(yZ,"listUsersExternal");async function fE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await dE(e)}catch(o){throw Re.error("Got an error searching for roles."),Re.error(o),o}let r={};for(let o of t)r[o.id]=Ig.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 dE(n)}catch(o){throw Re.error("Got an error searching for users."),Re.error(o),o}let i=new Map;for(let o of s)o=Ig.cloneDeep(o),o.role=r[o.role],IZ(o.role),i.set(o.username,o);return i}catch(e){throw Re.error("got an error listing users"),Re.error(e),nn.errorizeMessage(e)}return null}a(fE,"listUsers");function IZ(e){try{if(!e){Re.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(pZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Re.error("Got an error trying to set system permissions."),Re.error(t)}}a(IZ,"appendSystemTablesToRole");async function Nc(){try{let e=await fE();global.hdb_users=e}catch(e){throw Re.error(e),e}}a(Nc,"setUsersToGlobal");async function ZP(e,t,r=!0){global.hdb_users||await Nc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ps(new Error,yg.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ps(new Error,yg.USER_INACTIVE,Ms.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(kP.get(t)===n.password)return s;if(wg.validate(n.password,t))kP.set(t,n.password);else throw Ps(new Error,yg.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return s}a(ZP,"findAndValidateUser");async function wZ(){global.hdb_users||await Nc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wZ,"getSuperUser");async function CZ(){let e=await fE(),t=hZ.getConfigFromFile(xP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!nn.isEmpty(r)&&r?.role?.role===xP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Lg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+FP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+FP.SERVER_SUFFIX.ADMIN,r}a(CZ,"getClusterUser");var eM=[];Pg.invalidateUser=function(e){for(let t of eM)try{t(e)}catch(r){SZ.error("Error invalidating user",r)}};Pg.onInvalidatedUser=function(e){eM.push(e)}});var Iu=T((age,iM)=>{"use strict";var ca=x(),sn=C(),LZ=uw(),ige=Ln(),oge=Ji(),DZ=wr(),{validateEvent:rM}=Xn(),yu=Cn(),PZ=require("process"),{resetDatabases:MZ}=(ge(),oe(Fe)),UZ={[sn.ITC_EVENT_TYPES.SCHEMA]:vZ,[sn.ITC_EVENT_TYPES.USER]:sM};async function vZ(e){let t=rM(e);if(t){ca.error(t);return}ca.trace("ITC schemaHandler received schema event:",e),await LZ(e.message),await BZ(e.message)}a(vZ,"schemaHandler");async function BZ(e){try{yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=MZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ca.error(t)}}a(BZ,"syncSchemaMetadata");var nM=[];async function sM(e){try{try{yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),yu.resetReadTxn(sn.SYSTEM_SCHEMA_NAME,sn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ca.warn(r)}let t=rM(e);if(t){ca.error(t);return}ca.trace(`ITC userHandler ${sn.HDB_ITC_CLIENT_PREFIX}${PZ.pid} received user event:`,e),await DZ.setUsersToGlobal();for(let r of nM)r()}catch(t){ca.error(t)}}a(sM,"userHandler");sM.addListener=function(e){nM.push(e)};iM.exports=UZ});var Xn=T((fge,aM)=>{"use strict";var lge=x(),Mg=K(),HZ=C(),{ITC_ERRORS:wu}=Wr(),{parentPort:uge,threadId:qZ,isMainThread:GZ,workerData:_ge}=require("worker_threads"),{onMessageFromWorkers:xZ,broadcast:dge,broadcastWithAcknowledgement:FZ}=tt();aM.exports={sendItcEvent:kZ,validateEvent:oM,SchemaEventMsg:$Z,UserEventMsg:VZ};var EE;xZ(async(e,t)=>{EE=EE||Iu(),oM(e),EE[e.type]&&await EE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kZ(e){return!GZ&&e.message&&(e.message.originator=qZ),FZ(e)}a(kZ,"sendItcEvent");function oM(e){if(typeof e!="object")return wu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Mg.isEmpty(e.type))return wu.MISSING_TYPE;if(!e.hasOwnProperty("message")||Mg.isEmpty(e.message))return wu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Mg.isEmpty(e.message.originator))return wu.MISSING_ORIGIN;if(HZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wu.INVALID_EVENT(e.type)}a(oM,"validateEvent");function $Z(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($Z,"SchemaEventMsg");function VZ(e){this.originator=e}a(VZ,"UserEventMsg")});var ii=T((pge,_M)=>{"use strict";var cM=C(),hge=K(),hE=x(),lM=VI(),bc,{sendItcEvent:uM}=Xn();function YZ(e){try{hE.trace("signalSchemaChange called with message:",e),bc=bc||Iu();let t=new lM(cM.ITC_EVENT_TYPES.SCHEMA,e);return bc.schema(t),uM(t)}catch(t){hE.error(t)}}a(YZ,"signalSchemaChange");function KZ(e){try{hE.trace("signalUserChange called with message:",e),bc=bc||Iu();let t=new lM(cM.ITC_EVENT_TYPES.USER,e);return bc.user(t),uM(t)}catch(t){hE.error(t)}}a(KZ,"signalUserChange");_M.exports={signalSchemaChange:YZ,signalUserChange:KZ}});var Mu={};$e(Mu,{addAnalyticsListener:()=>Pu,recordAction:()=>on,recordActionBinary:()=>Dn,setAnalyticsEnabled:()=>WZ});function WZ(e){gM=e}function on(e,t,r,n,s){if(!gM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=SE.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},SE.set(i,o)}pE||QZ()}function Dn(e,t,r,n,s){on(!!e,t,r,n,s)}function Pu(e){OM.push(e)}function QZ(){pE=performance.now(),setTimeout(async()=>{let e=performance.now()-pE;pE=0;let t=[],r={time:Date.now(),period:e,threadId:la.threadId,metrics:t};for(let[s,i]of SE){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 NM){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 bM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:la.threadId,byThread:!0,...n});for(let s of OM)s(t);SE=new Map,la.parentPort?la.parentPort.postMessage({type:AM,report:r}):wM({report:r})},RM).unref()}async function jZ(e,t=6e4){let r=Bg(),n=yM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let R=performance.now();R-S>5e3&&(0,Cu.warn)("Unusually high event queue latency on the main thread of "+Math.round(R-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let R=performance.now();R-S>5e3&&(0,Cu.warn)("Unusually high task queue latency on the main thread of "+Math.round(R-S)+"ms"),m(R-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:R,threadId:g}=S;for(let A of R||[]){let{path:P,method:v,type:U,metric:F,count:H,total:j,distribution:z,threads:J,...Ae}=A;H||(H=1);let ue=F+(P?"-"+P:"");v!==void 0&&(ue+="-"+v),U!==void 0&&(ue+="-"+U);let Ee=c.get(ue);if(Ee){if(Ee.threads){let qe=Ee.threads[g];if(qe)Ee=qe;else{Ee.threads[g]=Object.assign({},Ae);continue}}Ee.count||(Ee.count=1);let Me=Ee.count;for(let qe in Ae){let Gt=Ae[qe];typeof Gt=="number"&&(Ee[qe]=(Ee[qe]*Me+Gt*H)/(Me+H))}Ee.count+=H,j>=0&&(Ee.total+=j,Ee.ratio=Ee.total/Ee.count)}else Ee=Object.assign({period:t},A),delete Ee.distribution,c.set(ue,Ee),Ee.byThread&&(Ee.threads=[],Ee.threads[g]=Object.assign({},Ae),_.push(Ee));if(z){z=z.map(qe=>typeof qe=="number"?{value:qe,count:1}:qe);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await bM()}for(let m of _){let{path:S,method:R,type:g,metric:A,count:P,total:v,distribution:U,threads:F,...H}=m;F=F.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of F){let Ae=J[j];typeof Ae=="number"&&(z+=Ae)}m[j]=z}m.count=F.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let R=c.get(m);S.sort((qe,Gt)=>qe.value>Gt.value?1:-1);let g=R.count-1,A=[],P=0,v=0,U;for(let qe of NM){let Gt=g*qe;for(;P<Gt;)U=S[v++],P+=U.count,v===1&&P--;let yd=S[v>1?v-2:0];U||(U=S[0]),A.push(U.value-(U.value-yd.value)*(P-Gt)/U.count)}let[F,H,j,z,J,Ae,ue,Ee,Me]=A;Object.assign(R,{p1:F,p10:H,p25:j,median:z,p75:J,p90:Ae,p95:ue,p99:Ee,p999:Me})}let d;for(let[m,S]of c)S.id=(0,mE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(R=>{R||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,mE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-dM,active:h-fM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(R=>{R||n.primaryStore.put(m,S)})}dM=E,fM=h}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 Bg(){return hM||(hM=ft({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function yM(){return pM||(pM=ft({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function XZ(){IM=!0;let e=(0,Du.get)(vg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await jZ(RM,e),await EM(Bg(),zZ),await EM(yM(),JZ)},Math.min(e/2,2147483647)).unref()}function wM(e,t){let r=e.report;r.threadId=t?.threadId||la.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(mM+=n.mean*n.count);r.totalBytesProcessed=mM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(SM.get(t))}),SM.set(t,t.performance.eventLoopUtilization())),r.id=(0,mE.getNextMonotonicTime)(),Bg().primaryStore.put(r.id,r),IM||XZ(),ZZ&&(CM=t5(r))}async function t5(e){if(await CM,!ro){let r=(0,Lu.dirname)((0,Cu.getLogFilePath)());try{ro=await(0,Ug.open)((0,Lu.join)(r,"analytics.log"),"r+")}catch{ro=await(0,Ug.open)((0,Lu.join)(r,"analytics.log"),"w+")}}let t=(await ro.stat()).size;if(t>e5){let r=Buffer.alloc(t);await ro.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ro.write(r,{position:0}),await ro.truncate(r.length),t=r.length}await ro.write(JSON.stringify(e)+`
9
- `,t)}var la,TM,Cu,Lu,Ug,mE,Du,vg,SE,gM,pE,RM,AM,OM,NM,dM,fM,bM,zZ,JZ,hM,pM,IM,mM,SM,ZZ,CM,ro,e5,ui=Ne(()=>{la=require("worker_threads"),TM=q(tt());ge();Cu=q(x()),Lu=require("path"),Ug=require("fs/promises"),mE=q(Tr()),Du=q(X()),vg=q(C());mr();(0,Du.initSync)();SE=new Map,gM=(0,Du.get)(vg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(WZ,"setAnalyticsEnabled");a(on,"recordAction");it.recordAnalytics=on;a(Dn,"recordActionBinary");pE=0,RM=1e3,AM="analytics-report",OM=[];a(Pu,"addAnalyticsListener");NM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(QZ,"sendAnalytics");a(jZ,"aggregation");dM=0,fM=0,bM=a(()=>new Promise(setImmediate),"rest");a(EM,"cleanup");zZ=36e5,JZ=31536e6;a(Bg,"getRawAnalyticsTable");a(yM,"getAnalyticsTable");(0,TM.setChildListenerByType)(AM,wM);a(XZ,"startScheduledTasks");mM=0,SM=new Map,ZZ=!1;a(wM,"recordAnalytics");e5=1e6;a(t5,"logAnalytics")});var LM={};$e(LM,{Headers:()=>no,appendHeader:()=>Hg});function Hg(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 no,Uu=Ne(()=>{no=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(Hg,"appendHeader")});var Fg={};$e(Fg,{coerceType:()=>TE,makeTable:()=>AE,setServerUtilities:()=>u5,updateResource:()=>gE});function AE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),FI(i,l);let R=iS(i,n,l),g=0,A,P,v={},U=Promise.resolve(),F,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(F=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(v=W);let z,J=[],Ae=[],ue=1,Ee=2,Me={},qe={},Gt=864e5,yd,Id,Bi,Yb=!1,Cm,lV=i.getRange({start:!1,end:!1}).constructor,uV=10,_V=6;h&&Qb();class Xe extends jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,N){N&&(this.sourceOptions=N,(N.expiration||N.eviction||N.scanInterval)&&this.setTTLExpiration(N)),N?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),P=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,B)=>{if(k?.source!==M)return M[D](L,B,k)}}else return(M,k,L)=>{let B=[];for(let $ of y){if(M?.source===$)break;B.push($[D](k,L,M))}return Promise.all(B)}},"getApplyToIntermediateSource"),b=this.sources[this.sources.length-1],O=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 Me={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},qe={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,B=M.table?ot[c][M.table]:Xe;if(c===as.SYSTEM_SCHEMA_NAME&&(M.table===as.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===as.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=L[B.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let $=await B.getResource(M.id,k,yc);switch(M.type){case"put":return $._writeUpdate(L,!0,yc);case"patch":return $._writeUpdate(L,!1,yc);case"delete":return $._writeDelete(yc);case"publish":return $._writePublish(L,yc);case"invalidate":return $.invalidate(yc);default:nt.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let k=p.subscribeOnThisThread?p.subscribeOnThisThread((0,_a.getWorkerIndex)()):(0,_a.getWorkerIndex)()===0,L=M&&k&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L){let B;for await(let $ of L)try{if(!($.type==="transaction"?$.writes[0]:$)){nt.error("Bad subscription event",$);continue}if($.source=p,B)if($.beginTxn)B.resolve();else{y($,B);continue}if($.type==="end_txn")continue;let ye=Ze($,()=>{if($.type==="transaction"){let te=[];for(let Be of $.writes)try{te.push(y(Be,$))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify($),le}return Promise.all(te)}else if($.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of $.attributes)te.find(ke=>ke.name===le.name)||(te.push(le),Be=!0);Be&&(ft({table:s,database:c,attributes:te,origin:"cluster"}),Fu.signalSchemaChange(new ku.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return $.beginTxn?(B=$,y($,$),new Promise(te=>{B.resolve=te})):y($,$)});D&&(await ye,Fu.signalUserChange(new ku.UserEventMsg(process.pid))),$.onCommit&&(ye?.then?ye.then($.onCommit):$.onCommit())}catch(ce){nt.error("error in subscription handler",ce)}}}catch(M){nt.error(M)}})(),this}static getResource(p,N,I){let b=super.getResource(p,N,I);if(p!=null){Il(p);try{if(b.hasOwnProperty(fe))return b;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let O=!I?.async||i.cache?.get(p),D=Yn(N),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lm(p,N,{transaction:y},O,M=>{if(M?gE(b,M):b[fe]=null,N.onlyIfCached&&N.noCacheStore){if(!b.doesExist())throw new Pn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let k=Dm(p,M,N,b);if(k)return D?.disregardReadTxn(),b[qg]=!0,xg(k,L=>(gE(b,L),b))}return b})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(p)),O}}return b}ensureLoaded(){let p=Dm(this[Ue],this[an],this[be]);if(p)return this[qg]=!0,xg(p,N=>{this[an]=N,this[fe]=N.value,this[Gu]=N.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,Gt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");Gt=Gt||(f+E)/4,Mm()}static enableAuditing(p=!0){h=p,p&&Qb(),Xe.audit=p}static coerceId(p){return p===""?null:TE(p,v)}static async dropTable(){if(delete ot[c][s],c===o){for(let p of S)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));Fu.signalSchemaChange(new ku.SchemaEventMsg(process.pid,as.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[In])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let N=Xe.getRecordCount();return{recordCount:N.recordCount,estimatedRecordRange:N.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[be]?.returnNonexistent)return this}allowRead(p,N){let I=Cd(p);if(I?.read){if(I.isSuperUser)return!0;let b=I.attribute_permissions,O=N?.select;if(b?.length>0||Yb&&O){if(N||(N={}),O){let D=b?.length>0&&Gg(b,"read");N.select=O.map(y=>{let M=y.name||y;if(!D||D[M]){let k=Bi[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 N.select=b.filter(D=>D.read&&!Bi[D.attribute_name]).map(D=>D.attribute_name);return N}else return!0}}allowUpdate(p,N){let I=Cd(p);if(I?.update){let b=I.attribute_permissions;if(b?.length>0){let O=Gg(b,"update");for(let D in N)if(!O[D])return!1;for(let D of b){let y=D.attribute_name;!D.update&&!(y in N)&&(N[y]=this.getProperty(y))}}return!0}}allowCreate(p,N){if(this[In]){let I=Cd(p);if(I?.insert){let b=I.attribute_permissions;if(b?.length>0){let O=Gg(b,"insert");for(let D in N)if(!O[D])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Cd(p)?.delete}update(p,N){if(!Yn(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&&(N?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Dt]=p):(b=this[Dt],b&&(p=Object.assign(b,p)),this[Dt]=b=p)),this._writeUpdate(this[Dt],N),this}addTo(p,N){if(typeof N=="number")this[vu]===PM?this.set(p,(+this.getProperty(p)||0)+N):(this[vu]||this.update(),this.set(p,new sf(N)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,N){if(typeof N=="number")return this.addTo(p,-N);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let N=this[be],I=this[Ue];Il(I),Yn(this[be]).addWrite({key:I,store:i,invalidated:!0,entry:this[an],nodeName:this[be]?.nodeName,before:Me.invalidate?.bind(this,N,I),beforeIntermediate:qe.invalidate?.bind(this,N,I),commit:(O,D)=>{if(D?.version>O)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);R(I,y,this[an],O,Bu,h,this[be],0,"invalidate")}})}static evict(p,N,I){let b=this.Source,O;if(!((P||h)&&(!N||(O=i.getEntry(p),!O||!N)||O.version!==I))){if(P){if(i.hasLock(p,O.version))return;let D;for(let y in r)D||(D={}),D[y]=N[y];if(D)return R(p,D,O,I,Hu,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{wd(p,N,null)}),h?R(p,null,O,I,Hu,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=s,p.schema||=c,qM.operation(p,N)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,N,I){let b=this[be],O=Yn(b),D=this[Ue];Il(D);let y=this[an];this[vu]=N?PM:a5;let M={key:D,store:i,entry:y,nodeName:b?.nodeName,validate:k=>{p||(p=this[Dt]),N||p&&rf(p)?b?.source||(O.checkOverloaded(),this.validate(p,!N),H&&(p[H.name]=H.type==="Date"?new Date(k):H.type==="String"?new Date(k).toISOString():k),N&&(t&&p[t]!==D&&(p[t]=D),F&&(y?.value?p[F.name]=y?.value[F.name]:p[F.name]=F.type==="Date"?new Date(k):F.type==="String"?new Date(k).toISOString():k),p=ko(p))):O.removeWrite(M)},before:N?Me.put?()=>Me.put(b,D,p):null:Me.patch?()=>Me.patch(b,D,p):Me.put?()=>Me.put(b,D,ko(this)):null,beforeIntermediate:N?qe.put?()=>qe.put(b,D,p):null:qe.patch?()=>qe.patch(b,D,p):qe.put?()=>qe.put(b,D,ko(this)):null,commit:(k,L,B)=>{if(B){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this[an]=L,L?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");N||(this[fe]=L?.value??null)}this[Dt]=p,this[Gu]=k;let $=L?.value,ce=p;if(this[vu]=0,L?.version>=k)if(h){let le=L.localTime,ke=L.version;for(;ce&&(le>k||ke>=k&&le>0);){let re=l.get(le);if(!re)break;let Z=xt(re);if(ke=Z.version,ke>k){if(Z.type==="patch"){let Oe=Z.getValue(i);ce=ef(ce,Oe)}else if(Z.type==="put"||Z.type==="delete")return}else if(ke===k)return;le=Z.previousLocalTime}}else{if(N)return;ce=ef(ce,$)}let ye;if(N?ye=ce:(this[fe]=$,ye=N?ce:ko(this,ce)),this[fe]=ye,ye?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;N||(te=p),wd(D,$,ye);let Be=N?"put":"patch";R(D,ye,L,k,0,h,b,b.expiresAt||(f?f+Date.now():0),Be,!1,te)}};O.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[In]){for await(let N of this.search(p))(await Xe.getResource(N[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let N=Yn(this[be]),I=this[Ue];Il(I);let b=this[be];return N.addWrite({key:I,store:i,resource:this,nodeName:b?.nodeName,before:Me.delete?.bind(this,b,I),beforeIntermediate:qe.delete?.bind(this,b,I),commit:(O,D,y)=>{let M=D?.value;y&&(b&&D?.version>(b.lastModified||0)&&(b.lastModified=D.version),gE(this,D)),!(D?.version>O)&&(wd(this[Ue],M),nt.trace("Write delete entry",I,O),h||m?(R(I,null,this[an],O,0,h,this[be],0,"delete"),h||Mm()):i.remove(this[Ue]))}}),!0}search(p){let N=this[be],I=Yn(N);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[Ue]&&(b=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(b));let O,D={};function y(Z,Oe){let Ge;switch(Oe){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');Ge=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}let gs=Ge&&{},Hi;for(let je of Z){if(je.conditions){je.conditions=y(je.conditions,je.operator);continue}let Wt=je[0]??je.attribute,On=Wt==null?v:ti(S,Wt);if(On){if(Ge){let Rs=jn(Wt),Qt=gs[Rs];Qt?(Qt.push(je),Hi=!0):gs[Rs]=[je]}(On.type||SS[je.comparator])&&(je[1]===void 0?je.value=k(je.value,On):je[1]=k(je[1],On))}else if(Wt!=null)throw(0,Pn.handleHDBError)(new Error,`${Wt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Hi)for(let je in gs){let Wt=gs[je],On=Wt.length;if(On>1)for(let Rs=0;Rs<On;Rs++){let Qt=Wt[Rs];if(Qt.comparator==="ge"||Qt.comparator==="greater_than_equal")for(let qi=0;qi<On;qi++){let Xa=Wt[qi];(Xa.comparator==="le"||Xa.comparator==="less_than_equal")&&(Qt.comparator="between",Qt.value=[Qt.value,Xa.value],Z.splice(Z.indexOf(Xa),1))}if(Qt.comparator==="equals"||!Qt.comparator){for(let qi=0;qi<On;qi++)if(qi!==Rs){let Xa=Wt[qi];Z.splice(Z.indexOf(Xa),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,Oe){if(p.enforceExecutionOrder)return Z;for(let Ge of Z)Ge.conditions&&(Ge.conditions=M(Ge.conditions,Ge.operator));return Z.length>1&&Oe!=="or"?(0,HM.sortBy)(Z,_f(Xe)):Z}a(M,"orderConditions");function k(Z,Oe){return Array.isArray(Z)?Z.map(Ge=>TE(Ge,Oe)):TE(Z,Oe)}a(k,"coerceTypedValues");let L=p.operator;(b.length>0||L)&&(b=y(b,L));let B=typeof p.sort=="object"&&p.sort,$;if(B&&L!=="or"){let Z=B.attribute;if(O=b.find(Oe=>jn(Oe.attribute)===jn(Z)),!O){if(!ti(S,Z))throw(0,Pn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);O={attribute:Z,comparator:"sort"},b.push(O)}O.descending=!!B.descending}b=M(b,L),B&&(b[0]===O?B.next&&($={dbOrderedAttribute:B.attribute,attribute:B.next.attribute,descending:B.next.descending,next:B.next.next}):(O&&b.splice(b.indexOf(O),1),$=B));let ce=p.select;if(b.length===0&&(b=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:b,operator:L,postOrdering:$,selectApplied:!!ce};let ye=I.useReadTxn(),te=TS(b,L,Xe,ye,p,N,(Z,Oe)=>Kb(Z,ce,N,ye,Oe),D),Be=p.ensureLoaded!==!1;$||(te=re(te));let le=Xe.transformEntryForSelect(ce,N,ye,D,Be,!0),ke=Xe.transformToOrderedSelect(te,ce,$,ye,N,le);function re(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(re,"applyOffset"),$&&(ke=re(ke)),ke.onDone=()=>{ke.onDone=null,I.doneReadTxn()},ke.selectApplied=!0,ke.getColumns=()=>{if(ce){let Z=[];for(let Oe of ce)Oe==="*"?Z.push(...S.map(Ge=>Ge.name)):Z.push(Oe.name||Oe);return Z}return S.map(Z=>Z.name)},ke}static transformToOrderedSelect(p,N,I,b,O,D){let y=new lV;if(I){p=Kb(p,N,b,O,null);let M;y.iterate=function(){let L,B=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),$,ce=I.dbOrderedAttribute,ye,te,Be=!0;function le(re){let Z=re.next&&le(re.next),Oe=re.descending;return(Ge,gs)=>{let Hi=Pm(Ge,re.attribute,b),je=Pm(gs,re.attribute,b),Wt=Oe?(0,da.compareKeys)(je,Hi):(0,da.compareKeys)(Hi,je);return Wt===0?Z?.(Ge,gs)||0:Wt}}a(le,"createComparator");let ke=le(I);return{async next(){let re;if(L)if(re=L.next(),re.done){if($)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};M=[],ye&&M.push(ye);do if(re=await B.next(),re.done){if($=!0,M.length)break;return y.onDone&&y.onDone(),re}else{let Z=re.value;if(Z?.then&&(Z=await Z),ce){let Oe=Pm(Z,ce,b);if(Be)Be=!1,te=Oe;else if(Oe!==te){te=Oe,ye=Z;break}}M.push(Z)}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(),B.return()},throw(){y.onDone&&y.onDone(),B.throw()}}};let k=a(L=>{if(typeof N=="object"&&Array.isArray(L.attribute))for(let B=0;B<N.length;B++){let $=N[B],ce;if($.name===L.attribute[0]){for(ce=$.sort||($.sort={});ce.next;)ce=ce.next;ce.attribute=L.attribute.slice(1),ce.descending=L.descending}else $===L.attribute[0]&&(N[B]=ce={name:$,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,N,I,b,O,D){if(p&&(p===t||p?.length===1&&p[0]===t)){let L=a(B=>B?.key??B,"transform");return p===t?L:p.asArray?B=>[L(B)]:B=>({[t]:L(B)})}let y;O&&P&&!p?.every(L=>{let B;return typeof L=="object"?B=L.name:B=L,r[B]||B===t})&&(y=!0);let M,k=a(function(L){let B;if(L!=null){if(Cm=L,B=L.value||L.deref?.(),!B&&(L.key===void 0||L.deref)){if(L=Lm(L.key??L,N,{transaction:I,lazy:p?.length<4},this.isSync,$=>$),L?.then)return L.then(k.bind(this));B=L?.value}if(y&&(L.metadataFlags&(Bu|Hu)||L.expiresAt&&L.expiresAt<Date.now())){let $=Dm(L.key??L,L,N);if($?.then)return $.then(k)}}if(B==null)return D?ua.SKIP:B;if(p&&!(p[0]==="*"&&p.length===1)){let $,ce=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let ke=Bi?.[le],re;if(ke){let Z=b?.[le];if(Z)if(Z.hasMappings){let Ge=ke.from?B[ke.from]:jn(L.key);re=Z.get(Ge),re||(re=[])}else re=Z.fromRecord?.(B);else re=ke(B,N,L);let Oe=a(Ge=>{if(Ge&&typeof Ge=="object"){let gs=ke.definition?.tableClass||Xe;M||(M={});let Hi=M[le]||(M[le]=gs.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),N,I,Z,O));if(Array.isArray(Ge)){let je=[],Wt=gs.transformToOrderedSelect(Ge,te.select,typeof te.sort=="object"&&te.sort,N,I,Hi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),On=a(Qt=>{for(;!Qt.done;){if(Qt?.then)return Qt.then(On);je.push(Qt.value),Qt=Wt.next()}Be(je,le)},"nextValue"),Rs=On(Wt.next());Rs&&($||($=[]),$.push(Rs));return}else if(Ge=Hi.call(this,Ge),Ge?.then){$||($=[]),$.push(Ge.then(je=>Be(je,le)));return}}Be(Ge,le)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(Oe))):Oe(re);return}else re=B[le],re&&typeof re=="object"&&le!==te&&(re=Xe.transformEntryForSelect(te.select||te,N,I,null)({value:re}));Be(re,le)},"selectAttribute"),ye;if(typeof p=="string")ce(p,te=>{ye=te});else if(Array.isArray(p))if(p.asArray)ye=[],p.forEach((te,Be)=>{te==="*"?p[Be]=B:ce(te,le=>ye[Be]=le)});else{ye={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in B)ye[le]=B[le];else ce(Be,(le,ke)=>{le===void 0&&te&&(le=null),ye[ke]=le})}else throw new Pn.ClientError("Invalid select"+p);return $?Promise.all($).then(()=>ye):ye}return B},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||ft({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let N=!p.rawEvents,I=GI(Xe,this[Ue]??null,function(y,M,k,L){try{let B=M.getValue?.(i,N);if(!B&&M.type==="patch"&&N){let $=i.getEntry(y);$?.version===M.version?B=$.value:B=M.getValue?.(i,!0,k),M.type="put"}this.send({id:y,timestamp:k,value:B,version:M.version,type:M.type,beginTxn:L})}catch(B){nt.error(B)}},p.startTime||0,this[In]);this[In]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let b=this[Ue],O=p.previousCount;O>1e3&&(O=1e3);let D=p.startTime;if(this[In]){if(D){if(O)throw new Pn.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;if(b==null||vM(b,L)){let B=k.getValue(i,N,y);I.send({id:L,timestamp:y,value:B,version:k.version,type:k.type})}I.startTime=y}}else if(O){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 B=L.recordId;if(b==null||vM(b,B)){let $=L.getValue(i,N,M);if(y.push({id:B,timestamp:M,value:$,version:L.version,type:L.type}),--O<=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,da.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:L,value:M,version:k,type:"put"})}else{O&&!D&&(D=0);let y=this[an]?.localTime;if(y===sS&&(i.cache?.delete(b),this[an]=i.getEntry(b),nt.trace("re-retrieved record",y,this[an]?.localTime),y=this[an]?.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 B=xt(L),$=B.getValue(i,N,k);N&&(B.type="put"),M.push({id:b,value:$,timestamp:k,...B}),k=B.previousLocalTime}else break;O&&O--}while(k>D&&O!==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[Gu],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[vu])}publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let I=Yn(this[be]),b=this[Ue]||null;Il(b);let O=this[be];I.addWrite({key:b,store:i,entry:this[an],nodeName:O?.nodeName,validate:()=>{O?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,O,b,p),beforeIntermediate:qe.publish?.bind(this,O,b,p),commit:(D,y,M)=>{y===void 0&&m&&!h&&Mm(),R(b,y?.value??null,y,y?.version||D,0,!0,O,y?.expiresAt,"message",!1,p)}})}validate(p,N){let I,b=a((O,D,y)=>{if(D.type&&O!=null)if(N&&O.__op__&&(O=O.value),D.properties){typeof O!="object"&&(I||(I=[])).push(`Value ${os(O)} 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 B=M[k],$=b(O[B.name],B,y+"."+B.name);$&&(O[B.name]=$)}if(D.sealed&&O!=null&&typeof O=="object")for(let k in O)M.find(L=>L.name===k)||(I||(I=[])).push(`Property ${k} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof O!="number"||O>>0!==O)&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(D.elements)for(let M=0,k=O.length;M<k;M++){let L=O[M],B=b(L,D.elements,y+"[*]");B&&(O[M]=B)}}else(I||(I=[])).push(`Value ${os(O)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&O==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,D=S.length;O<D;O++){let y=S[O];if(!y.relationship&&(!N||y.name in p)){let M=b(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let O in p)S.find(D=>D.name===O)||(I||(I=[])).push(`Property ${O} is not allowed`);if(I)throw new Pn.ClientError(I.join(". "))}getUpdatedTime(){return this[Gu]}wasLoadedFromSource(){return P?!!this[qg]:void 0}static async addAttributes(p){let N=S.slice(0);for(let I of p){if(!I.name)throw new Pn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new Pn.ClientError("Attribute names cannot include backticks or forward slashes");N.push(I)}return ft({table:s,database:c,schemaDefined:_,attributes:N}),Xe.indexingOperation}static async removeAttributes(p){let N=S.filter(I=>!p.includes(I.name));return ft({table:s,database:c,schemaDefined:_,attributes:N}),Xe.indexingOperation}static getRecordCount(p){let N=i.getStats().entryCount,I=5e3,b=1e3,O;N>I&&!p?.exactCount&&(O=b);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&D++;if(O){let y=D;D=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))Be!=null&&D++;let M=O*2,k=(D+y)/M,L=Math.pow((D-y+1)/O/2,2)+k*(1-k)/M,B=Math.max(Math.sqrt(L)*N,1),$=Math.round(k*N),ce=Math.max($-1.96*B,0),ye=Math.min($+1.96*B,N),te=Math.pow(10,Math.round(Math.log10(B)));return te>$&&(te=te/10),D=Math.round($/te)*te,{recordCount:D,estimatedRange:[Math.round(ce),Math.round(ye)]}}return{recordCount:D}}static updatedAttributes(){Bi=this.propertyResolvers={$id:(p,N,I)=>({value:I.key}),$updatedtime:(p,N,I)=>I.version,$record:(p,N,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let N=p.relationship;if(N)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),Yb=!0,N.to)p.elements?.definition?(Bi[p.name]=p.resolve=(I,b,O)=>{let D=I[N.from?N.from:t],y=p.elements.definition.tableClass;return O?ac({attribute:N.to,value:D},Yn(b).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:N.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,N.from&&(p.resolve.from=N.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(N.from){let I=p.definition||p.elements?.definition;I?(Bi[p.name]=p.resolve=(b,O,D)=>{let y=b[N.from];if(y!==void 0){if(p.elements){let M,k=y.map(L=>{let B=D?I.tableClass.primaryStore.getEntry(L,{transaction:Yn(O).getReadTxn()}):I.tableClass.get(L,O);return B?.then&&(M=!0),B});return N.filterMissing?M?Promise.all(k).then(L=>L.filter(BM)):k.filter(BM):M?Promise.all(k):k}return D?I.tableClass.primaryStore.getEntry(y,{transaction:Yn(O).getReadTxn()}):I.tableClass.get(y,O)}},p.set=(b,O)=>{if(Array.isArray(O)){let D=O.map(y=>y[Ue]||y[I.tableClass.primaryKey]);b[N.from]=D}else{let D=O[Ue]||O[I.tableClass.primaryKey];b[N.from]=D}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=N.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`)}of(this,this)}static async deleteHistory(p=0){let N;for(let{key:I,value:b}of l.getRange({start:0,end:p}))await qu(),xt(b).tableId===n&&(N=l.remove(I));await N}static async*getHistory(p=0,N=1/0){for(let{key:I,value:b}of l.getRange({start:p,end:N})){await qu();let O=xt(b);O.tableId===n&&(yield{id:O.recordId,localTime:I,version:O.version,type:O.type,value:O.getValue(i,!0,I),user:O.user})}}static async getHistoryOfRecord(p){let N=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return N;let b=I.localTime;if(!b)throw new Error("The entry does not have a local audit time");let O=0;do{await qu();let D=l.get(b);if(D){let y=xt(D);N.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(O<1e3&&b);return N.reverse()}static cleanup(){z?.remove()}}Xe.updatedAttributes();let dV=Xe.prototype;return dV[o5]=!0,f&&Xe.setTTLExpiration(f/1e3),j&&fV(),Xe;function wd(W,p,N){let I;for(let b in r){let O=r[b],D=O.isIndexing,y=N?.[b],M=p?.[b];if(y===M&&!D)continue;I=!0;let k=O.indexNulls,L=(0,xu.getIndexedValues)(M,k);if(L){DM&&O.prefetch(L.map(B=>({key:B,value:W})),UM);for(let B=0,$=L.length;B<$;B++)O.remove(L[B],W)}if(L=(0,xu.getIndexedValues)(y,k),L){DM&&O.prefetch(L.map(B=>({key:B,value:W})),UM);for(let B=0,$=L.length;B<$;B++)O.put(L[B],W)}}return I}a(wd,"updateIndices");function Il(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>MM)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,da.writeKey)(W,c5,0)>MM)throw new Error("Primary key size is too large: "+W.length);return!0}a(Il,"checkValidId");function Lm(W,p,N,I,b){let O=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),N.transaction?.isDone)return b(null,W);let D=i.getEntry(W,N);return D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),b(D,W)},"whenPrefetched");return I?O():ue>0?(ue--,O()):new Promise((D,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),k()})):(J.push(W),Ae.push(k),J.length>_V&&(ue--,M()));function M(){if(J.length>0){let L=Ae;i.prefetch(J,()=>{ue===-1?M():ue++;for(let B of L)B()}),J=[],Ae=[],Ee>2&&Ee--}else ue=Ee,Ee<uV&&Ee++}a(M,"prefetch");function k(){try{D(O())}catch(L){y(L)}}a(k,"load")})}a(Lm,"loadLocalRecord");function Cd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return l5;let N=p[c],I,b=N?.tables;if(b)return b[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Cd,"getTablePermissions");function Dm(W,p,N,I){if(P){let b;if(N.noCache?b=!0:(p?(!p.value||p.metadataFlags&(Bu|Hu)||p.expiresAt&&p.expiresAt<Date.now())&&(b=!0):b=!0,Dn(!b,"cache-hit",s)),b){let O=Wb(W,p,N).then(D=>(D?.value?.[fe]&&nt.error("Can not assign a record with a record property"),N&&(D?.version>(N.lastModified||0)&&(N.lastModified=D.version),N.lastRefreshed=Date.now()),D));if(N?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(O.catch(D=>nt.warn(D)),N?.onlyIfCached&&!I.doesExist())throw new Pn.ServerError("Entry is not cached",504);return}else return O}}}a(Dm,"ensureLoadedFromSource");function Yn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let N=p.next;if(!N)return p=p.next=new $o,p.lmdbDb=i,p;p=N}while(!0)}else return new lf}a(Yn,"txnForContext");function Pm(W,p,N){if(!W)return;Cm=W;let I=W.value||W.deref?.()||(Cm=i.getEntry(W.key))?.value;if(typeof p=="object"){let O=Bi,D=I;for(let y=0,M=p.length;y<M;y++){let k=p[y],L=O?.[k];D=L&&D?L(D,N,!0)?.value:D?.[k],O=L?.definition?.tableClass?.propertyResolvers}return D}let b=Bi[p];return b?b(I,N):I[p]}a(Pm,"getAttributeValue");function Kb(W,p,N,I,b){let O=b?.length,D={transaction:I,lazy:O>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M(k,L){let B=k?.value;if(!B)return ua.SKIP;for(let $=0;$<O;$++)if(!y?.includes($)&&!b[$](B,k))return ua.SKIP;return L!==void 0&&(k.key=L),k}if(a(M,"processEntry"),O>0||!W.hasEntries){let k=W.map(L=>{if(y=null,typeof L=="object"&&L.key!==void 0)return O>0?M(L):L;if(L==null)return ua.SKIP;for(let B=0;B<O;B++){let ce=b[B].idFilter;if(ce){if(!ce(L))return ua.SKIP;y||(y=[]),y.push(B)}}return Lm(L,N,D,!1,M)});return Array.isArray(W)&&(k=k.filter(L=>L!==ua.SKIP)),k.hasEntries=!0,k}return W}a(Kb,"transformToEntries");async function Wb(W,p,N){let I=p?.metadataFlags,b=p?.version,O,D;if(!i.attemptLock(W,b,()=>{clearTimeout(D);let L=i.getEntry(W);!L||!L.value||L.metadataFlags&(Bu|Hu)?O(Wb(W,i.getEntry(W),N)):O(L)}))return new Promise(L=>{O=L,D=setTimeout(()=>{i.unlock(W,b)},i5)});let y=p?.value,M={requestContext:N,replacingRecord:y,replacingVersion:b,source:null,resourceCache:N?.resourceCache},k=N?.responseHeaders;return new Promise((L,B)=>{let $;xg(Ze(M,async ce=>{let ye=performance.now(),te,Be,le;try{for(let Oe of Xe.sources)if(Oe.get&&(!Oe.get.reliesOnPrototype||Oe.prototype.get)&&(M.source=Oe,te=await Oe.get(W,M),te))break;le=I&Bu;let re=M.lastModified||le&&b;Be=le||re>b||!y,re||(re=(0,xu.getNextMonotonicTime)());let Z=performance.now()-ye;if(on(Z,"cache-resolution",s),k&&Hg(k,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ce.timestamp=re,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}$=!0,L({version:re,value:te})}catch(re){re.message+=` while resolving record ${W} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!N?.mustRevalidate||N?.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)")):B(re),M.transaction.abort();return}if(N?.noCacheStore){M.transaction.abort();return}Yn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(re,Z)=>{if(Z?.version!==b)return;let Oe=wd(W,y,te);te?(qe.put?.(M,W,te),R(W,te,Z,re,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(qe.delete?.(M,W),h||m?R(W,null,Z,re,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,b))}})}),()=>{i.unlock(W,b)},ce=>{i.unlock(W,b),$&&nt.error("Error committing cache update",ce)})})}a(Wb,"getFromSource");function Mm(){if(Gt!==yd&&(yd=Gt,(0,_a.getWorkerIndex)()===(0,_a.getWorkerCount)()-1)){if(Id&&clearTimeout(Id),!Gt)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/Gt)*Gt+W.getTime(),N=a(I=>{nt.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Id=setTimeout(()=>U=U.then(async()=>{if(N(Math.max(I+Gt,Date.now())),i.rootStore.status!=="open"){clearTimeout(Id);return}let b=50,O=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:B}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let $;k===null&&!h&&L+s5<Date.now()?$=i.remove(M,L):B&&B+E<Date.now()&&($=Xe.evict(M,k,L),y++),$&&(await O[D],O[D]=$.catch(ce=>{nt.error("Cleanup error",ce)}),++D>=b&&(D=0)),await qu()}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");N(p)}}a(Mm,"scheduleCleanup");function Qb(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(Qb,"addDeleteRemoval");function fV(){(0,_a.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let{key:N,value:I}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let b=i.getEntry(I);b?.value?b.value[W]<Date.now()&&Xe.evict(I,b.value,b.version):i.ifVersion(I,b?.version,()=>p.remove(N,I)),await qu()}}catch(W){nt.error("Error in evicting old records",W)}},n5).unref()}a(fV,"runRecordExpirationEviction")}function Gg(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 UM(){}function u5(e){qM=e}function TE(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"&&!_5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,RE.autoCast)(e):e}function vM(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 xg(e,t,r){return e?.then?e.then(t,r):t(e)}function gE(e,t){e[an]=t,e[fe]=t?.value??null,e[Gu]=t?.version}function BM(e){return e!=null}function os(e){try{return JSON.stringify(e)}catch{return e}}var as,ua,xu,HM,$u,Pn,Fu,ku,nt,da,_a,RE,r5,qM,n5,s5,DM,i5,Gu,o5,an,vu,PM,a5,qg,yc,Bu,Hu,c5,MM,l5,$ge,_5,qu,OE=Ne(()=>{as=q(C()),ua=require("lmdb"),xu=q(Tr()),HM=require("lodash");Qn();pS();$u=q(X());kI();Pn=q(ie()),Fu=q(ii()),ku=q(Xn());ge();ff();nt=q(x());cf();Vo();da=require("ordered-binary"),_a=q(tt());xo();RE=q(K());Kl();ui();Xd();Uu();r5=new Uint8Array(9);r5[8]=192;n5=6e4,s5=864e5;$u.initSync();DM=$u.get(as.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),i5=1e4,Gu=Symbol.for("version"),o5=Symbol.for("incremental-update"),an=Symbol("entry"),vu=Symbol("is-saving"),PM=1,a5=2,qg=Symbol("loaded-from-source"),yc={isNotification:!0,ensureLoaded:!1},Bu=1,Hu=8,c5=Buffer.allocUnsafeSlow(8192),MM=1978,l5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},$ge=(0,RE.convertToMS)($u.get(as.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(AE,"makeTable");a(Gg,"attributesAsObject");a(UM,"noop");a(u5,"setServerUtilities");_5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(TE,"coerceType");a(vM,"isDescendantId");qu=a(()=>new Promise(setImmediate),"rest");a(xg,"when");a(gE,"updateResource");a(BM,"exists");a(os,"stringify")});var Fe={};$e(Fe,{database:()=>Tu,databases:()=>ot,dropDatabase:()=>QT,dropTableMeta:()=>m5,getDatabases:()=>ts,getTables:()=>d5,onUpdatedTable:()=>Kg,readMetaDb:()=>Vu,resetDatabases:()=>f5,table:()=>ft,tables:()=>ln});function d5(){return wE||ts(),ln||{}}function ts(){if(wE)return ot;wE=!0,Cc=new Map;let e=(0,or.getHdbBasePath)()&&(0,st.join)((0,or.getHdbBasePath)(),un.DATABASES_DIR_NAME),t=(0,or.get)(un.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,or.get)(un.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,cn.existsSync)(e)?e:(0,st.join)((0,or.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,cn.existsSync)(e))for(let r of(0,cn.readdirSync)(e,{withFileTypes:!0})){let n=(0,st.basename)(r.name,".mdb");r.isFile()&&(0,st.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Vu((0,st.join)(e,r.name),null,n)}if((0,cn.existsSync)((0,wc.getBaseSchemaPath)())){for(let r of(0,cn.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,cn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,st.extname)(i.name).toLowerCase()===".mdb"){let o=(0,st.join)(s,i.name);Vu((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,cn.existsSync)(s))for(let o of(0,cn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,st.extname)(o.name).toLowerCase()===".mdb"&&Vu((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,cn.existsSync)(l)&&Vu(l,o,r,null,!0)}}for(let r in ot){let n=Cc.get(r);if(n){let s=ot[r];r.includes("delete")&&Mn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Mn.trace(`delete table class ${i}`),delete s[i])}else if(delete ot[r],r==="data"){for(let s in ln)delete ln[s];delete ln[CE]}}return Cc=null,ot}}function f5(){wE=!1;for(let[,e]of so)e.needsDeletion=!0;ts();for(let[e,t]of so)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),so.delete(e));return ot}function Vu(e,t,r=Vg,n,s){let i=new kg.default(e,!1);try{let o=so.get(e);o?o.needsDeletion=!1:(o=(0,bE.open)(i),so.set(e,o));let c=new fa.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(NE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,cn.existsSync)(n)&&(i.path=n,_=(0,bE.open)(i),_.isLegacy=!0):_=Jd(o));let u=kM(r),d=u[CE],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 R=f.get(m);R||f.set(m,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.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 J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Mn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let R=u[E],g={},A=[],P,v,U=typeof S.audit=="boolean"?S.audit:(0,or.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(R)g=R.indices,A=R.attributes,R.schemaVersion++;else{P=S.tableId,P?P>=(l.get(Ic)||0)&&l.putSync(Ic,P+1):(S.tableId=P=l.get(Ic),P||(P=1),l.putSync(Ic,P+1),l.putSync(S.key,S));let J=new fa.default(!S.is_hash_attribute,S.is_hash_attribute);v=Wd(o.openDB(S.key,J)),v.rootStore=o,v.tableId=P}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!g[J.name]){let ue=new fa.default(!J.is_hash_attribute,J.is_hash_attribute);g[J.name]=o.openDB(J.key,ue),g[J.name].indexNulls=J.indexNulls}let Ae=A.find(ue=>ue.name===J.name);Ae?A.splice(A.indexOf(Ae),1,J):A.push(J)}}catch(Ae){Mn.error("Error trying to update attribute",J,A,g,Ae)}}if(!R){R=$M(u,E,AE({primaryStore:v,auditStore:_,audit:U,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:F,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let J of Yg)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function kM(e){let t=ot[e];if(t||(e==="data"?t=ot[e]=ln: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[CE]=r,Cc.set(e,r)}return t}function $M(e,t,r){return e[t]=r,r}function Tu({database:e,table:t}){e||(e=Vg),ts();let r=kM(e),n=(0,st.join)((0,or.getHdbBasePath)(),un.DATABASES_DIR_NAME),s=(0,or.get)(un.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,or.get)(un.CONFIG_PARAMS.STORAGE_PATH)||((0,cn.existsSync)(n)?n:(0,st.join)((0,or.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME));let o=(0,st.join)(n,(i?t:e)+".mdb"),c=so.get(o);if(!c){let l=new kg.default(o,!1);c=(0,bE.open)(l),so.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;so.delete(s.path),s.status==="open"&&(await s.close(),await GM.remove(s.path))}if(e==="data"){for(let r in ln)delete ln[r];delete ln[CE]}delete ot[e]}function ft({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=Vg);let d=Tu({database:t,table:e}),f=ot[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,R;_==null&&(_=!0);let g=new fa.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,P;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=Jd(d)),m=i.find(Ae=>Ae.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,or.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),Mn.trace(`${e} table loading, opening primary store`);let j=new fa.default(!1,!0),z=e+"/",J=Wd(d.openDB(z,j));J.rootStore=d,R=d.dbisDb=d.openDB(NE.INTERNAL_DBIS_NAME,g),J.tableId=R.get(Ic),J.tableId||(J.tableId=1),R.putSync(Ic,J.tableId+1),m.tableId=J.tableId,E=$M(f,e,AE({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:R})),E.schemaVersion=1,A=!0,F(),R.put(z,m)}S=E.indices,R=R||(d.dbisDb=d.openDB(NE.INTERNAL_DBIS_NAME,g)),E.dbisDB=R;let v=[];for(let{key:H,value:j}of R.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){F(),A=!0,R.remove(H);let ue=E.indices[z];ue&&v.push(ue)}}let U=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=R.get(j);if(H.isPrimaryKey){if(z=z||R.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Ae=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Ae.audit=o),r&&(Ae.expiration=+r),n&&(Ae.eviction=+n),c!==void 0&&(Ae.sealed=c),A=!0,F(),R.put(j,Ae)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Ae=new fa.default(!0,!1),ue=d.openDB(j,Ae);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Yu.workerData?.restartNumber)&&(A=!0,F(),z=R.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Yu.workerData?.restartNumber)&&(A=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),U.push(H))),R.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,F(),R.put(j,H))}}finally{P&&P()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Mn.trace(`${e} table loading, running index`),U.length>0||v.length>0?E.indexingOperation=p5(E,U,v):A&&yE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of Yg)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Mn.trace(`${e} table loaded`),E;function F(){P||d.transactionSync(()=>({then(H){P=H}}))}a(F,"startTxn")}async function p5(e,t,r){try{let n=e.schemaVersion;await yE.signalSchemaChange(new IE.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,xM.getIndexedValues)(u[h]);if(m)for(let S=0,R=m.length;S<R;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Mn.error(f)}),Yu.workerData&&Yu.workerData.restartNumber!==FM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>E5?await s:l>h5&&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 yE.signalSchemaChange(new IE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Mn.error("Error in indexing",n)}}function m5({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 Kg(e){Yg.push(e)}var or,NE,bE,st,cn,wc,fa,kg,un,GM,$g,xM,yE,IE,Yu,Mn,FM,Vg,CE,ln,ot,Ic,Yg,wE,so,Cc,E5,h5,ge=Ne(()=>{or=q(X()),NE=q(_t()),bE=require("lmdb"),st=require("path"),cn=require("fs"),wc=q(ze());OE();fa=q(Sf()),kg=q(gf()),un=q(C()),GM=q(require("fs-extra")),$g=require("../index"),xM=q(Tr()),yE=q(ii()),IE=q(Xn()),Yu=require("worker_threads"),Mn=q(x()),FM=q(tt());xo();Kl();Vg="data",CE=Symbol("defined-tables");(0,or.initSync)();ln=Object.create(null),ot=Object.create(null);(0,$g._assignPackageExport)("databases",ot);(0,$g._assignPackageExport)("tables",ln);Ic=Symbol.for("next-table-id"),Yg=[],so=new Map;a(d5,"getTables");a(ts,"getDatabases");a(f5,"resetDatabases");a(Vu,"readMetaDb");a(kM,"ensureDB");a($M,"setTable");a(Tu,"database");a(QT,"dropDatabase");a(ft,"table");E5=1e3,h5=10;a(p5,"runIndexing");a(m5,"dropTableMeta");a(Kg,"onUpdatedTable")});var K=T((Xge,nU)=>{"use strict";var io=require("path"),QM=require("fs-extra"),Cr=x(),VM=require("fs-extra"),LE=require("os"),S5=require("net"),T5=require("recursive-iterator"),at=C(),g5=Wm(),YM=require("papaparse"),DE=require("moment"),{inspect:R5}=require("util"),KM=require("is-number"),Jge=require("lodash"),A5=require("minimist"),O5=require("https"),N5=require("http"),{hdb_errors:PE}=ie(),b5=/^((\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)))$/,jM=require("util").promisify(setTimeout),y5=100,I5=5,w5="",C5=4,WM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};nU.exports={isEmpty:_n,isEmptyOrZeroLength:Us,arrayHasEmptyValues:P5,arrayHasEmptyOrZeroLengthValues:M5,buildFolderPath:U5,isBoolean:zM,errorizeMessage:L5,stripFileExtension:B5,autoCast:H5,autoCastJSON:JM,autoCastJSONDeep:Qg,removeDir:q5,compareVersions:G5,isCompatibleDataVersion:x5,escapeRawValue:F5,unescapeValue:k5,stringifyProps:$5,timeoutPromise:Y5,isClusterOperation:W5,getClusterUser:j5,checkGlobalSchemaTable:Q5,getHomeDir:ZM,getPropsFilePath:V5,promisifyPapaParse:z5,removeBOM:eU,createEventPromise:J5,checkProcessRunning:X5,checkSchemaTableExist:Z5,checkSchemaExists:tU,checkTableExists:rU,getStartOfTomorrowInSeconds:e8,getLimitKey:t8,isObject:v5,isNotEmptyAndHasValue:D5,autoCasterIsNumberCheck:XM,backtickASTSchemaItems:r8,isPortTaken:K5,createForkArgs:n8,autoCastBoolean:s8,async_set_timeout:jM,getTableHashAttribute:i8,doesSchemaExist:o8,doesTableExist:a8,stringifyObj:c8,ms_to_time:l8,changeExtension:u8,getEnvCliRootPath:jg,noBootFile:_8,httpRequest:d8,transformReq:f8,convertToMS:E8,PACKAGE_ROOT:at.PACKAGE_ROOT};function L5(e){return e instanceof Error?e:new Error(e)}a(L5,"errorizeMessage");function _n(e){return e==null}a(_n,"isEmpty");function D5(e){return!_n(e)&&(e||e===0||e===""||zM(e))}a(D5,"isNotEmptyAndHasValue");function Us(e){return _n(e)||e.length===0||e.size===0}a(Us,"isEmptyOrZeroLength");function P5(e){if(_n(e))return!0;for(let t=0;t<e.length;t++)if(_n(e[t]))return!0;return!1}a(P5,"arrayHasEmptyValues");function M5(e){if(Us(e))return!0;for(let t=0;t<e.length;t++)if(Us(e[t]))return!0;return!1}a(M5,"arrayHasEmptyOrZeroLengthValues");function U5(...e){try{return e.join(io.sep)}catch{console.error(e)}}a(U5,"buildFolderPath");function zM(e){return _n(e)?!1:e===!0||e===!1}a(zM,"isBoolean");function v5(e){return _n(e)?!1:typeof e=="object"}a(v5,"isObject");function B5(e){return Us(e)?w5:e.slice(0,-C5)}a(B5,"stripFileExtension");function H5(e){return _n(e)||e===""||typeof e!="string"?e:WM[e]!==void 0?WM[e]:XM(e)===!0?Number(e):b5.test(e)?new Date(e):e}a(H5,"autoCast");function JM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(JM,"autoCastJSON");function Qg(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=Qg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Qg(r);n!==r&&(e[t]=n)}return e}else return JM(e)}a(Qg,"autoCastJSONDeep");function XM(e){if(e.startsWith("0.")&&KM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&KM(e))}a(XM,"autoCasterIsNumberCheck");async function q5(e){if(Us(e))throw new Error(`Directory path: ${e} does not exist`);try{await VM.emptyDir(e),await VM.remove(e)}catch(t){throw Cr.error(`Error removing files in ${e} -- ${t}`),t}}a(q5,"removeDir");function G5(e,t){if(Us(e)){Cr.info("Invalid current version sent as parameter.");return}if(Us(t)){Cr.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(G5,"compareVersions");function x5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(x5,"isCompatibleDataVersion");function F5(e){if(_n(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(F5,"escapeRawValue");function k5(e){if(_n(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(k5,"unescapeValue");function $5(e,t){if(_n(e))return Cr.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+LE.EOL}!Us(n)&&n[0]===";"?r+=" "+n+s+LE.EOL:Us(n)||(r+=n+"="+s+LE.EOL)}catch{Cr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a($5,"stringifyProps");function ZM(){let e;try{e=LE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(ZM,"getHomeDir");function V5(){let e=io.join(ZM(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return QM.existsSync(e)||(e=io.join(__dirname,"../","hdb_boot_properties.file")),e}a(V5,"getPropsFilePath");function Y5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Y5,"timeoutPromise");async function K5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=S5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(K5,"isPortTaken");function W5(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(W5,"isClusterOperation");function Q5(e,t){let r=(ge(),oe(Fe)).getDatabases();if(!r[e])return PE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return PE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Q5,"checkGlobalSchemaTable");function j5(e,t){if(_n(t)){Cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(_n(e)||Us(e)){Cr.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){Cr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(j5,"getClusterUser");function z5(){YM.parsePromise=function(e,t,r){return new Promise(function(n,s){YM.parse(e,{header:!0,transformHeader:eU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(z5,"promisifyPapaParse");function eU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(eU,"removeBOM");function J5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Cr.info(`Got cluster status event response: ${R5(s)}`);try{i.cancel()}catch{Cr.error("Error trying to cancel timeout.")}n(s)})})}a(J5,"createEventPromise");async function X5(e){let t=!0,r=0;do await jM(y5*r++),(await g5.findPs(e)).length>0&&(t=!1);while(t&&r<I5);if(t)throw new Error(`process ${e} was not started`)}a(X5,"checkProcessRunning");function Z5(e,t){let r=tU(e);if(r)return r;let n=rU(e,t);if(n)return n}a(Z5,"checkSchemaTableExist");function tU(e){let{getDatabases:t}=(ge(),oe(Fe));if(!t()[e])return PE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(tU,"checkSchemaExists");function rU(e,t){let{getDatabases:r}=(ge(),oe(Fe));if(!r()[e][t])return PE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rU,"checkTableExists");function e8(){let e=DE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=DE().utc().unix();return e-t}a(e8,"getStartOfTomorrowInSeconds");function t8(){return DE().utc().format("DD-MM-YYYY")}a(t8,"getLimitKey");function r8(e){try{let t=new T5(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){Cr.error("Got an error back ticking items."),Cr.error(t)}}a(r8,"backtickASTSchemaItems");function n8(e){return[e]}a(n8,"createForkArgs");function s8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(s8,"autoCastBoolean");function i8(e,t){let{getDatabases:r}=(ge(),oe(Fe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(i8,"getTableHashAttribute");function o8(e){let{getDatabases:t}=(ge(),oe(Fe));return t()[e]!==void 0}a(o8,"doesSchemaExist");function a8(e,t){let{getDatabases:r}=(ge(),oe(Fe));return r()[e]?.[t]!==void 0}a(a8,"doesTableExist");function c8(e){try{return JSON.stringify(e)}catch{return e}}a(c8,"stringifyObj");function l8(e){let t=DE.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(l8,"ms_to_time");function u8(e,t){let r=io.basename(e,io.extname(e));return io.join(io.dirname(e),r+t)}a(u8,"changeExtension");function jg(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=A5(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(jg,"getEnvCliRootPath");var Wg;function _8(){if(Wg)return Wg;let e=jg();jg()&&QM.pathExistsSync(io.join(e,at.HDB_CONFIG_FILE))&&(Wg=!0)}a(_8,"noBootFile");function d8(e,t){let r;return e.protocol==="http:"?r=N5:r=O5,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(d8,"httpRequest");function f8(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(f8,"transformReq");function E8(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(E8,"convertToMS")});var X=T((eRe,aU)=>{"use strict";var zg=require("fs-extra"),Ea=require("path"),sU=require("os"),h8=require("properties-reader"),Wu=x(),Ku=K(),_e=C(),ME=Et(),p8="Error initializing environment manager",UE="BOOT_PROPS_FILE_PATH",iU=!1,m8={[_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},_i={};aU.exports={BOOT_PROPS_FILE_PATH:UE,getHdbBasePath:S8,setHdbBasePath:T8,get:oU,initSync:R8,setProperty:ve,initTestEnvironment:A8};function S8(){return _i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(S8,"getHdbBasePath");function T8(e){_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(T8,"setHdbBasePath");function oU(e){let t=ME.getConfigValue(e);return t===void 0?_i[e]:t}a(oU,"get");function ve(e,t){m8[e]&&(_i[e]=t),ME.updateConfigObject(e,t)}a(ve,"setProperty");function g8(){let e;try{e=Ku.getPropsFilePath(),zg.accessSync(e,zg.constants.F_OK|zg.constants.R_OK),iU=!0;let t=h8(e);return _i[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),_i[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),_i[UE]=e,!0}catch{return Wu.trace(`Environment manager found no properties file at ${e}`),!1}}a(g8,"doesPropFileExist");function R8(e=!1){try{(iU||g8()||Ku.noBootFile())&&(ME.initConfig(e),_i[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ME.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Wu.error(p8),Wu.error(t),console.error(t),process.exit(1)}}a(R8,"initSync");function A8(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=Ea.join(__dirname,"../../","unitTests");_i[UE]=Ea.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ea.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,sU.userInfo()?sU.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ea.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ea.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,Ea.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,oU(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ku.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Ku.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ea.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ku.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${UE}. Please check your boot props and settings files`;Wu.fatal(r),Wu.error(t)}}a(A8,"initTestEnvironment")});var Zg={};$e(Zg,{loadGQLSchema:()=>b8,start:()=>Xg,startOnMainThread:()=>N8});function Xg({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 v=function(U){if(U.kind==="NonNullType"){let j=v(U.type);return j.nullable=!1,j}if(U.kind==="ListType")return{type:"array",elements:v(U.type)};let H={type:U.name?.value};return Object.defineProperty(H,"location",{value:U.loc.startToken}),H};a(v,"getProperty");let R=S.name.value,g=[],A={table:null,database:null,properties:g};f.set(R,A);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)A[F.name.value]=F.value.value;A.schema&&(A.database=A.schema),A.table||(A.table=R),A.audit&&(A.audit=A.audit!=="false"),A.attributes=A.properties,E.push(A)}if(U.name.value==="sealed"&&(A.sealed=!0),U.name.value==="export"){A.export=!0;for(let F of U.arguments)F.name.value==="name"&&(A.export={name:F.value.value})}}let P=!1;for(let U of S.fields){let F=v(U.type);F.name=U.name.value,g.push(F);for(let H of U.directives)if(H.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,P=!0);else if(H.name.value==="indexed")F.indexed=!0;else if(H.name.value==="relationship"){let j={};for(let z of H.arguments)j[z.name.value]=z.value.value;F.relationship=j}else if(H.name.value==="createdTime")F.assignCreatedTime=!0;else if(H.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")F.expiresAt=!0;else if(H.name.value==="allow"){let j=F.authorizedRoles=[];for(let z of H.arguments)z.name.value==="role"&&j.push(z.value.value)}}A.type=R,R==="Query"&&(h=A)}function m(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?m(S.elements):O8.includes(S.type)||(0,cU.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 R of S.properties)m(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Jg.dirname)(n),S.tableClass):i.set((0,Jg.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Jg,cU,O8,N8,b8,lU=Ne(()=>{Jg=require("path");ge();cU=q(tt()),O8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Xg,"start");N8=Xg,b8=Xg({ensureTable:ft}).handleFile});async function vE(e){return y8?(Qu||(Qu=I8(C8)),(await(await Qu).import(e)).namespace):import(e)}async function I8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Qu=new Compartment({console,Math,Date,fetch:w8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,_U.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:jt,tables:ln,databases:ot})}};let n=await(0,uU.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Qu}function w8(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 C8(){return{Resource:jt,tables:ln}}var uU,_U,y8,Qu,eR=Ne(()=>{Qn();ge();uU=require("fs/promises"),_U=require("path"),y8=!1;a(vE,"secureImport");a(I8,"getCompartment");a(w8,"secureOnlyFetch");a(C8,"getGlobalVars")});var rR={};$e(rR,{handleFile:()=>L8});async function L8(e,t,r,n){let s=new Map,i=(0,dU.pathToFileURL)(r).toString(),o=await vE(i);l(o.default)&&n.set((0,tR.dirname)(t),o.default),c(o,(0,tR.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 dU,tR,fU=Ne(()=>{dU=require("url");eR();tR=require("path");a(L8,"handleFile")});var sR={};$e(sR,{start:()=>D8});function D8({resources:e}){e.set("login",nR),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var nR,EU=Ne(()=>{Qn();a(D8,"start");nR=class extends jt{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 RU={};$e(RU,{parse:()=>oR,streamAsJSON:()=>ju,stringify:()=>ha});function ju(e){return new iR({value:e})}function hU(e){return console.error(e),JSON.stringify(e.toString())}function pU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ha(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===TU)return gU(e);if(t.resolution)return t.resolution.then(()=>ha(e));throw t}}function gU(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+=gU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ha(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function oR(e){return U8.test(e)?P8.parse(e):JSON.parse(e)}var mU,SU,P8,M8,TU,iR,U8,aR=Ne(()=>{mU=require("stream"),SU=q(require("json-bigint-fixes")),P8=(0,SU.default)({useNativeBigInt:!0}),M8=1e4,TU={};BigInt.prototype.toJSON=function(){throw TU};a(ju,"streamAsJSON");iR=class extends mU.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),hU)}catch(s){yield hU(s)}else yield ha(t)}else yield ha(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);pU(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>M8?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 pU(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(hU,"handleError");a(pU,"when");a(ha,"stringify");a(gU,"jsStringify");U8=/-?\d{16,}/;a(oR,"parse")});var BE=T((fRe,AU)=>{"use strict";var v8=Cn();AU.exports={writeTransaction:B8};function B8(e,t,r){return v8.writeTransaction(e,t,r)}a(B8,"writeTransaction")});var yU=T((pRe,bU)=>{"use strict";var H8=nr(),q8=Ln(),OU=x(),G8=br(),hRe=BE(),x8=require("clone"),lR=require("alasql"),F8=Wf(),NU=require("util"),k8=NU.promisify(q8.getTableSchema),$8=NU.promisify(H8.search),V8=C(),cR=K();F8(lR);bU.exports={update:K8};var Y8="There was a problem performing this update. Please check the logs and try again.";async function K8({statement:e,hdb_user:t}){let r=await k8(e.table.databaseid,e.table.tableid),n=W8(e.columns);cR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=x8(s),c=cR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=lR.parse(l).statements[0],u=await $8(_),d=Q8(n,u);return j8(o,d,t)}a(K8,"update");function W8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=lR.compile(`SELECT ${r.expression.toString()} AS [${V8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw OU.error(t),new Error(Y8)}}a(W8,"createUpdateRecord");function Q8(e,t){return cR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Q8,"buildUpdateRecords");async function j8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await G8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){OU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(j8,"updateRecords")});var wU=T((gRe,IU)=>{var z8=require("alasql"),J8=nr(),X8=x(),Z8=Cn(),_R=require("util"),uR=K(),e6=C(),t6=Ln(),SRe=BE(),TRe=br(),r6="record",n6="successfully deleted",s6=_R.callbackify(c6),i6=_R.promisify(J8.search),o6=_R.promisify(t6.getTableSchema);IU.exports={convertDelete:s6};function a6(e){return`${e.deleted_hashes.length} ${r6}${e.deleted_hashes.length===1?"":"s"} ${n6}`}a(a6,"generateReturnMessage");async function c6({statement:e,hdb_user:t}){let r=await o6(e.table.databaseid,e.table.tableid);uR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=uR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=z8.parse(o).statements[0],l={operation:e6.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await i6(c);let _=await Z8.deleteRecords(l);return uR.isEmptyOrZeroLength(_.message)&&(_.message=a6(_)),delete _.txn_time,_}catch(_){throw X8.error(_),_.hdb_code?_.message:_}}a(c6,"convertDelete")});var MU=T((ARe,PU)=>{"use strict";var l6=Ji(),{hdb_errors:CU}=ie(),{getDatabases:LU}=(ge(),oe(Fe));PU.exports={checkSchemaExists:DU,checkSchemaTableExists:u6,schema_describe:l6};async function DU(e){if(!LU()[e])return CU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(DU,"checkSchemaExists");async function u6(e,t){let r=await DU(e);if(r)return r;if(!LU()[e][t])return CU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u6,"checkSchemaTableExists")});var mR=T((IRe,kU)=>{"use strict";var{decode:_6}=require("msgpackr"),{isMainThread:NRe,parentPort:bRe,threadId:yRe}=require("worker_threads"),zu=ht(),Lc=et(),ER=C(),ar=x(),fR=X(),d6=C(),{onMessageByType:f6}=tt(),vU=li(),{recordAction:E6,recordActionBinary:h6}=(ui(),oe(Mu)),{publishToStream:p6}=zu,{ConsumerEvents:m6}=require("nats"),S6=nr(),{promisify:T6}=require("util"),BU=T6(setTimeout),GE=1e4,xE,qE,g6,R6,HU,Ju=new Map,Dc=new Map;kU.exports={initialize:hR,ingestConsumer:pR,setSubscription:A6,setIgnoreOrigin:b6,getDatabaseSubscriptions:N6,updateConsumer:qU};async function hR(){f6(ER.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await qU(n)}),HU=!0,ar.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await zu.getNATSReferences();xE=e,qE=e.info.server_name,g6=t,R6=r}a(hR,"initialize");async function qU(e){if(e.status==="start"){let{js:t,jsm:r}=await GU(e.node_domain_name);pR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Ju.get(e.stream_name+e.node_domain_name);t&&(ar.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Ju.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(qU,"updateConsumer");var FE=new Map;function A6(e,t,r){let n=FE.get(e);n||FE.set(e,n=new Map),n.set(t,r),HU||hR().then(O6)}a(A6,"setSubscription");async function O6(){let e=await S6.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Lc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await GU(r),!n))break;let{schema:o,table:c}=i,l=vU.createNatsTableStreamName(o,c);pR(l,n,s,r)}}}a(O6,"accessConsumers");async function GU(e){let t,r,n=1;for(;!r;)try{t=await xE.jetstream({domain:e}),r=await xE.jetstreamManager({domain:e})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&ar.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<GE?n++*100:GE;await BU(i)}return{js:t,jsm:r}}a(GU,"connectToRemoteJS");function N6(){return FE}a(N6,"getDatabaseSubscriptions");var xU;function b6(e){xU=e}a(b6,"setIgnoreOrigin");var FU=100,UU=new Array(FU),HE=0;async function pR(e,t,r,n){let{connection:s}=await zu.getNATSReferences();xE=s,qE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,qE),ar.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&ar.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(ar.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await zu.createConsumer(r,e,qE,new Date(Date.now()).toISOString()));let u=o++*100<GE?o++*100:GE;await BU(u)}let c=!1,l;for(;!c;){if(Ju.get(e+n)==="close"||Dc.get(n)==="close"){Ju.delete(e+n),c=!0;continue}l=await i.consume({max_messages:fR.get(ER.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Ju.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===m6.HeartbeatsMissed){let d=u.data;ar.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(ar.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await UU[HE],UU[HE]=y6(u).catch(d=>{ar.error(d)}),++HE>=FU&&(HE=0)}catch(u){u.message==="consumer deleted"?(ar.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):ar.error("Error consuming clustering ingest, restarting consumer",u)}zu.clearClientCache(),!c&&_&&await hR()}}a(pR,"ingestConsumer");async function y6(e){let t=_6(e.data);E6(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),ar.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=fR.get(ER.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Lc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Lc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Lc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!xU),h6(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Lc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;ar.trace("processing message:",o,c,_,(u?"records: "+u.map(P=>P?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),ar.trace(`messageProcessor nats msg id: ${e.headers.get(Lc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(P=>h=P),{timestamp:S,user:R,node_name:g}=f||{},A=FE.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,A.send(t);else if(u.length===1&&!l)A.send({type:dR(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:R,nodeName:g});else{let P=u.map((v,U)=>({type:dR(o),value:v,expiresAt:E,id:d?.[U],table:_}));for(;l;)P.push({type:dR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:P,table:_,timestamp:S,onCommit:h,user:R,nodeName:g})}fR.get(d6.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&p6(e.subject.split(".").slice(0,-1).join("."),vU.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){ar.error(o)}e.ack()}a(y6,"messageProcessor");function dR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(dR,"convertOperation")});var ht=T((URe,iv)=>{"use strict";var kt=X();kt.initSync();var I6=require("fs-extra"),w6=require("semver"),e_=require("path"),{monotonicFactory:C6}=require("ulidx"),VU=C6(),L6=require("util"),YU=require("child_process"),D6=L6.promisify(YU.exec),P6=YU.spawn,Jt=et(),De=C(),kE=K(),cs=x(),$E=li(),M6=BE(),Xu=Et(),{broadcast:U6,onMessageByType:v6,getWorkerIndex:B6}=tt(),{isMainThread:KU}=require("worker_threads"),{Encoder:H6,decode:RR}=require("msgpackr"),WU=new H6,{isEmpty:Ta}=kE,QU=wr(),CRe=48*36e11;KU&&v6(De.ITC_EVENT_TYPES.RESTART,()=>{Lr=void 0,Sa=void 0});var{connect:q6,StorageType:G6,RetentionPolicy:x6,AckPolicy:AR,DeliverPolicy:OR,DiscardPolicy:F6,NatsConnection:LRe,JetStreamManager:DRe,JetStreamClient:PRe,StringCodec:MRe,JSONCodec:k6,createInbox:NR,headers:$6,ErrorCode:$U}=require("nats"),{PACKAGE_ROOT:V6}=C(),Y6=Ho(),{recordAction:K6}=(ui(),oe(Mu)),jU=k6(),W6="clustering",Q6=Y6.engines[Jt.NATS_SERVER_NAME],j6=e_.join(V6,"dependencies"),gR=e_.join(j6,`${process.platform}-${process.arch}`,Jt.NATS_BINARY_NAME),SR,TR,Zu,pa,ma;iv.exports={runCommand:zU,checkNATSServerInstalled:z6,createConnection:bR,getConnection:VE,getJetStreamManager:t_,getJetStream:XU,getNATSReferences:ls,getServerList:X6,createLocalStream:yR,listStreams:ZU,deleteLocalStream:Z6,getServerConfig:r_,listRemoteStreams:e9,viewStream:t9,viewStreamIterator:r9,publishToStream:n9,request:o9,reloadNATS:IR,reloadNATSHub:a9,reloadNATSLeaf:c9,extractServerName:i9,requestErrorHandler:l9,createLocalTableStream:nv,createTableStreams:d9,purgeTableStream:sv,purgeSchemaTableStreams:f9,getStreamInfo:E9,updateLocalStreams:p9,closeConnection:J6,getJsmServerName:YE,addNatsMsgHeader:ev,clearClientCache:JU,updateRemoteConsumer:u9,createConsumer:tv,updateConsumerIterator:_9};async function zU(e,t=void 0){let{stdout:r,stderr:n}=await D6(e,{cwd:t});if(n)throw new Error(n.replace(`
7
+ `)},aX="certificate.pem",cX="privateKey.pem",lX="ca.pem";pP.exports={CERTIFICATE_VALUES:oX,CERTIFICATE_PEM_NAME:aX,PRIVATEKEY_PEM_NAME:cX,CA_PEM_NAME:lX}});var mg=g((WTe,RP)=>{"use strict";var gP=require("fs-extra"),ae=require("joi"),uX=require("os"),{boolean:Ie,string:ar,number:nt,array:pg}=ae.types(),{totalmem:mP}=require("os"),sa=require("path"),_X=x(),oE=K(),KTe=hg(),SP=C(),dX=rt(),TP="log",fX="components",EX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",pX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",mX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SX="rootPath config parameter is undefined",TX="clustering.enabled config parameter is undefined",ia=nt.min(0).required(),aE=pg.items({host:ar.required(),port:ia}).empty(null),Ms;RP.exports={configValidator:gX,routesValidator:yX,route_constraints:aE};function gX(e){if(Ms=e.rootPath,oE.isEmpty(Ms))throw SX;let t=Ie.required(),r=nt.min(0).max(1e3).empty(null).default(NX),n=ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(yu),s=ar.optional().empty(null),i=ar.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ae.string().empty(null).default(yu),c=ae.custom(AX).empty(null).default(yu),l=e.clustering?.enabled;if(oE.isEmpty(l))throw TX;let _;return l===!0?_=ae.object({enabled:t,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:ia,routes:aE}).required()}).required(),leafNodes:ae.object({network:ae.object({port:ia}).required()}).required(),network:ae.object({port:ia}).required()}).required(),leafServer:ae.object({network:ae.object({port:ia,routes:aE}).required(),streams:ae.object({maxAge:nt.min(120).allow(null).optional(),maxBytes:nt.min(1).allow(null).optional(),maxMsgs:nt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel: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:ar.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:nt.required(),enableSessions:Ie}),analytics:ae.object({aggregatePeriod:nt}),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:ar.custom(bX).optional().empty(null),maxSize:ar.custom(OX).optional().empty(null),path:ar.optional().empty(null).default(yu)}).required(),root:n,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ae.object({network:ae.object({cors:Ie.optional(),corsAccessList:pg.optional(),headersTimeout:nt.min(1).optional(),keepAliveTimeout:nt.min(1).optional(),port:nt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(yu),securePort:nt.optional().empty(null),timeout:nt.min(1).optional()}).optional(),tls:ae.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:ia,securePort:ia,mtls:ae.alternatives([Ie.optional(),ae.object({user:ar.optional(),certificateAuthority:s,required:Ie.optional()})])}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ae.object({compressionThreshold:nt.optional(),cors:Ie.optional(),corsAccessList:pg.optional(),headersTimeout:nt.min(1).optional(),port:nt.min(0).optional().empty(null),securePort:nt.min(0).optional().empty(null),maxHeaderSize:nt.optional(),mtls:ae.alternatives([Ie.optional(),ae.object({user:ar.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:nt.min(1).optional(),host:ar.optional(),waitForDebugger:Ie.optional()})),maxHeapMemory:nt.min(0).optional()})),storage:ae.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:ae.alternatives([Ie.optional(),ae.object({dictionary:ar.optional(),threshold:nt.optional()})]),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional(),maxFreeSpaceToLoad:nt.optional(),maxFreeSpaceToRetain:nt.optional()}).required(),ignoreScripts:Ie.optional(),tls:ae.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:ar.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(gX,"configValidator");function RX(e){return gP.existsSync(e)?null:`Specified path ${e} does not exist.`}a(RX,"doesPathExist");function AX(e,t){ae.assert(e,ar.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=RX(e);if(r)return t.message(r)}a(AX,"validatePath");function OX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pX):e}a(OX,"validateRotationMaxSize");function bX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(hX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mX):e}a(bX,"validateRotationInterval");function NX(e,t){let r=t.state.path.join("."),n=uX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||mP();return i=Math.round(Math.min(i,mP())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),_X.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(NX,"setDefaultThreads");function yu(e,t){let r=t.state.path.join(".");if(!oE.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(oE.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return sa.join(Ms,fX);case"logging.root":return sa.join(Ms,TP);case"clustering.leafServer.streams.path":return sa.join(Ms,"clustering","leaf");case"storage.path":let n=sa.join(Ms,SP.LEGACY_DATABASES_DIR_NAME);return gP.existsSync(n)?n:sa.join(Ms,SP.DATABASES_DIR_NAME);case"logging.rotation.path":return sa.join(Ms,TP);case"operationsApi.network.domainSocket":return r==null?null:sa.join(Ms,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(yu,"setDefaultRoot");function yX(e){let t=ae.object({routes:aE});return dX.validateBySchema({routes:e},t)}a(yX,"routesValidator")});var ht=g((zTe,LP)=>{"use strict";var on=C(),kt=K(),Ut=x(),{configValidator:IX,routesValidator:AP}=mg(),Cr=require("fs-extra"),wX=require("yaml"),os=require("path"),CX=require("is-number"),bP=require("properties-reader"),LX=require("lodash"),{handleHDBError:DX}=ie(),{HTTP_STATUS_CODES:PX,HDB_ERROR_MSGS:cE}=Qr(),jTe=require("minimist"),{server:MX}=(gr(),oe(xo)),{DATABASES_PARAM_CONFIG:Iu,CONFIG_PARAMS:sn,CONFIG_PARAM_MAP:as}=on,UX="Unable to get config value because config is uninitialized",vX="Config successfully initialized",BX="Error backing up config file",HX="Empty parameter sent to getConfigValue",NP=os.join(on.PACKAGE_ROOT,"config","yaml",on.HDB_DEFAULT_CONFIG_FILE),GX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",OP={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"},lE,vt,uE;LP.exports={createConfigFile:qX,getDefaultConfig:xX,getConfigValue:IP,initConfig:Tg,flattenConfig:gc,updateConfigValue:wP,updateConfigObject:kX,getConfiguration:YX,setConfiguration:KX,readConfigFile:Rg,getClusteringRoutes:WX,initOldConfig:CP,getConfigFromFile:QX,getConfigFilePath:oa,addConfig:jX,deleteConfigFromFile:zX,getConfigObj:JX};function qX(e){let t=ro(NP);lE=gc(t.toJSON());let r;for(let o in e){let c=as[o.toLowerCase()];if(c===sn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=Sg(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Ut.error(u)}}}r&&yP(t,r),gg(t);let n=t.toJSON();vt=gc(n);let s=t.getIn(["rootPath"]),i=os.join(s,on.HDB_CONFIG_FILE);Cr.createFileSync(i),Cr.writeFileSync(i,String(t)),Ut.trace(`Config file written to ${i}`)}a(qX,"createConfigFile");function yP(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(Iu.TABLES))for(let i in n[s][Iu.TABLES])for(let o in n[s][Iu.TABLES][i]){let c=n[s][Iu.TABLES][i][o],l=[sn.DATABASES,s,Iu.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=[sn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Ut.error("Error parsing schemas CLI/env config arguments",n)}}a(yP,"setSchemasConfig");function xX(e){if(lE===void 0){let r=ro(NP);lE=gc(r.toJSON())}let t=as[e.toLowerCase()];if(t!==void 0)return lE[t.toLowerCase()]}a(xX,"getDefaultConfig");function IP(e){if(e==null){Ut.error(HX);return}if(vt===void 0){Ut.trace(UX);return}let t=as[e.toLowerCase()];if(t!==void 0)return vt[t.toLowerCase()]}a(IP,"getConfigValue");function oa(e=kt.getPropsFilePath()){let t=kt.getEnvCliRootPath();return t?os.join(t,on.HDB_CONFIG_FILE):bP(e).get(on.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(oa,"getConfigFilePath");function Tg(e=!1){if(vt===void 0||e){let t;if(!kt.noBootFile()){t=kt.getPropsFilePath();try{Cr.accessSync(t,Cr.constants.F_OK|Cr.constants.R_OK)}catch(i){throw Ut.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=oa(t),n;if(r.includes("config/settings.js"))try{CP(r);return}catch(i){if(i.code!==on.NODE_ERROR_CODES.ENOENT)throw i}try{n=ro(r)}catch(i){if(i.code===on.NODE_ERROR_CODES.ENOENT){Ut.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 Ut.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FX(n,r),gg(n);let s=n.toJSON();if(MX.config=s,vt=gc(s),vt.logging_rotation_rotate)for(let i in OP)vt[i]&&Ut.error(`Config ${OP[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ut.trace(vX)}}a(Tg,"initConfig");function FX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],os.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],os.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],os.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Ut.trace("Updating config file with missing config params"),Cr.writeFileSync(t,String(e)))}a(FX,"checkForUpdatedConfig");function gg(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t?.http?.threads&&(t.threads=t?.http?.threads);let r=IX(t);if(r.error)throw cE.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(gg,"validateConfig");function kX(e,t){vt===void 0&&(vt={});let r=as[e.toLowerCase()];if(r===void 0){Ut.trace(`Unable to update config object because config param '${e}' does not exist`);return}vt[r.toLowerCase()]=t}a(kX,"updateConfigObject");function wP(e,t,r=void 0,n=!1,s=!1,i=!1){vt===void 0&&Tg();let o=IP(as.hdb_root),c=os.join(o,on.HDB_CONFIG_FILE),l=ro(c),_;if(r===void 0&&e.toLowerCase()===sn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=as[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Sg(f,t);l.setIn([...E],h)}else for(let f in r){let E=as[f.toLowerCase()];if(E===sn.HTTP_SECUREPORT&&r[f]===vt[sn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===sn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===vt[sn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===sn.DATABASES){_=r[f];continue}if(E?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=on.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=Sg(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(R){Ut.error(R)}}}_&&yP(l,_),gg(l);let u=l.getIn(["rootPath"]),d=os.join(u,on.HDB_CONFIG_FILE);n===!0&&$X(c,u),Cr.writeFileSync(d,String(l)),s&&(vt=gc(l.toJSON())),Ut.trace(`Config parameter: ${e} updated with value: ${t}`)}a(wP,"updateConfigValue");function $X(e,t){try{let r=os.join(t,"backup",`${on.HDB_CONFIG_FILE}.bak`);Cr.copySync(e,r),Ut.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ut.error(BX),Ut.error(r)}}a($X,"backupConfigFile");var VX=["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)),uE=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])&&!VX.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;!sn[l.toUpperCase()]&&as[l]&&(s[as[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 Sg(e,t){if(e===sn.CLUSTERING_NODENAME||e===sn.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(CX(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(Sg,"castConfigValue");function YX(){let e=kt.getPropsFilePath(),t=oa(e);return ro(t).toJSON()}a(YX,"getConfiguration");async function KX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return wP(void 0,void 0,s,!0),GX}catch(i){throw typeof i=="string"||i instanceof String?DX(i,i,PX.BAD_REQUEST,void 0,void 0,!0):i}}a(KX,"setConfiguration");function Rg(){let e=kt.getPropsFilePath();try{Cr.accessSync(e,Cr.constants.F_OK|Cr.constants.R_OK)}catch(n){if(!kt.noBootFile())throw Ut.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=oa(e);return ro(t).toJSON()}a(Rg,"readConfigFile");function ro(e){return wX.parseDocument(Cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ro,"parseYamlDoc");function WX(){let e=Rg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=kt.isEmptyOrZeroLength(t)?[]:t;let r=AP(t);if(r)throw cE.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=kt.isEmptyOrZeroLength(n)?[]:n;let s=AP(n);if(s)throw cE.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 cE.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(WX,"getClusteringRoutes");function CP(e){let t=bP(e);vt={};for(let r in as){let n=t.get(r.toUpperCase());if(kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=as[r].toLowerCase();s===sn.LOGGING_ROOT?vt[s]=os.dirname(n):vt[s]=n}return vt}a(CP,"initOldConfig");function QX(e){let t=Rg();return LX.get(t,e.replaceAll("_","."))}a(QX,"getConfigFromFile");async function jX(e,t){let r=ro(oa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Cr.writeFile(oa(),String(r))}a(jX,"addConfig");function zX(e){let t=oa(kt.getPropsFilePath()),r=ro(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=os.join(n,on.HDB_CONFIG_FILE);Cr.writeFileSync(s,String(r))}a(zX,"deleteConfigFromFile");function JX(){return uE||(Tg(),uE)}a(JX,"getConfigObj")});var PP=g((XTe,DP)=>{"use strict";var _E=C(),dE=class{static{a(this,"BaseLicense")}constructor(t=0,r=_E.RAM_ALLOCATION_ENUM.DEFAULT,n=_E.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Ag=class extends dE{static{a(this,"ExtendedLicense")}constructor(t=0,r=_E.RAM_ALLOCATION_ENUM.DEFAULT,n=_E.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};DP.exports={BaseLicense:dE,ExtendedLicense:Ag}});var aa=g((ege,GP)=>{"use strict";var Ac=require("fs-extra"),UP=iE(),vP=require("crypto"),XX=require("moment"),ZX=require("uuid").v4,cr=x(),bg=require("path"),eZ=K(),no=C(),{totalmem:MP}=require("os"),tZ=PP().ExtendedLicense,Rc="invalid license key format",rZ="061183",nZ="mofi25",sZ="aes-256-cbc",iZ=16,oZ=32,BP=X();BP.initSync();var Og;GP.exports={validateLicense:HP,generateFingerPrint:cZ,licenseSearch:Ig,getLicense:_Z,checkMemoryLimit:dZ};function Ng(){return bg.join(BP.getHdbBasePath(),no.LICENSE_KEY_DIR_NAME,no.LICENSE_FILE_NAME)}a(Ng,"getLicenseDirPath");function aZ(){let e=Ng();return bg.join(e,no.LICENSE_FILE_NAME)}a(aZ,"getLicenseFilePath");function yg(){let e=Ng();return bg.join(e,no.REG_KEY_FILE_NAME)}a(yg,"getFingerPrintFilePath");async function cZ(){let e=yg();try{return await Ac.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await lZ();throw cr.error(`Error writing fingerprint file to ${e}`),cr.error(t),new Error("There was an error generating the fingerprint")}}a(cZ,"generateFingerPrint");async function lZ(){let e=ZX(),t=UP.hash(e),r=yg();try{await Ac.mkdirp(Ng()),await Ac.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw cr.error(`Error writing fingerprint file to ${r}`),cr.error(n),new Error("There was an error generating the fingerprint")}return t}a(lZ,"writeFingerprint");function HP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:no.RAM_ALLOCATION_ENUM.DEFAULT,version:no.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return cr.error("empty license key passed to validate."),r;let n=yg(),s=!1;try{s=Ac.statSync(n)}catch(i){cr.error(i)}if(s){let i;try{i=Ac.readFileSync(n,"utf8")}catch{cr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nZ),c=o[1];c=Buffer.concat([Buffer.from(c)],iZ);let l=Buffer.concat([Buffer.from(i)],oZ),_=vP.createDecipheriv(sZ,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=uZ(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Rc),cr.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),cr.error(Rc),new Error(Rc)}else r.exp_date=u;r.exp_date<XX().valueOf()&&(r.valid_date=!1),UP.validate(o[1],`${rZ}${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||cr.error("Invalid licence"),r}a(HP,"validateLicense");function uZ(e,t){try{let r=vP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{cr.warn("Check old license failed")}}a(uZ,"checkOldLicense");function Ig(){let e=new tZ,t=[];try{t=Ac.readFileSync(aZ(),"utf-8").split(no.NEW_LINE)}catch(r){r.code==="ENOENT"?cr.info("no license file found"):cr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eZ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=HP(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){cr.error("There was an error parsing the license string."),cr.error(s),e.ram_allocation=no.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Og=e,e}a(Ig,"licenseSearch");async function _Z(){return Og||await Ig(),Og}a(_Z,"getLicense");function dZ(){let e=Ig().ram_allocation,t=process.constrainedMemory?.()||MP();if(t=Math.round(Math.min(t,MP())/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(dZ,"checkMemoryLimit")});var Lr=g((ige,eM)=>{"use strict";var kP="username is required",$P="nothing to update, must supply active, role or password to update",VP="password cannot be an empty string",YP="If role is specified, it cannot be empty.",KP="active must be true or false";eM.exports={addUser:RZ,alterUser:AZ,dropUser:bZ,getSuperUser:wZ,userInfo:NZ,listUsers:EE,listUsersExternal:yZ,setUsersToGlobal:bc,findAndValidateUser:XP,getClusterUser:CZ,USERNAME_REQUIRED:kP,ALTERUSER_NOTHING_TO_UPDATE:$P,EMPTY_PASSWORD:VP,EMPTY_ROLE:YP,ACTIVE_BOOLEAN:KP};var WP=wr(),fZ=na(),Lg=iE(),QP=fP(),jP=ir(),Dg=ai(),an=K(),zP=require("validate.js"),Oe=x(),{promisify:EZ}=require("util"),Pg=_i(),qP=C(),xP=et(),hZ=ht(),rge=X(),nge=aa(),pZ=si(),{table:sge}=(Te(),oe(ke)),{handleHDBError:Us,hdb_errors:mZ}=ie(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:wg,HDB_ERROR_MSGS:Oc}=mZ,{UserEventMsg:Mg}=ts(),Cg=require("lodash"),{server:Ug}=(gr(),oe(xo)),SZ=x();Ug.getUser=(e,t)=>XP(e,t,t!=null);var JP={username:!0,active:!0,role:!0,password:!0},FP=new Map,fE=jP.searchByValue,TZ=jP.searchByHash,gZ=EZ(fZ.delete);async function RZ(e){let t=zP.cleanAttributes(e,JP),r=QP.addUserValidation(t);if(r)throw Us(new Error,r.message,vs.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 fE(n),s=s&&Array.from(s)}catch(l){throw Oe.error("There was an error searching for a role in add user"),Oe.error(l),l}if(!s||s.length<1)throw Us(new Error,Oc.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Us(new Error,Oc.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Pg.encrypt(t.password)),t.password=Lg.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await WP.insert(i)}catch(l){throw Oe.error("There was an error searching for a user."),Oe.error(l),l}Oe.debug(o);try{await bc()}catch(l){throw Oe.error("Got an error setting users to global"),Oe.error(l),l}if(o.skipped_hashes.length===1)throw Us(new Error,Oc.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Dg.signalUserChange(new Mg(process.pid)),`${c.username} successfully added`}a(RZ,"addUser");async function AZ(e){let t=zP.cleanAttributes(e,JP);if(an.isEmptyOrZeroLength(t.username))throw new Error(kP);if(an.isEmptyOrZeroLength(t.password)&&an.isEmptyOrZeroLength(t.role)&&an.isEmptyOrZeroLength(t.active))throw new Error($P);if(!an.isEmpty(t.password)&&an.isEmptyOrZeroLength(t.password.trim()))throw new Error(VP);if(!an.isEmpty(t.active)&&!an.isBoolean(t.active))throw new Error(KP);let r=OZ(t.username);if(!an.isEmpty(t.password)&&!an.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Pg.encrypt(t.password)),t.password=Lg.hash(t.password)),t.role==="")throw new Error(YP);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 fE(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Oc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),Us(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Oc.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),Us(new Error,c,vs.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 WP.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await bc()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return Dg.signalUserChange(new Mg(process.pid)),s}a(AZ,"alterUser");function OZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OZ,"isClusterUser");async function bZ(e){try{let t=QP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(an.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,Oc.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gZ(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await bc()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return Dg.signalUserChange(new Mg(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bZ,"dropUser");async function NZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Cg.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TZ(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(NZ,"userInfo");async function yZ(){let e;try{e=await EE()}catch(t){throw Oe.error("Got an error listing users."),Oe.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(yZ,"listUsersExternal");async function EE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await fE(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Cg.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 fE(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Cg.cloneDeep(o),o.role=r[o.role],IZ(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),an.errorizeMessage(e)}return null}a(EE,"listUsers");function IZ(e){try{if(!e){Oe.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(pZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(IZ,"appendSystemTablesToRole");async function bc(){try{let e=await EE();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(bc,"setUsersToGlobal");async function XP(e,t,r=!0){global.hdb_users||await bc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Us(new Error,wg.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Us(new Error,wg.USER_INACTIVE,vs.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(FP.get(t)===n.password)return s;if(Lg.validate(n.password,t))FP.set(t,n.password);else throw Us(new Error,wg.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(XP,"findAndValidateUser");async function wZ(){global.hdb_users||await bc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wZ,"getSuperUser");async function CZ(){let e=await EE(),t=hZ.getConfigFromFile(qP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!an.isEmpty(r)&&r?.role?.role===qP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Pg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+xP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+xP.SERVER_SUFFIX.ADMIN,r}a(CZ,"getClusterUser");var ZP=[];Ug.invalidateUser=function(e){for(let t of ZP)try{t(e)}catch(r){SZ.error("Error invalidating user",r)}};Ug.onInvalidatedUser=function(e){ZP.push(e)}});var Cu=g((lge,sM)=>{"use strict";var ca=x(),cn=C(),LZ=lw(),age=Mn(),cge=Zi(),DZ=Lr(),{validateEvent:tM}=ts(),wu=Pn(),PZ=require("process"),{resetDatabases:MZ}=(Te(),oe(ke)),UZ={[cn.ITC_EVENT_TYPES.SCHEMA]:vZ,[cn.ITC_EVENT_TYPES.USER]:nM};async function vZ(e){let t=tM(e);if(t){ca.error(t);return}ca.trace("ITC schemaHandler received schema event:",e),await LZ(e.message),await BZ(e.message)}a(vZ,"schemaHandler");async function BZ(e){try{wu.resetReadTxn(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),wu.resetReadTxn(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),wu.resetReadTxn(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=MZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ca.error(t)}}a(BZ,"syncSchemaMetadata");var rM=[];async function nM(e){try{try{wu.resetReadTxn(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),wu.resetReadTxn(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ca.warn(r)}let t=tM(e);if(t){ca.error(t);return}ca.trace(`ITC userHandler ${cn.HDB_ITC_CLIENT_PREFIX}${PZ.pid} received user event:`,e),await DZ.setUsersToGlobal();for(let r of rM)r()}catch(t){ca.error(t)}}a(nM,"userHandler");nM.addListener=function(e){rM.push(e)};sM.exports=UZ});var ts=g((hge,oM)=>{"use strict";var _ge=x(),vg=K(),HZ=C(),{ITC_ERRORS:Lu}=Qr(),{parentPort:dge,threadId:GZ,isMainThread:qZ,workerData:fge}=require("worker_threads"),{onMessageFromWorkers:xZ,broadcast:Ege,broadcastWithAcknowledgement:FZ}=tt();oM.exports={sendItcEvent:kZ,validateEvent:iM,SchemaEventMsg:$Z,UserEventMsg:VZ};var hE;xZ(async(e,t)=>{hE=hE||Cu(),iM(e),hE[e.type]&&await hE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kZ(e){return!qZ&&e.message&&(e.message.originator=GZ),FZ(e)}a(kZ,"sendItcEvent");function iM(e){if(typeof e!="object")return Lu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||vg.isEmpty(e.type))return Lu.MISSING_TYPE;if(!e.hasOwnProperty("message")||vg.isEmpty(e.message))return Lu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||vg.isEmpty(e.message.originator))return Lu.MISSING_ORIGIN;if(HZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Lu.INVALID_EVENT(e.type)}a(iM,"validateEvent");function $Z(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($Z,"SchemaEventMsg");function VZ(e){this.originator=e}a(VZ,"UserEventMsg")});var ai=g((Sge,uM)=>{"use strict";var aM=C(),mge=K(),pE=x(),cM=YI(),Nc,{sendItcEvent:lM}=ts();function YZ(e){try{pE.trace("signalSchemaChange called with message:",e),Nc=Nc||Cu();let t=new cM(aM.ITC_EVENT_TYPES.SCHEMA,e);return Nc.schema(t),lM(t)}catch(t){pE.error(t)}}a(YZ,"signalSchemaChange");function KZ(e){try{pE.trace("signalUserChange called with message:",e),Nc=Nc||Cu();let t=new cM(aM.ITC_EVENT_TYPES.USER,e);return Nc.user(t),lM(t)}catch(t){pE.error(t)}}a(KZ,"signalUserChange");uM.exports={signalSchemaChange:YZ,signalUserChange:KZ}});var vu={};Fe(vu,{addAnalyticsListener:()=>Uu,recordAction:()=>ln,recordActionBinary:()=>Un,setAnalyticsEnabled:()=>WZ});function WZ(e){TM=e}function ln(e,t,r,n,s){if(!TM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.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},TE.set(i,o)}mE||QZ()}function Un(e,t,r,n,s){ln(!!e,t,r,n,s)}function Uu(e){AM.push(e)}function QZ(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:la.threadId,metrics:t};for(let[s,i]of TE){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 OM){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 bM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:la.threadId,byThread:!0,...n});for(let s of AM)s(t);TE=new Map,la.parentPort?la.parentPort.postMessage({type:RM,report:r}):IM({report:r})},gM).unref()}async function jZ(e,t=6e4){let r=Gg(),n=NM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let R=performance.now();R-S>5e3&&(0,Du.warn)("Unusually high event queue latency on the main thread of "+Math.round(R-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let R=performance.now();R-S>5e3&&(0,Du.warn)("Unusually high task queue latency on the main thread of "+Math.round(R-S)+"ms"),m(R-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:R,threadId:T}=S;for(let A of R||[]){let{path:P,method:v,type:U,metric:F,count:H,total:j,distribution:z,threads:J,...Ee}=A;H||(H=1);let ue=F+(P?"-"+P:"");v!==void 0&&(ue+="-"+v),U!==void 0&&(ue+="-"+U);let he=c.get(ue);if(he){if(he.threads){let Ge=he.threads[T];if(Ge)he=Ge;else{he.threads[T]=Object.assign({},Ee);continue}}he.count||(he.count=1);let Me=he.count;for(let Ge in Ee){let xt=Ee[Ge];typeof xt=="number"&&(he[Ge]=(he[Ge]*Me+xt*H)/(Me+H))}he.count+=H,j>=0&&(he.total+=j,he.ratio=he.total/he.count)}else he=Object.assign({period:t},A),delete he.distribution,c.set(ue,he),he.byThread&&(he.threads=[],he.threads[T]=Object.assign({},Ee),_.push(he));if(z){z=z.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Me=l.get(ue);Me?Me.push(...z):l.set(ue,z)}}await bM()}for(let m of _){let{path:S,method:R,type:T,metric:A,count:P,total:v,distribution:U,threads:F,...H}=m;F=F.filter(j=>j);for(let j in H){if(typeof m[j]!="number")continue;let z=0;for(let J of F){let Ee=J[j];typeof Ee=="number"&&(z+=Ee)}m[j]=z}m.count=F.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let R=c.get(m);S.sort((Ge,xt)=>Ge.value>xt.value?1:-1);let T=R.count-1,A=[],P=0,v=0,U;for(let Ge of OM){let xt=T*Ge;for(;P<xt;)U=S[v++],P+=U.count,v===1&&P--;let wd=S[v>1?v-2:0];U||(U=S[0]),A.push(U.value-(U.value-wd.value)*(P-xt)/U.count)}let[F,H,j,z,J,Ee,ue,he,Me]=A;Object.assign(R,{p1:F,p10:H,p25:j,median:z,p75:J,p90:Ee,p95:ue,p99:he,p999:Me})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(R=>{R||n.primaryStore.put(S.id,S)}),d=!0;let f=Date.now(),{idle:E,active:h}=performance.eventLoopUtilization();if(d||h*10>E){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:E-_M,active:h-dM,taskQueueLatency:await s,time:f,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(R=>{R||n.primaryStore.put(m,S)})}_M=E,dM=h}async function fM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Gg(){return EM||(EM=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function NM(){return hM||(hM=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function XZ(){yM=!0;let e=(0,Mu.get)(Hg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await jZ(gM,e),await fM(Gg(),zZ),await fM(NM(),JZ)},Math.min(e/2,2147483647)).unref()}function IM(e,t){let r=e.report;r.threadId=t?.threadId||la.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(pM+=n.mean*n.count);r.totalBytesProcessed=pM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(mM.get(t))}),mM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Gg().primaryStore.put(r.id,r),yM||XZ(),ZZ&&(wM=t5(r))}async function t5(e){if(await wM,!so){let r=(0,Pu.dirname)((0,Du.getLogFilePath)());try{so=await(0,Bg.open)((0,Pu.join)(r,"analytics.log"),"r+")}catch{so=await(0,Bg.open)((0,Pu.join)(r,"analytics.log"),"w+")}}let t=(await so.stat()).size;if(t>e5){let r=Buffer.alloc(t);await so.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await so.write(r,{position:0}),await so.truncate(r.length),t=r.length}await so.write(JSON.stringify(e)+`
9
+ `,t)}var la,SM,Du,Pu,Bg,SE,Mu,Hg,TE,TM,mE,gM,RM,AM,OM,_M,dM,bM,zZ,JZ,EM,hM,yM,pM,mM,ZZ,wM,so,e5,di=Ae(()=>{la=require("worker_threads"),SM=G(tt());Te();Du=G(x()),Pu=require("path"),Bg=require("fs/promises"),SE=G(Ar()),Mu=G(X()),Hg=G(C());gr();(0,Mu.initSync)();TE=new Map,TM=(0,Mu.get)(Hg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(WZ,"setAnalyticsEnabled");a(ln,"recordAction");ot.recordAnalytics=ln;a(Un,"recordActionBinary");mE=0,gM=1e3,RM="analytics-report",AM=[];a(Uu,"addAnalyticsListener");OM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(QZ,"sendAnalytics");a(jZ,"aggregation");_M=0,dM=0,bM=a(()=>new Promise(setImmediate),"rest");a(fM,"cleanup");zZ=36e5,JZ=31536e6;a(Gg,"getRawAnalyticsTable");a(NM,"getAnalyticsTable");(0,SM.setChildListenerByType)(RM,IM);a(XZ,"startScheduledTasks");pM=0,mM=new Map,ZZ=!1;a(IM,"recordAnalytics");e5=1e6;a(t5,"logAnalytics")});var CM={};Fe(CM,{Headers:()=>io,appendHeader:()=>qg});function qg(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 io,Bu=Ae(()=>{io=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(qg,"appendHeader")});var $g={};Fe($g,{coerceType:()=>gE,makeTable:()=>OE,setServerUtilities:()=>u5,updateResource:()=>RE});function OE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:f,evictionMS:E,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]),kI(i,l);let R=lS(i,n,l),T=0,A,P,v={},U=Promise.resolve(),F,H,j;for(let W of S)(W.assignCreatedTime||W.name==="__createdtime__")&&(F=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(H=W),W.expiresAt&&(j=W),W.isPrimaryKey&&(v=W);let z,J=[],Ee=[],ue=1,he=2,Me={},Ge={},xt=864e5,wd,Cd,Gi,WN=!1,Mm,dV=i.getRange({start:!1,end:!1}).constructor,fV=10,EV=6;h&&zN();class Xe extends Jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=H;static propertyResolvers;static sources=[];static get expirationMS(){return f}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,b){b&&(this.sourceOptions=b,(b.expiration||b.eviction||b.scanInterval)&&this.setTTLExpiration(b)),b?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),P=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,B)=>{if(k?.source!==M)return M[D](L,B,k)}}else return(M,k,L)=>{let B=[];for(let $ of y){if(M?.source===$)break;B.push($[D](k,L,M))}return Promise.all(B)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],O=a(D=>{if(N[D]&&(!N[D].reliesOnPrototype||N.prototype[D]))return(y,M,k)=>{if(!y?.source)return N[D](M,k,y)}},"getApplyToCanonicalSource");return Me={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ge={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,B=M.table?ct[c][M.table]:Xe;if(c===ls.SYSTEM_SCHEMA_NAME&&(M.table===ls.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===ls.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),M.id===void 0&&(M.id=L[B.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let $=await B.getResource(M.id,k,yc);switch(M.type){case"put":return $._writeUpdate(L,!0,yc);case"patch":return $._writeUpdate(L,!1,yc);case"delete":return $._writeDelete(yc);case"publish":return $._writePublish(L,yc);case"invalidate":return $.invalidate(yc);default:st.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&m==null&&(m=!0);let k=p.subscribeOnThisThread?p.subscribeOnThisThread((0,_a.getWorkerIndex)()):(0,_a.getWorkerIndex)()===0,L=M&&k&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(L){let B;for await(let $ of L)try{if(!($.type==="transaction"?$.writes[0]:$)){st.error("Bad subscription event",$);continue}if($.source=p,B)if($.beginTxn)B.resolve();else{y($,B);continue}if($.type==="end_txn")continue;let ye=Ze($,()=>{if($.type==="transaction"){let te=[];for(let Be of $.writes)try{te.push(y(Be,$))}catch(le){throw le.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify($),le}return Promise.all(te)}else if($.type==="define_schema"){let te=this.attributes.slice(0),Be;for(let le of $.attributes)te.find($e=>$e.name===le.name)||(te.push(le),Be=!0);Be&&(Et({table:s,database:c,attributes:te,origin:"cluster"}),$u.signalSchemaChange(new Vu.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return $.beginTxn?(B=$,y($,$),new Promise(te=>{B.resolve=te})):y($,$)});D&&(await ye,$u.signalUserChange(new Vu.UserEventMsg(process.pid))),$.onCommit&&(ye?.then?ye.then($.onCommit):$.onCommit())}catch(ce){st.error("error in subscription handler",ce)}}}catch(M){st.error(M)}})(),this}static getResource(p,b,I){let N=super.getResource(p,b,I);if(p!=null){Il(p);try{if(N.hasOwnProperty(fe))return N;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let O=!I?.async||i.cache?.get(p),D=Qn(b),y=D.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Um(p,b,{transaction:y},O,M=>{if(M?RE(N,M):N[fe]=null,b.onlyIfCached&&b.noCacheStore){if(!N.doesExist())throw new vn.ServerError("Entry is not cached",504)}else if(I?.ensureLoaded){let k=vm(p,M,b,N);if(k)return D?.disregardReadTxn(),N[xg]=!0,kg(k,L=>(RE(N,L),N))}return N})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(p)),O}}return N}ensureLoaded(){let p=vm(this[Ue],this[un],this[Ne]);if(p)return this[xg]=!0,kg(p,b=>{this[un]=b,this[fe]=b.value,this[Fu]=b.version})}static setTTLExpiration(p){if(typeof p=="number")f=p*1e3,E||(E=0);else if(p&&typeof p=="object")f=p.expiration*1e3,E=(p.eviction||0)*1e3,xt=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(f<0)throw new Error("Expiration can not be negative");xt=xt||(f+E)/4,Hm()}static enableAuditing(p=!0){h=p,p&&zN(),Xe.audit=p}static coerceId(p){return p===""?null:gE(p,v)}static async dropTable(){if(delete ct[c][s],c===o){for(let p of S)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));$u.signalSchemaChange(new Vu.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Cn])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let b=Xe.getRecordCount();return{recordCount:b.recordCount,estimatedRecordRange:b.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ne]?.returnNonexistent)return this}allowRead(p,b){let I=Dd(p);if(I?.read){if(I.isSuperUser)return!0;let N=I.attribute_permissions,O=b?.select;if(N?.length>0||WN&&O){if(b||(b={}),O){let D=N?.length>0&&Fg(N,"read");b.select=O.map(y=>{let M=y.name||y;if(!D||D[M]){let k=Gi[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 b.select=N.filter(D=>D.read&&!Gi[D.attribute_name]).map(D=>D.attribute_name);return b}else return!0}}allowUpdate(p,b){let I=Dd(p);if(I?.update){let N=I.attribute_permissions;if(N?.length>0){let O=Fg(N,"update");for(let D in b)if(!O[D])return!1;for(let D of N){let y=D.attribute_name;!D.update&&!(y in b)&&(b[y]=this.getProperty(y))}}return!0}}allowCreate(p,b){if(this[Cn]){let I=Dd(p);if(I?.insert){let N=I.attribute_permissions;if(N?.length>0){let O=Fg(N,"insert");for(let D in b)if(!O[D])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return Dd(p)?.delete}update(p,b){if(!Qn(this[Ne]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let N;return typeof p=="object"&&p&&(b?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[fe]={},this[Mt]=p):(N=this[Mt],N&&(p=Object.assign(N,p)),this[Mt]=N=p)),this._writeUpdate(this[Mt],b),this}addTo(p,b){if(typeof b=="number")this[Hu]===DM?this.set(p,(+this.getProperty(p)||0)+b):(this[Hu]||this.update(),this.set(p,new cf(b)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,b){if(typeof b=="number")return this.addTo(p,-b);throw new Error("Can not subtract a non-numeric value")}invalidate(p){let b=this[Ne],I=this[Ue];Il(I),Qn(this[Ne]).addWrite({key:I,store:i,invalidated:!0,entry:this[un],nodeName:this[Ne]?.nodeName,before:Me.invalidate?.bind(this,b,I),beforeIntermediate:Ge.invalidate?.bind(this,b,I),commit:(O,D)=>{if(D?.version>O)return;let y=null;for(let M in r)y||(y={}),y[M]=this.getProperty(M);R(I,y,this[un],O,Gu,h,this[Ne],0,"invalidate")}})}static evict(p,b,I){let N=this.Source,O;if(!((P||h)&&(!b||(O=i.getEntry(p),!O||!b)||O.version!==I))){if(P){if(i.hasLock(p,O.version))return;let D;for(let y in r)D||(D={}),D[y]=b[y];if(D)return R(p,D,O,I,qu,null,null,0,null,!0)}return i.ifVersion(p,I,()=>{Ld(p,b,null)}),h?R(p,null,O,I,qu,null,null,0,null,!0):i.remove(p,I)}}lock(){throw new Error("Not yet implemented")}static operation(p,b){return p.table||=s,p.schema||=c,HM.operation(p,b)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,b,I){let N=this[Ne],O=Qn(N),D=this[Ue];Il(D);let y=this[un];this[Hu]=b?DM:a5;let M={key:D,store:i,entry:y,nodeName:N?.nodeName,validate:k=>{p||(p=this[Mt]),b||p&&of(p)?N?.source||(O.checkOverloaded(),this.validate(p,!b),H&&(p[H.name]=H.type==="Date"?new Date(k):H.type==="String"?new Date(k).toISOString():k),b&&(t&&p[t]!==D&&(p[t]=D),F&&(y?.value?p[F.name]=y?.value[F.name]:p[F.name]=F.type==="Date"?new Date(k):F.type==="String"?new Date(k).toISOString():k),p=$o(p))):O.removeWrite(M)},before:b?Me.put?()=>Me.put(N,D,p):null:Me.patch?()=>Me.patch(N,D,p):Me.put?()=>Me.put(N,D,$o(this)):null,beforeIntermediate:b?Ge.put?()=>Ge.put(N,D,p):null:Ge.patch?()=>Ge.patch(N,D,p):Ge.put?()=>Ge.put(N,D,$o(this)):null,commit:(k,L,B)=>{if(B){if(N&&L?.version>(N.lastModified||0)&&(N.lastModified=L.version),this[un]=L,L?.value?.[fe])throw new Error("Can not assign a record to a record, check for circular references");b||(this[fe]=L?.value??null)}this[Mt]=p,this[Fu]=k;let $=L?.value,ce=p;if(this[Hu]=0,L?.version>=k)if(h){let le=L.localTime,$e=L.version;for(;ce&&(le>k||$e>=k&&le>0);){let re=l.get(le);if(!re)break;let Z=Ft(re);if($e=Z.version,$e>k){if(Z.type==="patch"){let be=Z.getValue(i);ce=nf(ce,be)}else if(Z.type==="put"||Z.type==="delete")return}else if($e===k)return;le=Z.previousLocalTime}}else{if(b)return;ce=nf(ce,$)}let ye;if(b?ye=ce:(this[fe]=$,ye=b?ce:$o(this,ce)),this[fe]=ye,ye?.[fe])throw new Error("Can not assign a record to a record, check for circular references");let te;b||(te=p),Ld(D,$,ye);let Be=b?"put":"patch";R(D,ye,L,k,0,h,N,N.expiresAt||(f?f+Date.now():0),Be,!1,te)}};O.addWrite(M)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Cn]){for await(let b of this.search(p))(await Xe.getResource(b[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[fe]?this._writeDelete(p):!1}_writeDelete(p){let b=Qn(this[Ne]),I=this[Ue];Il(I);let N=this[Ne];return b.addWrite({key:I,store:i,resource:this,nodeName:N?.nodeName,before:Me.delete?.bind(this,N,I),beforeIntermediate:Ge.delete?.bind(this,N,I),commit:(O,D,y)=>{let M=D?.value;y&&(N&&D?.version>(N.lastModified||0)&&(N.lastModified=D.version),RE(this,D)),!(D?.version>O)&&(Ld(this[Ue],M),st.trace("Write delete entry",I,O),h||m?(R(I,null,this[un],O,0,h,this[Ne],0,"delete"),h||Hm()):i.remove(this[Ue]))}}),!0}search(p){let b=this[Ne],I=Qn(b);if(!p)throw new Error("No query provided");let N=p.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(N=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(N));let O,D={};function y(Z,be){let qe;switch(be){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+be)}let As=qe&&{},qi;for(let je of Z){if(je.conditions){je.conditions=y(je.conditions,je.operator);continue}let jt=je[0]??je.attribute,Nn=jt==null?v:ni(S,jt);if(Nn){if(qe){let Os=Xn(jt),zt=As[Os];zt?(zt.push(je),qi=!0):As[Os]=[je]}(Nn.type||AS[je.comparator])&&(je[1]===void 0?je.value=k(je.value,Nn):je[1]=k(je[1],Nn))}else if(jt!=null)throw(0,vn.handleHDBError)(new Error,`${jt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(qi)for(let je in As){let jt=As[je],Nn=jt.length;if(Nn>1)for(let Os=0;Os<Nn;Os++){let zt=jt[Os];if(zt.comparator==="ge"||zt.comparator==="greater_than_equal")for(let xi=0;xi<Nn;xi++){let Xa=jt[xi];(Xa.comparator==="le"||Xa.comparator==="less_than_equal")&&(zt.comparator="between",zt.value=[zt.value,Xa.value],Z.splice(Z.indexOf(Xa),1))}if(zt.comparator==="equals"||!zt.comparator){for(let xi=0;xi<Nn;xi++)if(xi!==Os){let Xa=jt[xi];Z.splice(Z.indexOf(Xa),1)}break}}}return Z}a(y,"prepareConditions");function M(Z,be){if(p.enforceExecutionOrder)return Z;for(let qe of Z)qe.conditions&&(qe.conditions=M(qe.conditions,qe.operator));return Z.length>1&&be!=="or"?(0,BM.sortBy)(Z,Ef(Xe)):Z}a(M,"orderConditions");function k(Z,be){return Array.isArray(Z)?Z.map(qe=>gE(qe,be)):gE(Z,be)}a(k,"coerceTypedValues");let L=p.operator;(N.length>0||L)&&(N=y(N,L));let B=typeof p.sort=="object"&&p.sort,$;if(B&&L!=="or"){let Z=B.attribute;if(O=N.find(be=>Xn(be.attribute)===Xn(Z)),!O){if(!ni(S,Z))throw(0,vn.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);O={attribute:Z,comparator:"sort"},N.push(O)}O.descending=!!B.descending}N=M(N,L),B&&(N[0]===O?B.next&&($={dbOrderedAttribute:B.attribute,attribute:B.next.attribute,descending:B.next.descending,next:B.next.next}):(O&&N.splice(N.indexOf(O),1),$=B));let ce=p.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:N,operator:L,postOrdering:$,selectApplied:!!ce};let ye=I.useReadTxn(),te=OS(N,L,Xe,ye,p,b,(Z,be)=>QN(Z,ce,b,ye,be),D),Be=p.ensureLoaded!==!1;$||(te=re(te));let le=Xe.transformEntryForSelect(ce,b,ye,D,Be,!0),$e=Xe.transformToOrderedSelect(te,ce,$,ye,b,le);function re(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(re,"applyOffset"),$&&($e=re($e)),$e.onDone=()=>{$e.onDone=null,I.doneReadTxn()},$e.selectApplied=!0,$e.getColumns=()=>{if(ce){let Z=[];for(let be of ce)be==="*"?Z.push(...S.map(qe=>qe.name)):Z.push(be.name||be);return Z}return S.map(Z=>Z.name)},$e}static transformToOrderedSelect(p,b,I,N,O,D){let y=new dV;if(I){p=QN(p,b,N,O,null);let M;y.iterate=function(){let L,B=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),$,ce=I.dbOrderedAttribute,ye,te,Be=!0;function le(re){let Z=re.next&&le(re.next),be=re.descending;return(qe,As)=>{let qi=Bm(qe,re.attribute,N),je=Bm(As,re.attribute,N),jt=be?(0,da.compareKeys)(je,qi):(0,da.compareKeys)(qi,je);return jt===0?Z?.(qe,As)||0:jt}}a(le,"createComparator");let $e=le(I);return{async next(){let re;if(L)if(re=L.next(),re.done){if($)return y.onDone&&y.onDone(),re}else return{value:await D.call(this,re.value)};M=[],ye&&M.push(ye);do if(re=await B.next(),re.done){if($=!0,M.length)break;return y.onDone&&y.onDone(),re}else{let Z=re.value;if(Z?.then&&(Z=await Z),ce){let be=Bm(Z,ce,N);if(Be)Be=!1,te=be;else if(be!==te){te=be,ye=Z;break}}M.push(Z)}while(!0);return I.isGrouped,M.sort($e),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(),B.return()},throw(){y.onDone&&y.onDone(),B.throw()}}};let k=a(L=>{if(typeof b=="object"&&Array.isArray(L.attribute))for(let B=0;B<b.length;B++){let $=b[B],ce;if($.name===L.attribute[0]){for(ce=$.sort||($.sort={});ce.next;)ce=ce.next;ce.attribute=L.attribute.slice(1),ce.descending=L.descending}else $===L.attribute[0]&&(b[B]=ce={name:$,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,b,I,N,O,D){if(p&&(p===t||p?.length===1&&p[0]===t)){let L=a(B=>B?.key??B,"transform");return p===t?L:p.asArray?B=>[L(B)]:B=>({[t]:L(B)})}let y;O&&P&&!p?.every(L=>{let B;return typeof L=="object"?B=L.name:B=L,r[B]||B===t})&&(y=!0);let M,k=a(function(L){let B;if(L!=null){if(Mm=L,B=L.value||L.deref?.(),!B&&(L.key===void 0||L.deref)){if(L=Um(L.key??L,b,{transaction:I,lazy:p?.length<4},this.isSync,$=>$),L?.then)return L.then(k.bind(this));B=L?.value}if(y&&(L.metadataFlags&(Gu|qu)||L.expiresAt&&L.expiresAt<Date.now())){let $=vm(L.key??L,L,b);if($?.then)return $.then(k)}}if(B==null)return D?ua.SKIP:B;if(p&&!(p[0]==="*"&&p.length===1)){let $,ce=a((te,Be)=>{let le;typeof te=="object"?le=te.name:le=te;let $e=Gi?.[le],re;if($e){let Z=N?.[le];if(Z)if(Z.hasMappings){let qe=$e.from?B[$e.from]:Xn(L.key);re=Z.get(qe),re||(re=[])}else re=Z.fromRecord?.(B);else re=$e(B,b,L);let be=a(qe=>{if(qe&&typeof qe=="object"){let As=$e.definition?.tableClass||Xe;M||(M={});let qi=M[le]||(M[le]=As.transformEntryForSelect(le===te?null:te.select||(Array.isArray(te)?te:null),b,I,Z,O));if(Array.isArray(qe)){let je=[],jt=As.transformToOrderedSelect(qe,te.select,typeof te.sort=="object"&&te.sort,b,I,qi)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Nn=a(zt=>{for(;!zt.done;){if(zt?.then)return zt.then(Nn);je.push(zt.value),zt=jt.next()}Be(je,le)},"nextValue"),Os=Nn(jt.next());Os&&($||($=[]),$.push(Os));return}else if(qe=qi.call(this,qe),qe?.then){$||($=[]),$.push(qe.then(je=>Be(je,le)));return}}Be(qe,le)},"handleResolvedValue");re?.then?($||($=[]),$.push(re.then(be))):be(re);return}else re=B[le],re&&typeof re=="object"&&le!==te&&(re=Xe.transformEntryForSelect(te.select||te,b,I,null)({value:re}));Be(re,le)},"selectAttribute"),ye;if(typeof p=="string")ce(p,te=>{ye=te});else if(Array.isArray(p))if(p.asArray)ye=[],p.forEach((te,Be)=>{te==="*"?p[Be]=B:ce(te,le=>ye[Be]=le)});else{ye={};let te=p.forceNulls;for(let Be of p)if(Be==="*")for(let le in B)ye[le]=B[le];else ce(Be,(le,$e)=>{le===void 0&&te&&(le=null),ye[$e]=le})}else throw new vn.ClientError("Invalid select"+p);return $?Promise.all($).then(()=>ye):ye}return B},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let b=!p.rawEvents,I=xI(Xe,this[Ue]??null,function(y,M,k,L){try{let B=M.getValue?.(i,b);if(!B&&M.type==="patch"&&b){let $=i.getEntry(y);$?.version===M.version?B=$.value:B=M.getValue?.(i,!0,k),M.type="put"}this.send({id:y,timestamp:k,value:B,version:M.version,type:M.type,beginTxn:L})}catch(B){st.error(B)}},p.startTime||0,this[Cn]);this[Cn]&&(I.includeDescendants=!0,p.onlyChildren&&(I.onlyChildren=!0)),p.crossThreads===!1&&(I.crossThreads=!1),p.supportsTransactions&&(I.supportsTransactions=!0);let N=this[Ue],O=p.previousCount;O>1e3&&(O=1e3);let D=p.startTime;if(this[Cn]){if(D){if(O)throw new vn.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(N==null||UM(N,L)){let B=k.getValue(i,b,y);I.send({id:L,timestamp:y,value:B,version:k.version,type:k.type})}I.startTime=y}}else if(O){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 B=L.recordId;if(N==null||UM(N,B)){let $=L.getValue(i,b,M);if(y.push({id:B,timestamp:M,value:$,version:L.version,type:L.type}),--O<=0)break}}catch(L){st.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:N??!1,end:N==null?void 0:[N,da.MAXIMUM_KEY],versions:!0}))M&&I.send({id:y,timestamp:L,value:M,version:k,type:"put"})}else{O&&!D&&(D=0);let y=this[un]?.localTime;if(y===cS&&(i.cache?.delete(N),this[un]=i.getEntry(N),st.trace("re-retrieved record",y,this[un]?.localTime),y=this[un]?.localTime),st.trace("Subscription from",D,"from",N,y),D<y){let M=[],k=y;do{let L=l.get(k);if(L){p.omitCurrent=!0;let B=Ft(L),$=B.getValue(i,b,k);b&&(B.type="put"),M.push({id:N,value:$,timestamp:k,...B}),k=B.previousLocalTime}else break;O&&O--}while(k>D&&O!==0);for(let L=M.length;L>0;)I.send(M[--L]);I.startTime=y}!p.omitCurrent&&this.doesExist()&&I.send({id:N,timestamp:y,value:this,version:this[Fu],type:"put"})}return p.listener&&I.on("data",p.listener),I}doesExist(){return!!(this[fe]||this[Hu])}publish(p,b){this._writePublish(p,b)}_writePublish(p,b){let I=Qn(this[Ne]),N=this[Ue]||null;Il(N);let O=this[Ne];I.addWrite({key:N,store:i,entry:this[un],nodeName:O?.nodeName,validate:()=>{O?.source||(I.checkOverloaded(),this.validate(p))},before:Me.publish?.bind(this,O,N,p),beforeIntermediate:Ge.publish?.bind(this,O,N,p),commit:(D,y,M)=>{y===void 0&&m&&!h&&Hm(),R(N,y?.value??null,y,y?.version||D,0,!0,O,y?.expiresAt,"message",!1,p)}})}validate(p,b){let I,N=a((O,D,y)=>{if(D.type&&O!=null)if(b&&O.__op__&&(O=O.value),D.properties){typeof O!="object"&&(I||(I=[])).push(`Value ${cs(O)} 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 B=M[k],$=N(O[B.name],B,y+"."+B.name);$&&(O[B.name]=$)}if(D.sealed&&O!=null&&typeof O=="object")for(let k in O)M.find(L=>L.name===k)||(I||(I=[])).push(`Property ${k} is not allowed within object in property ${y}`)}else switch(D.type){case"Int":(typeof O!="number"||O>>0!==O)&&(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(M=>typeof M=="string")||(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(D.elements)for(let M=0,k=O.length;M<k;M++){let L=O[M],B=N(L,D.elements,y+"[*]");B&&(O[M]=B)}}else(I||(I=[])).push(`Value ${cs(O)} in property ${y} must be a Buffer or Uint8Array`);break}D.nullable===!1&&O==null&&(I||(I=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,D=S.length;O<D;O++){let y=S[O];if(!y.relationship&&(!b||y.name in p)){let M=N(p[y.name],y,y.name);M&&(p[y.name]=M)}}if(d)for(let O in p)S.find(D=>D.name===O)||(I||(I=[])).push(`Property ${O} is not allowed`);if(I)throw new vn.ClientError(I.join(". "))}getUpdatedTime(){return this[Fu]}wasLoadedFromSource(){return P?!!this[xg]:void 0}static async addAttributes(p){let b=S.slice(0);for(let I of p){if(!I.name)throw new vn.ClientError("Attribute name is required");if(I.name.match(/[`/]/))throw new vn.ClientError("Attribute names cannot include backticks or forward slashes");b.push(I)}return Et({table:s,database:c,schemaDefined:_,attributes:b}),Xe.indexingOperation}static async removeAttributes(p){let b=S.filter(I=>!p.includes(I.name));return Et({table:s,database:c,schemaDefined:_,attributes:b}),Xe.indexingOperation}static getRecordCount(p){let b=i.getStats().entryCount,I=5e3,N=1e3,O;b>I&&!p?.exactCount&&(O=N);let D=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&D++;if(O){let y=D;D=0;for(let{value:Be}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))Be!=null&&D++;let M=O*2,k=(D+y)/M,L=Math.pow((D-y+1)/O/2,2)+k*(1-k)/M,B=Math.max(Math.sqrt(L)*b,1),$=Math.round(k*b),ce=Math.max($-1.96*B,0),ye=Math.min($+1.96*B,b),te=Math.pow(10,Math.round(Math.log10(B)));return te>$&&(te=te/10),D=Math.round($/te)*te,{recordCount:D,estimatedRange:[Math.round(ce),Math.round(ye)]}}return{recordCount:D}}static updatedAttributes(){Gi=this.propertyResolvers={$id:(p,b,I)=>({value:I.key}),$updatedtime:(p,b,I)=>I.version,$record:(p,b,I)=>I?{value:p}:p};for(let p of this.attributes){p.resolve=null;let b=p.relationship;if(b)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),WN=!0,b.to)p.elements?.definition?(Gi[p.name]=p.resolve=(I,N,O)=>{let D=I[b.from?b.from:t],y=p.elements.definition.tableClass;return O?ac({attribute:b.to,value:D},Qn(N).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:b.to,value:D}],N).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,b.from&&(p.resolve.from=b.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(b.from){let I=p.definition||p.elements?.definition;I?(Gi[p.name]=p.resolve=(N,O,D)=>{let y=N[b.from];if(y!==void 0){if(p.elements){let M,k=y.map(L=>{let B=D?I.tableClass.primaryStore.getEntry(L,{transaction:Qn(O).getReadTxn()}):I.tableClass.get(L,O);return B?.then&&(M=!0),B});return b.filterMissing?M?Promise.all(k).then(L=>L.filter(vM)):k.filter(vM):M?Promise.all(k):k}return D?I.tableClass.primaryStore.getEntry(y,{transaction:Qn(O).getReadTxn()}):I.tableClass.get(y,O)}},p.set=(N,O)=>{if(Array.isArray(O)){let D=O.map(y=>y[Ue]||y[I.tableClass.primaryKey]);N[b.from]=D}else{let D=O[Ue]||O[I.tableClass.primaryKey];N[b.from]=D}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=b.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`)}lf(this,this)}static async deleteHistory(p=0){let b;for(let{key:I,value:N}of l.getRange({start:0,end:p}))await xu(),Ft(N).tableId===n&&(b=l.remove(I));await b}static async*getHistory(p=0,b=1/0){for(let{key:I,value:N}of l.getRange({start:p,end:b})){await xu();let O=Ft(N);O.tableId===n&&(yield{id:O.recordId,localTime:I,version:O.version,type:O.type,value:O.getValue(i,!0,I),user:O.user})}}static async getHistoryOfRecord(p){let b=[];if(p==null)throw new Error("An id is required");let I=i.getEntry(p);if(!I)return b;let N=I.localTime;if(!N)throw new Error("The entry does not have a local audit time");let O=0;do{await xu();let D=l.get(N);if(D){let y=Ft(D);b.push({id:y.recordId,localTime:N,version:y.version,type:y.type,value:y.getValue(i,!0,N),user:y.user}),N=y.previousLocalTime}else break}while(O<1e3&&N);return b.reverse()}static cleanup(){z?.remove()}}Xe.updatedAttributes();let hV=Xe.prototype;return hV[o5]=!0,f&&Xe.setTTLExpiration(f/1e3),j&&pV(),Xe;function Ld(W,p,b){let I;for(let N in r){let O=r[N],D=O.isIndexing,y=b?.[N],M=p?.[N];if(y===M&&!D)continue;I=!0;let k=O.indexNulls,L=(0,ku.getIndexedValues)(M,k);if(L){LM&&O.prefetch(L.map(B=>({key:B,value:W})),MM);for(let B=0,$=L.length;B<$;B++)O.remove(L[B],W)}if(L=(0,ku.getIndexedValues)(y,k),L){LM&&O.prefetch(L.map(B=>({key:B,value:W})),MM);for(let B=0,$=L.length;B<$;B++)O.put(L[B],W)}}return I}a(Ld,"updateIndices");function Il(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>PM)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,da.writeKey)(W,c5,0)>PM)throw new Error("Primary key size is too large: "+W.length);return!0}a(Il,"checkValidId");function Um(W,p,b,I,N){let O=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),b.transaction?.isDone)return N(null,W);let D=i.getEntry(W,b);return D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),N(D,W)},"whenPrefetched");return I?O():ue>0?(ue--,O()):new Promise((D,y)=>{ue===0?(ue--,i.prefetch([W],()=>{M(),k()})):(J.push(W),Ee.push(k),J.length>EV&&(ue--,M()));function M(){if(J.length>0){let L=Ee;i.prefetch(J,()=>{ue===-1?M():ue++;for(let B of L)B()}),J=[],Ee=[],he>2&&he--}else ue=he,he<fV&&he++}a(M,"prefetch");function k(){try{D(O())}catch(L){y(L)}}a(k,"load")})}a(Um,"loadLocalRecord");function Dd(W){if(!W?.role)return;let p=W.role.permission;if(p.super_user)return l5;let b=p[c],I,N=b?.tables;if(N)return N[s];if(c==="data"&&(I=p[s])&&!I.tables)return I}a(Dd,"getTablePermissions");function vm(W,p,b,I){if(P){let N;if(b.noCache?N=!0:(p?(!p.value||p.metadataFlags&(Gu|qu)||p.expiresAt&&p.expiresAt<Date.now())&&(N=!0):N=!0,Un(!N,"cache-hit",s)),N){let O=jN(W,p,b).then(D=>(D?.value?.[fe]&&st.error("Can not assign a record with a record property"),b&&(D?.version>(b.lastModified||0)&&(b.lastModified=D.version),b.lastRefreshed=Date.now()),D));if(b?.onlyIfCached||p?.value&&I?.allowStaleWhileRevalidate?.(p,W)){if(O.catch(D=>st.warn(D)),b?.onlyIfCached&&!I.doesExist())throw new vn.ServerError("Entry is not cached",504);return}else return O}}}a(vm,"ensureLoadedFromSource");function Qn(W){let p=W?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let b=p.next;if(!b)return p=p.next=new Vo,p.lmdbDb=i,p;p=b}while(!0)}else return new df}a(Qn,"txnForContext");function Bm(W,p,b){if(!W)return;Mm=W;let I=W.value||W.deref?.()||(Mm=i.getEntry(W.key))?.value;if(typeof p=="object"){let O=Gi,D=I;for(let y=0,M=p.length;y<M;y++){let k=p[y],L=O?.[k];D=L&&D?L(D,b,!0)?.value:D?.[k],O=L?.definition?.tableClass?.propertyResolvers}return D}let N=Gi[p];return N?N(I,b):I[p]}a(Bm,"getAttributeValue");function QN(W,p,b,I,N){let O=N?.length,D={transaction:I,lazy:O>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function M(k,L){let B=k?.value;if(!B)return ua.SKIP;for(let $=0;$<O;$++)if(!y?.includes($)&&!N[$](B,k))return ua.SKIP;return L!==void 0&&(k.key=L),k}if(a(M,"processEntry"),O>0||!W.hasEntries){let k=W.map(L=>{if(y=null,typeof L=="object"&&L.key!==void 0)return O>0?M(L):L;if(L==null)return ua.SKIP;for(let B=0;B<O;B++){let ce=N[B].idFilter;if(ce){if(!ce(L))return ua.SKIP;y||(y=[]),y.push(B)}}return Um(L,b,D,!1,M)});return Array.isArray(W)&&(k=k.filter(L=>L!==ua.SKIP)),k.hasEntries=!0,k}return W}a(QN,"transformToEntries");async function jN(W,p,b){let I=p?.metadataFlags,N=p?.version,O,D;if(!i.attemptLock(W,N,()=>{clearTimeout(D);let L=i.getEntry(W);!L||!L.value||L.metadataFlags&(Gu|qu)?O(jN(W,i.getEntry(W),b)):O(L)}))return new Promise(L=>{O=L,D=setTimeout(()=>{i.unlock(W,N)},i5)});let y=p?.value,M={requestContext:b,replacingRecord:y,replacingVersion:N,source:null,resourceCache:b?.resourceCache},k=b?.responseHeaders;return new Promise((L,B)=>{let $;kg(Ze(M,async ce=>{let ye=performance.now(),te,Be,le;try{for(let be of Xe.sources)if(be.get&&(!be.get.reliesOnPrototype||be.prototype.get)&&(M.source=be,te=await be.get(W,M),te))break;le=I&Gu;let re=M.lastModified||le&&N;Be=le||re>N||!y,re||(re=(0,ku.getNextMonotonicTime)());let Z=performance.now()-ye;if(ln(Z,"cache-resolution",s),k&&qg(k,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ce.timestamp=re,f&&!M.expiresAt&&(M.expiresAt=Date.now()+f),te){if(typeof te!="object")throw new Error("Only objects can be cached and stored in tables");typeof te.toJSON=="function"&&(te=te.toJSON()),t&&te[t]!==W&&(te[t]=W)}$=!0,L({version:re,value:te})}catch(re){re.message+=` while resolving record ${W} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!b?.mustRevalidate||b?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(L({version:N,value:y}),st.trace(re.message,"(returned stale record)")):B(re),M.transaction.abort();return}if(b?.noCacheStore){M.transaction.abort();return}Qn(M).addWrite({key:W,store:i,entry:p,nodeName:"source",commit:(re,Z)=>{if(Z?.version!==N)return;let be=Ld(W,y,te);te?(Ge.put?.(M,W,te),R(W,te,Z,re,0,h&&Be||null,M,M.expiresAt,"put",!!le)):(Ge.delete?.(M,W),h||m?R(W,null,Z,re,0,h&&Be||null,M,0,"delete",!!le):i.remove(W,N))}})}),()=>{i.unlock(W,N)},ce=>{i.unlock(W,N),$&&st.error("Error committing cache update",ce)})})}a(jN,"getFromSource");function Hm(){if(xt!==wd&&(wd=xt,(0,_a.getWorkerIndex)()===(0,_a.getWorkerCount)()-1)){if(Cd&&clearTimeout(Cd),!xt)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let p=Math.ceil((Date.now()-W.getTime())/xt)*xt+W.getTime(),b=a(I=>{st.trace(`Scheduled next cleanup scan at ${new Date(I)}ms`),Cd=setTimeout(()=>U=U.then(async()=>{if(b(Math.max(I+xt,Date.now())),i.rootStore.status!=="open"){clearTimeout(Cd);return}let N=50,O=new Array(N),D=0;st.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:M,value:k,version:L,expiresAt:B}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let $;k===null&&!h&&L+s5<Date.now()?$=i.remove(M,L):B&&B+E<Date.now()&&($=Xe.evict(M,k,L),y++),$&&(await O[D],O[D]=$.catch(ce=>{st.error("Cleanup error",ce)}),++D>=N&&(D=0)),await xu()}st.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){st.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");b(p)}}a(Hm,"scheduleCleanup");function zN(){z=l?.addDeleteRemovalCallback(n,W=>{let p=i.getEntry(W);p?.value===null&&i.remove(W,p.version)})}a(zN,"addDeleteRemoval");function pV(){(0,_a.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=j.name,p=r[W];if(!p)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let{key:b,value:I}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(I);N?.value?N.value[W]<Date.now()&&Xe.evict(I,N.value,N.version):i.ifVersion(I,N?.version,()=>p.remove(b,I)),await xu()}}catch(W){st.error("Error in evicting old records",W)}},n5).unref()}a(pV,"runRecordExpirationEviction")}function Fg(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 MM(){}function u5(e){HM=e}function gE(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"&&!_5.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,AE.autoCast)(e):e}function UM(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 kg(e,t,r){return e?.then?e.then(t,r):t(e)}function RE(e,t){e[un]=t,e[fe]=t?.value??null,e[Fu]=t?.version}function vM(e){return e!=null}function cs(e){try{return JSON.stringify(e)}catch{return e}}var ls,ua,ku,BM,Yu,vn,$u,Vu,st,da,_a,AE,r5,HM,n5,s5,LM,i5,Fu,o5,un,Hu,DM,a5,xg,yc,Gu,qu,c5,PM,l5,Yge,_5,xu,bE=Ae(()=>{ls=G(C()),ua=require("lmdb"),ku=G(Ar()),BM=require("lodash");Jn();gS();Yu=G(X());$I();vn=G(ie()),$u=G(ai()),Vu=G(ts());Te();pf();st=G(x());_f();Yo();da=require("ordered-binary"),_a=G(tt());Yi();AE=G(K());Kl();di();tf();Bu();r5=new Uint8Array(9);r5[8]=192;n5=6e4,s5=864e5;Yu.initSync();LM=Yu.get(ls.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),i5=1e4,Fu=Symbol.for("version"),o5=Symbol.for("incremental-update"),un=Symbol("entry"),Hu=Symbol("is-saving"),DM=1,a5=2,xg=Symbol("loaded-from-source"),yc={isNotification:!0,ensureLoaded:!1},Gu=1,qu=8,c5=Buffer.allocUnsafeSlow(8192),PM=1978,l5={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Yge=(0,AE.convertToMS)(Yu.get(ls.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(OE,"makeTable");a(Fg,"attributesAsObject");a(MM,"noop");a(u5,"setServerUtilities");_5=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(gE,"coerceType");a(UM,"isDescendantId");xu=a(()=>new Promise(setImmediate),"rest");a(kg,"when");a(RE,"updateResource");a(vM,"exists");a(cs,"stringify")});var ke={};Fe(ke,{database:()=>Ru,databases:()=>ct,dropDatabase:()=>zT,dropTableMeta:()=>m5,getDatabases:()=>rn,getDefaultCompression:()=>PE,getTables:()=>d5,onUpdatedTable:()=>Qg,readMetaDb:()=>Ku,resetDatabases:()=>f5,table:()=>Et,tables:()=>dn});function d5(){return CE||rn(),dn||{}}function rn(){if(CE)return ct;CE=!0,Cc=new Map;let e=(0,bt.getHdbBasePath)()&&(0,it.join)((0,bt.getHdbBasePath)(),$t.DATABASES_DIR_NAME),t=(0,bt.get)($t.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,bt.get)($t.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,_n.existsSync)(e)?e:(0,it.join)((0,bt.getHdbBasePath)(),$t.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,_n.existsSync)(e))for(let r of(0,_n.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ku((0,it.join)(e,r.name),null,n)}if((0,_n.existsSync)((0,wc.getBaseSchemaPath)())){for(let r of(0,_n.readdirSync)((0,wc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,wc.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,wc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,_n.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);Ku((0,it.join)(n,i.name),(0,it.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,_n.existsSync)(s))for(let o of(0,_n.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&Ku((0,it.join)(s,o.name),(0,it.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,it.join)(c.path,(0,it.basename)(o+".mdb"));(0,_n.existsSync)(l)&&Ku(l,o,r,null,!0)}}for(let r in ct){let n=Cc.get(r);if(n){let s=ct[r];r.includes("delete")&&Bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Bn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in dn)delete dn[s];delete dn[DE]}}return Cc=null,ct}}function f5(){CE=!1;for(let[,e]of oo)e.needsDeletion=!0;rn();for(let[e,t]of oo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),oo.delete(e));return ct}function Ku(e,t,r=Kg,n,s){let i=new Vg.default(e,!1);try{let o=oo.get(e);o?o.needsDeletion=!1:(o=(0,yE.open)(i),oo.set(e,o));let c=new fa.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(NE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,_n.existsSync)(n)&&(i.path=n,_=(0,yE.open)(i),_.isLegacy=!0):_=ef(o));let u=xM(r),d=u[DE],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 R=f.get(m);R||f.set(m,R={attributes:[]}),(S==null||h.is_hash_attribute)&&(R.primary=h),S!=null&&R.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 J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){Bn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let R=u[E],T={},A=[],P,v,U=typeof S.audit=="boolean"?S.audit:(0,bt.get)($t.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,H=S.expiration,j=S.eviction,z=S.sealed;if(R)T=R.indices,A=R.attributes,R.schemaVersion++;else{P=S.tableId,P?P>=(l.get(Ic)||0)&&l.putSync(Ic,P+1):(S.tableId=P=l.get(Ic),P||(P=1),l.putSync(Ic,P+1),l.putSync(S.key,S));let J=new fa.default(!S.is_hash_attribute,S.is_hash_attribute);J.compression=S.compression;let Ee=(0,bt.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD);J.compression&&Ee&&(J.compression.threshold=Ee),v=jd(o.openDB(S.key,J)),v.rootStore=o,v.tableId=P}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!T[J.name]){let ue=new fa.default(!J.is_hash_attribute,J.is_hash_attribute);T[J.name]=o.openDB(J.key,ue),T[J.name].indexNulls=J.indexNulls}let Ee=A.find(ue=>ue.name===J.name);Ee?A.splice(A.indexOf(Ee),1,J):A.push(J)}}catch(Ee){Bn.error("Error trying to update attribute",J,A,T,Ee)}}if(!R){R=FM(u,E,OE({primaryStore:v,auditStore:_,audit:U,sealed:z,expirationMS:H&&H*1e3,evictionMS:j&&j*1e3,trackDeletes:F,tableName:E,tableId:P,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let J of Wg)J(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function xM(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=dn:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),Cc&&!Cc.has(e)){let r=new Set;t[DE]=r,Cc.set(e,r)}return t}function FM(e,t,r){return e[t]=r,r}function Ru({database:e,table:t}){e||(e=Kg),rn();let r=xM(e),n=(0,it.join)((0,bt.getHdbBasePath)(),$t.DATABASES_DIR_NAME),s=(0,bt.get)($t.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,bt.get)($t.CONFIG_PARAMS.STORAGE_PATH)||((0,_n.existsSync)(n)?n:(0,it.join)((0,bt.getHdbBasePath)(),$t.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=oo.get(o);if(!c){let l=new Vg.default(o,!1);c=(0,yE.open)(l),oo.set(o,c)}return c}async function zT(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e];for(let r in t){let s=t[r].primaryStore.rootStore;oo.delete(s.path),s.status==="open"&&(await s.close(),await LE.remove(s.path))}if(e==="data"){for(let r in dn)delete dn[r];delete dn[DE]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=Kg);let d=Ru({database:t,table:e}),f=ct[t],E=f?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,R;_==null&&(_=!0);let T=new fa.default(!1);for(let H of i)H.attribute?(H.name=H.attribute,H.indexed=!0):H.attribute=H.name,H.expiresAt&&(H.indexed=!0);let A,P;if(E){if(h=E.primaryKey,E.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);E.attributes.splice(0,E.attributes.length,...i)}else{let H=d.auditStore;H||(H=ef(d)),m=i.find(Ee=>Ee.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,m.compression=PE(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,bt.get)($t.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),Bn.trace(`${e} table loading, opening primary store`);let j=new fa.default(!1,!0);j.compression=m.compression;let z=e+"/",J=jd(d.openDB(z,j));J.rootStore=d,R=d.dbisDb=d.openDB(NE.INTERNAL_DBIS_NAME,T),J.tableId=R.get(Ic),J.tableId||(J.tableId=1),R.putSync(Ic,J.tableId+1),m.tableId=J.tableId,E=FM(f,e,OE({primaryStore:J,auditStore:H,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:R})),E.schemaVersion=1,A=!0,F(),R.put(z,m)}S=E.indices,R=R||(d.dbisDb=d.openDB(NE.INTERNAL_DBIS_NAME,T)),E.dbisDB=R;let v=[];for(let{key:H,value:j}of R.getRange({start:!0})){let[z,J]=H.toString().split("/");if(J===""&&(J=j.name),J){if(z!==e)continue}else J=z;if(!i.find(ue=>ue.name===J)?.indexed&&j.indexed&&!j.isPrimaryKey){F(),A=!0,R.remove(H);let ue=E.indices[z];ue&&v.push(ue)}}let U=[];try{for(let H of i||[]){if(H.relationship)continue;let j=e+"/"+(H.name||"");Object.defineProperty(H,"key",{value:j,configurable:!0});let z=R.get(j);if(H.isPrimaryKey){if(z=z||R.get(j=e+"/")||{},o!==E.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let Ee=Object.assign({},z);typeof o=="boolean"&&(o&&E.enableAuditing(o),Ee.audit=o),r&&(Ee.expiration=+r),n&&(Ee.eviction=+n),c!==void 0&&(Ee.sealed=c),A=!0,F(),R.put(j,Ee)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==H.type||z.indexed!==H.indexed||z.nullable!==H.nullable||JSON.stringify(z.attributes)!==JSON.stringify(H.attributes)||JSON.stringify(z.elements)!==JSON.stringify(H.elements);if(H.indexed){let Ee=new fa.default(!0,!1),ue=d.openDB(j,Ee);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Wu.workerData?.restartNumber)&&(A=!0,F(),z=R.get(j),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Wu.workerData?.restartNumber)&&(A=!0,H.indexNulls===void 0&&(H.indexNulls=!0),E.primaryStore.getStats().entryCount>0&&(H.lastIndexedKey=z?.lastIndexedKey||!1,H.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(H,"dbi",{value:ue}),U.push(H))),R.put(j,H)),z?.indexNulls&&H.indexNulls===void 0&&(H.indexNulls=!0),ue.indexNulls=H.indexNulls,S[H.name]=ue}else J&&(A=!0,F(),R.put(j,H))}}finally{P&&P()}if(A&&(E.schemaVersion++,E.updatedAttributes()),Bn.trace(`${e} table loading, running index`),U.length>0||v.length>0?E.indexingOperation=p5(E,U,v):A&&IE.signalSchemaChange(new wE.SchemaEventMsg(process.pid,"schema-change",E.databaseName,E.tableName)),E.origin=u,A)for(let H of Wg)H(E,u!=="cluster");return(r||n||s)&&E.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Bn.trace(`${e} table loaded`),E;function F(){P||d.transactionSync(()=>({then(H){P=H}}))}a(F,"startTxn")}async function p5(e,t,r){try{let n=e.schemaVersion;await IE.signalSchemaChange(new wE.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,GM.getIndexedValues)(u[h]);if(m)for(let S=0,R=m.length;S<R;S++)E.dbi.put(m[S],_)}}),s.then(()=>l--,f=>{l--,Bn.error(f)}),Wu.workerData&&Wu.workerData.restartNumber!==qM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>E5?await s:l>h5&&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 IE.signalSchemaChange(new wE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Bn.error("Error in indexing",n)}}function m5({table:e,database:t}){let r=Ru({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){Wg.push(e)}function PE(){let e=(0,bt.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,bt.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,bt.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD),n={startingOffset:32};return t&&(n.dictionary=LE.readFileSync(t)),r&&(n.threshold=r),e&&n}var bt,NE,yE,it,_n,wc,fa,Vg,$t,LE,Yg,GM,IE,wE,Wu,Bn,qM,Kg,DE,dn,ct,Ic,Wg,CE,oo,Cc,E5,h5,Te=Ae(()=>{bt=G(X()),NE=G(at()),yE=require("lmdb"),it=require("path"),_n=require("fs"),wc=G(ze());bE();fa=G(Xl()),Vg=G(Zl()),$t=G(C()),LE=G(require("fs-extra")),Yg=require("../index"),GM=G(Ar()),IE=G(ai()),wE=G(ts()),Wu=require("worker_threads"),Bn=G(x()),qM=G(tt());Yi();Kl();Kg="data",DE=Symbol("defined-tables");(0,bt.initSync)();dn=Object.create(null),ct=Object.create(null);(0,Yg._assignPackageExport)("databases",ct);(0,Yg._assignPackageExport)("tables",dn);Ic=Symbol.for("next-table-id"),Wg=[],oo=new Map;a(d5,"getTables");a(rn,"getDatabases");a(f5,"resetDatabases");a(Ku,"readMetaDb");a(xM,"ensureDB");a(FM,"setTable");a(Ru,"database");a(zT,"dropDatabase");a(Et,"table");E5=1e3,h5=10;a(p5,"runIndexing");a(m5,"dropTableMeta");a(Qg,"onUpdatedTable");a(PE,"getDefaultCompression")});var K=g((eRe,tU)=>{"use strict";var ao=require("path"),KM=require("fs-extra"),Dr=x(),kM=require("fs-extra"),ME=require("os"),S5=require("net"),T5=require("recursive-iterator"),lt=C(),g5=Jm(),$M=require("papaparse"),UE=require("moment"),{inspect:R5}=require("util"),VM=require("is-number"),Zge=require("lodash"),A5=require("minimist"),O5=require("https"),b5=require("http"),{hdb_errors:vE}=ie(),N5=/^((\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)))$/,WM=require("util").promisify(setTimeout),y5=100,I5=5,w5="",C5=4,YM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};tU.exports={isEmpty:fn,isEmptyOrZeroLength:Bs,arrayHasEmptyValues:P5,arrayHasEmptyOrZeroLengthValues:M5,buildFolderPath:U5,isBoolean:QM,errorizeMessage:L5,stripFileExtension:B5,autoCast:H5,autoCastJSON:jM,autoCastJSONDeep:zg,removeDir:G5,compareVersions:q5,isCompatibleDataVersion:x5,escapeRawValue:F5,unescapeValue:k5,stringifyProps:$5,timeoutPromise:Y5,isClusterOperation:W5,getClusterUser:j5,checkGlobalSchemaTable:Q5,getHomeDir:JM,getPropsFilePath:V5,promisifyPapaParse:z5,removeBOM:XM,createEventPromise:J5,checkProcessRunning:X5,checkSchemaTableExist:Z5,checkSchemaExists:ZM,checkTableExists:eU,getStartOfTomorrowInSeconds:e8,getLimitKey:t8,isObject:v5,isNotEmptyAndHasValue:D5,autoCasterIsNumberCheck:zM,backtickASTSchemaItems:r8,isPortTaken:K5,createForkArgs:n8,autoCastBoolean:s8,async_set_timeout:WM,getTableHashAttribute:i8,doesSchemaExist:o8,doesTableExist:a8,stringifyObj:c8,ms_to_time:l8,changeExtension:u8,getEnvCliRootPath:Jg,noBootFile:_8,httpRequest:d8,transformReq:f8,convertToMS:E8,PACKAGE_ROOT:lt.PACKAGE_ROOT};function L5(e){return e instanceof Error?e:new Error(e)}a(L5,"errorizeMessage");function fn(e){return e==null}a(fn,"isEmpty");function D5(e){return!fn(e)&&(e||e===0||e===""||QM(e))}a(D5,"isNotEmptyAndHasValue");function Bs(e){return fn(e)||e.length===0||e.size===0}a(Bs,"isEmptyOrZeroLength");function P5(e){if(fn(e))return!0;for(let t=0;t<e.length;t++)if(fn(e[t]))return!0;return!1}a(P5,"arrayHasEmptyValues");function M5(e){if(Bs(e))return!0;for(let t=0;t<e.length;t++)if(Bs(e[t]))return!0;return!1}a(M5,"arrayHasEmptyOrZeroLengthValues");function U5(...e){try{return e.join(ao.sep)}catch{console.error(e)}}a(U5,"buildFolderPath");function QM(e){return fn(e)?!1:e===!0||e===!1}a(QM,"isBoolean");function v5(e){return fn(e)?!1:typeof e=="object"}a(v5,"isObject");function B5(e){return Bs(e)?w5:e.slice(0,-C5)}a(B5,"stripFileExtension");function H5(e){return fn(e)||e===""||typeof e!="string"?e:YM[e]!==void 0?YM[e]:zM(e)===!0?Number(e):N5.test(e)?new Date(e):e}a(H5,"autoCast");function jM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(jM,"autoCastJSON");function zg(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=zg(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=zg(r);n!==r&&(e[t]=n)}return e}else return jM(e)}a(zg,"autoCastJSONDeep");function zM(e){if(e.startsWith("0.")&&VM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&VM(e))}a(zM,"autoCasterIsNumberCheck");async function G5(e){if(Bs(e))throw new Error(`Directory path: ${e} does not exist`);try{await kM.emptyDir(e),await kM.remove(e)}catch(t){throw Dr.error(`Error removing files in ${e} -- ${t}`),t}}a(G5,"removeDir");function q5(e,t){if(Bs(e)){Dr.info("Invalid current version sent as parameter.");return}if(Bs(t)){Dr.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(q5,"compareVersions");function x5(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(x5,"isCompatibleDataVersion");function F5(e){if(fn(e))return e;let t=String(e);return t==="."?lt.UNICODE_PERIOD:t===".."?lt.UNICODE_PERIOD+lt.UNICODE_PERIOD:t.replace(lt.FORWARD_SLASH_REGEX,lt.UNICODE_FORWARD_SLASH)}a(F5,"escapeRawValue");function k5(e){if(fn(e))return e;let t=String(e);return t===lt.UNICODE_PERIOD?".":t===lt.UNICODE_PERIOD+lt.UNICODE_PERIOD?"..":String(e).replace(lt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(k5,"unescapeValue");function $5(e,t){if(fn(e))return Dr.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+ME.EOL}!Bs(n)&&n[0]===";"?r+=" "+n+s+ME.EOL:Bs(n)||(r+=n+"="+s+ME.EOL)}catch{Dr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a($5,"stringifyProps");function JM(){let e;try{e=ME.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(JM,"getHomeDir");function V5(){let e=ao.join(JM(),lt.HDB_HOME_DIR_NAME,lt.BOOT_PROPS_FILE_NAME);return KM.existsSync(e)||(e=ao.join(__dirname,"../","hdb_boot_properties.file")),e}a(V5,"getPropsFilePath");function Y5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Y5,"timeoutPromise");async function K5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=S5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(K5,"isPortTaken");function W5(e){try{return lt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Dr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(W5,"isClusterOperation");function Q5(e,t){let r=(Te(),oe(ke)).getDatabases();if(!r[e])return vE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return vE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Q5,"checkGlobalSchemaTable");function j5(e,t){if(fn(t)){Dr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(fn(e)||Bs(e)){Dr.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){Dr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Dr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(j5,"getClusterUser");function z5(){$M.parsePromise=function(e,t,r){return new Promise(function(n,s){$M.parse(e,{header:!0,transformHeader:XM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(z5,"promisifyPapaParse");function XM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(XM,"removeBOM");function J5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Dr.info(`Got cluster status event response: ${R5(s)}`);try{i.cancel()}catch{Dr.error("Error trying to cancel timeout.")}n(s)})})}a(J5,"createEventPromise");async function X5(e){let t=!0,r=0;do await WM(y5*r++),(await g5.findPs(e)).length>0&&(t=!1);while(t&&r<I5);if(t)throw new Error(`process ${e} was not started`)}a(X5,"checkProcessRunning");function Z5(e,t){let r=ZM(e);if(r)return r;let n=eU(e,t);if(n)return n}a(Z5,"checkSchemaTableExist");function ZM(e){let{getDatabases:t}=(Te(),oe(ke));if(!t()[e])return vE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ZM,"checkSchemaExists");function eU(e,t){let{getDatabases:r}=(Te(),oe(ke));if(!r()[e][t])return vE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eU,"checkTableExists");function e8(){let e=UE().utc().add(1,lt.MOMENT_DAYS_TAG).startOf(lt.MOMENT_DAYS_TAG).unix(),t=UE().utc().unix();return e-t}a(e8,"getStartOfTomorrowInSeconds");function t8(){return UE().utc().format("DD-MM-YYYY")}a(t8,"getLimitKey");function r8(e){try{let t=new T5(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){Dr.error("Got an error back ticking items."),Dr.error(t)}}a(r8,"backtickASTSchemaItems");function n8(e){return[e]}a(n8,"createForkArgs");function s8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(s8,"autoCastBoolean");function i8(e,t){let{getDatabases:r}=(Te(),oe(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(i8,"getTableHashAttribute");function o8(e){let{getDatabases:t}=(Te(),oe(ke));return t()[e]!==void 0}a(o8,"doesSchemaExist");function a8(e,t){let{getDatabases:r}=(Te(),oe(ke));return r()[e]?.[t]!==void 0}a(a8,"doesTableExist");function c8(e){try{return JSON.stringify(e)}catch{return e}}a(c8,"stringifyObj");function l8(e){let t=UE.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(l8,"ms_to_time");function u8(e,t){let r=ao.basename(e,ao.extname(e));return ao.join(ao.dirname(e),r+t)}a(u8,"changeExtension");function Jg(){if(process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=A5(process.argv);if(e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[lt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Jg,"getEnvCliRootPath");var jg;function _8(){if(jg)return jg;let e=Jg();Jg()&&KM.pathExistsSync(ao.join(e,lt.HDB_CONFIG_FILE))&&(jg=!0)}a(_8,"noBootFile");function d8(e,t){let r;return e.protocol==="http:"?r=b5:r=O5,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(d8,"httpRequest");function f8(e){if(!e.schema&&!e.database){e.schema=lt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(f8,"transformReq");function E8(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(E8,"convertToMS")});var X=g((rRe,iU)=>{"use strict";var Xg=require("fs-extra"),Ea=require("path"),rU=require("os"),h8=require("properties-reader"),ju=x(),Qu=K(),_e=C(),BE=ht(),p8="Error initializing environment manager",HE="BOOT_PROPS_FILE_PATH",nU=!1,m8={[_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},fi={};iU.exports={BOOT_PROPS_FILE_PATH:HE,getHdbBasePath:S8,setHdbBasePath:T8,get:sU,initSync:R8,setProperty:ve,initTestEnvironment:A8};function S8(){return fi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(S8,"getHdbBasePath");function T8(e){fi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(T8,"setHdbBasePath");function sU(e){let t=BE.getConfigValue(e);return t===void 0?fi[e]:t}a(sU,"get");function ve(e,t){m8[e]&&(fi[e]=t),BE.updateConfigObject(e,t)}a(ve,"setProperty");function g8(){let e;try{e=Qu.getPropsFilePath(),Xg.accessSync(e,Xg.constants.F_OK|Xg.constants.R_OK),nU=!0;let t=h8(e);return fi[_e.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(_e.HDB_SETTINGS_NAMES.INSTALL_USER),fi[_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),fi[HE]=e,!0}catch{return ju.trace(`Environment manager found no properties file at ${e}`),!1}}a(g8,"doesPropFileExist");function R8(e=!1){try{(nU||g8()||Qu.noBootFile())&&(BE.initConfig(e),fi[_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=BE.getConfigValue(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ju.error(p8),ju.error(t),console.error(t),process.exit(1)}}a(R8,"initSync");function A8(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=Ea.join(__dirname,"../../","unitTests");fi[HE]=Ea.join(l,"hdb_boot_properties.file"),ve(_e.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ea.join(l,"settings.test")),ve(_e.HDB_SETTINGS_NAMES.INSTALL_USER,rU.userInfo()?rU.userInfo().username:void 0),ve(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ea.join(l,"envDir","log")),ve(_e.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(_e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ea.join(l,"envDir")),ve(_e.CONFIG_PARAMS.STORAGE_PATH,Ea.join(l,"envDir")),s&&(ve(_e.CONFIG_PARAMS.HTTP_SECUREPORT,sU(_e.CONFIG_PARAMS.HTTP_PORT)),ve(_e.CONFIG_PARAMS.HTTP_PORT,null)),ve(_e.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(_e.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(_e.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Qu.isEmpty(i)?!1:i),ve(_e.CONFIG_PARAMS.HTTP_CORS,Qu.isEmpty(i)?!1:i),ve(_e.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(_e.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(_e.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ea.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(_e.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Qu.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(_e.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(_e.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(_e.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(_e.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${HE}. Please check your boot props and settings files`;ju.fatal(r),ju.error(t)}}a(A8,"initTestEnvironment")});var tR={};Fe(tR,{loadGQLSchema:()=>N8,start:()=>eR,startOnMainThread:()=>b8});function eR({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 v=function(U){if(U.kind==="NonNullType"){let j=v(U.type);return j.nullable=!1,j}if(U.kind==="ListType")return{type:"array",elements:v(U.type)};let H={type:U.name?.value};return Object.defineProperty(H,"location",{value:U.loc.startToken}),H};a(v,"getProperty");let R=S.name.value,T=[],A={table:null,database:null,properties:T};f.set(R,A);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)A[F.name.value]=F.value.value;A.schema&&(A.database=A.schema),A.table||(A.table=R),A.audit&&(A.audit=A.audit!=="false"),A.attributes=A.properties,E.push(A)}if(U.name.value==="sealed"&&(A.sealed=!0),U.name.value==="export"){A.export=!0;for(let F of U.arguments)F.name.value==="name"&&(A.export={name:F.value.value})}}let P=!1;for(let U of S.fields){let F=v(U.type);F.name=U.name.value,T.push(F);for(let H of U.directives)if(H.name.value==="primaryKey")P?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,P=!0);else if(H.name.value==="indexed")F.indexed=!0;else if(H.name.value==="relationship"){let j={};for(let z of H.arguments)j[z.name.value]=z.value.value;F.relationship=j}else if(H.name.value==="createdTime")F.assignCreatedTime=!0;else if(H.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(H.name.value==="expiresAt")F.expiresAt=!0;else if(H.name.value==="allow"){let j=F.authorizedRoles=[];for(let z of H.arguments)z.name.value==="role"&&j.push(z.value.value)}}A.type=R,R==="Query"&&(h=A)}function m(S){let R=f.get(S.type);R?(Object.defineProperty(S,"properties",{value:R.properties}),Object.defineProperty(S,"definition",{value:R})):S.type==="array"?m(S.elements):O8.includes(S.type)||(0,oU.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 R of S.properties)m(R);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Zg.dirname)(n),S.tableClass):i.set((0,Zg.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Zg,oU,O8,b8,N8,aU=Ae(()=>{Zg=require("path");Te();oU=G(tt()),O8=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(eR,"start");b8=eR,N8=eR({ensureTable:Et}).handleFile});async function GE(e){return y8?(zu||(zu=I8(C8)),(await(await zu).import(e)).namespace):import(e)}async function I8(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),zu=new Compartment({console,Math,Date,fetch:w8,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,lU.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Jt,tables:dn,databases:ct})}};let n=await(0,cU.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),zu}function w8(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 C8(){return{Resource:Jt,tables:dn}}var cU,lU,y8,zu,rR=Ae(()=>{Jn();Te();cU=require("fs/promises"),lU=require("path"),y8=!1;a(GE,"secureImport");a(I8,"getCompartment");a(w8,"secureOnlyFetch");a(C8,"getGlobalVars")});var sR={};Fe(sR,{handleFile:()=>L8});async function L8(e,t,r,n){let s=new Map,i=(0,uU.pathToFileURL)(r).toString(),o=await GE(i);l(o.default)&&n.set((0,nR.dirname)(t),o.default),c(o,(0,nR.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 uU,nR,_U=Ae(()=>{uU=require("url");rR();nR=require("path");a(L8,"handleFile")});var oR={};Fe(oR,{start:()=>D8});function D8({resources:e}){e.set("login",iR),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var iR,dU=Ae(()=>{Jn();a(D8,"start");iR=class extends Jt{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 TU={};Fe(TU,{parse:()=>cR,streamAsJSON:()=>Ju,stringify:()=>ha});function Ju(e){return new aR({value:e})}function fU(e){return console.error(e),JSON.stringify(e.toString())}function EU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ha(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===mU)return SU(e);if(t.resolution)return t.resolution.then(()=>ha(e));throw t}}function SU(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+=SU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ha(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function cR(e){return U8.test(e)?P8.parse(e):JSON.parse(e)}var hU,pU,P8,M8,mU,aR,U8,lR=Ae(()=>{hU=require("stream"),pU=G(require("json-bigint-fixes")),P8=(0,pU.default)({useNativeBigInt:!0}),M8=1e4,mU={};BigInt.prototype.toJSON=function(){throw mU};a(Ju,"streamAsJSON");aR=class extends hU.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),fU)}catch(s){yield fU(s)}else yield ha(t)}else yield ha(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);EU(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>M8?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 EU(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(fU,"handleError");a(EU,"when");a(ha,"stringify");a(SU,"jsStringify");U8=/-?\d{16,}/;a(cR,"parse")});var qE=g((hRe,gU)=>{"use strict";var v8=Pn();gU.exports={writeTransaction:B8};function B8(e,t,r){return v8.writeTransaction(e,t,r)}a(B8,"writeTransaction")});var bU=g((SRe,OU)=>{"use strict";var H8=ir(),G8=Mn(),RU=x(),q8=wr(),mRe=qE(),x8=require("clone"),_R=require("alasql"),F8=Qf(),AU=require("util"),k8=AU.promisify(G8.getTableSchema),$8=AU.promisify(H8.search),V8=C(),uR=K();F8(_R);OU.exports={update:K8};var Y8="There was a problem performing this update. Please check the logs and try again.";async function K8({statement:e,hdb_user:t}){let r=await k8(e.table.databaseid,e.table.tableid),n=W8(e.columns);uR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=x8(s),c=uR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=_R.parse(l).statements[0],u=await $8(_),d=Q8(n,u);return j8(o,d,t)}a(K8,"update");function W8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=_R.compile(`SELECT ${r.expression.toString()} AS [${V8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RU.error(t),new Error(Y8)}}a(W8,"createUpdateRecord");function Q8(e,t){return uR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Q8,"buildUpdateRecords");async function j8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await q8.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RU.error(`Error delete new_attributes from update response: ${i}`)}return s}a(j8,"updateRecords")});var yU=g((ARe,NU)=>{var z8=require("alasql"),J8=ir(),X8=x(),Z8=Pn(),fR=require("util"),dR=K(),e6=C(),t6=Mn(),gRe=qE(),RRe=wr(),r6="record",n6="successfully deleted",s6=fR.callbackify(c6),i6=fR.promisify(J8.search),o6=fR.promisify(t6.getTableSchema);NU.exports={convertDelete:s6};function a6(e){return`${e.deleted_hashes.length} ${r6}${e.deleted_hashes.length===1?"":"s"} ${n6}`}a(a6,"generateReturnMessage");async function c6({statement:e,hdb_user:t}){let r=await o6(e.table.databaseid,e.table.tableid);dR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=dR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=z8.parse(o).statements[0],l={operation:e6.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await i6(c);let _=await Z8.deleteRecords(l);return dR.isEmptyOrZeroLength(_.message)&&(_.message=a6(_)),delete _.txn_time,_}catch(_){throw X8.error(_),_.hdb_code?_.message:_}}a(c6,"convertDelete")});var DU=g((bRe,LU)=>{"use strict";var l6=Zi(),{hdb_errors:IU}=ie(),{getDatabases:wU}=(Te(),oe(ke));LU.exports={checkSchemaExists:CU,checkSchemaTableExists:u6,schema_describe:l6};async function CU(e){if(!wU()[e])return IU.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CU,"checkSchemaExists");async function u6(e,t){let r=await CU(e);if(r)return r;if(!wU()[e][t])return IU.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u6,"checkSchemaTableExists")});var TR=g((CRe,xU)=>{"use strict";var{decode:_6}=require("msgpackr"),{isMainThread:yRe,parentPort:IRe,threadId:wRe}=require("worker_threads"),Xu=pt(),Lc=et(),pR=C(),lr=x(),hR=X(),d6=C(),{onMessageByType:f6}=tt(),MU=_i(),{recordAction:E6,recordActionBinary:h6}=(di(),oe(vu)),{publishToStream:p6}=Xu,{ConsumerEvents:m6}=require("nats"),S6=ir(),{promisify:T6}=require("util"),UU=T6(setTimeout),kE=1e4,$E,FE,g6,R6,vU,Zu=new Map,Dc=new Map;xU.exports={initialize:mR,ingestConsumer:SR,setSubscription:A6,setIgnoreOrigin:N6,getDatabaseSubscriptions:b6,updateConsumer:BU};async function mR(){f6(pR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await BU(n)}),vU=!0,lr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Xu.getNATSReferences();$E=e,FE=e.info.server_name,g6=t,R6=r}a(mR,"initialize");async function BU(e){if(e.status==="start"){let{js:t,jsm:r}=await HU(e.node_domain_name);SR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Zu.get(e.stream_name+e.node_domain_name);t&&(lr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Zu.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(BU,"updateConsumer");var VE=new Map;function A6(e,t,r){let n=VE.get(e);n||VE.set(e,n=new Map),n.set(t,r),vU||mR().then(O6)}a(A6,"setSubscription");async function O6(){let e=await S6.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Lc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await HU(r),!n))break;let{schema:o,table:c}=i,l=MU.createNatsTableStreamName(o,c);SR(l,n,s,r)}}}a(O6,"accessConsumers");async function HU(e){let t,r,n=1;for(;!r;)try{t=await $E.jetstream({domain:e}),r=await $E.jetstreamManager({domain:e})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&lr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<kE?n++*100:kE;await UU(i)}return{js:t,jsm:r}}a(HU,"connectToRemoteJS");function b6(){return VE}a(b6,"getDatabaseSubscriptions");var GU;function N6(e){GU=e}a(N6,"setIgnoreOrigin");var qU=100,PU=new Array(qU),xE=0;async function SR(e,t,r,n){let{connection:s}=await Xu.getNATSReferences();$E=s,FE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,FE),lr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&lr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(lr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Xu.createConsumer(r,e,FE,new Date(Date.now()).toISOString()));let u=o++*100<kE?o++*100:kE;await UU(u)}let c=!1,l;for(;!c;){if(Zu.get(e+n)==="close"||Dc.get(n)==="close"){Zu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:hR.get(pR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100}),Zu.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===m6.HeartbeatsMissed){let d=u.data;lr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===2&&(lr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await PU[xE],PU[xE]=y6(u).catch(d=>{lr.error(d)}),++xE>=qU&&(xE=0)}catch(u){u.message==="consumer deleted"?(lr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):lr.error("Error consuming clustering ingest, restarting consumer",u)}Xu.clearClientCache(),!c&&_&&await mR()}}a(SR,"ingestConsumer");async function y6(e){let t=_6(e.data);E6(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),lr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=hR.get(pR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Lc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Lc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Lc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!GU),h6(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Lc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;lr.trace("processing message:",o,c,_,(u?"records: "+u.map(P=>P?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),lr.trace(`messageProcessor nats msg id: ${e.headers.get(Lc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(P=>h=P),{timestamp:S,user:R,node_name:T}=f||{},A=VE.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,A.send(t);else if(u.length===1&&!l)A.send({type:ER(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:R,nodeName:T});else{let P=u.map((v,U)=>({type:ER(o),value:v,expiresAt:E,id:d?.[U],table:_}));for(;l;)P.push({type:ER(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:P,table:_,timestamp:S,onCommit:h,user:R,nodeName:T})}hR.get(d6.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&p6(e.subject.split(".").slice(0,-1).join("."),MU.createNatsTableStreamName(c,_),e.headers,e.data),await m}catch(o){lr.error(o)}e.ack()}a(y6,"messageProcessor");function ER(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ER,"convertOperation")});var pt=g((BRe,nv)=>{"use strict";var Vt=X();Vt.initSync();var I6=require("fs-extra"),w6=require("semver"),r_=require("path"),{monotonicFactory:C6}=require("ulidx"),kU=C6(),L6=require("util"),$U=require("child_process"),D6=L6.promisify($U.exec),P6=$U.spawn,Zt=et(),Pe=C(),YE=K(),us=x(),KE=_i(),M6=qE(),e_=ht(),{broadcast:U6,onMessageByType:v6,getWorkerIndex:B6}=tt(),{isMainThread:VU}=require("worker_threads"),{Encoder:H6,decode:OR}=require("msgpackr"),YU=new H6,{isEmpty:Ta}=YE,KU=Lr(),DRe=48*36e11;VU&&v6(Pe.ITC_EVENT_TYPES.RESTART,()=>{Pr=void 0,Sa=void 0});var{connect:G6,StorageType:q6,RetentionPolicy:x6,AckPolicy:bR,DeliverPolicy:NR,DiscardPolicy:F6,NatsConnection:PRe,JetStreamManager:MRe,JetStreamClient:URe,StringCodec:vRe,JSONCodec:k6,createInbox:yR,headers:$6,ErrorCode:FU}=require("nats"),{PACKAGE_ROOT:V6}=C(),Y6=qo(),{recordAction:K6}=(di(),oe(vu)),WU=k6(),W6="clustering",Q6=Y6.engines[Zt.NATS_SERVER_NAME],j6=r_.join(V6,"dependencies"),AR=r_.join(j6,`${process.platform}-${process.arch}`,Zt.NATS_BINARY_NAME),gR,RR,t_,pa,ma;nv.exports={runCommand:QU,checkNATSServerInstalled:z6,createConnection:IR,getConnection:WE,getJetStreamManager:n_,getJetStream:zU,getNATSReferences:_s,getServerList:X6,createLocalStream:wR,listStreams:JU,deleteLocalStream:Z6,getServerConfig:s_,listRemoteStreams:e9,viewStream:t9,viewStreamIterator:r9,publishToStream:n9,request:o9,reloadNATS:CR,reloadNATSHub:a9,reloadNATSLeaf:c9,extractServerName:i9,requestErrorHandler:l9,createLocalTableStream:tv,createTableStreams:d9,purgeTableStream:rv,purgeSchemaTableStreams:f9,getStreamInfo:E9,updateLocalStreams:p9,closeConnection:J6,getJsmServerName:QE,addNatsMsgHeader:XU,clearClientCache:jU,updateRemoteConsumer:u9,createConsumer:ZU,updateConsumerIterator:_9};async function QU(e,t=void 0){let{stdout:r,stderr:n}=await D6(e,{cwd:t});if(n)throw new Error(n.replace(`
10
10
  `,""));return r.replace(`
11
- `,"")}a(zU,"runCommand");async function z6(){try{await I6.access(gR)}catch{return!1}let e=await zU(`${gR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return w6.eq(t,Q6)}a(z6,"checkNATSServerInstalled");async function bR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await QU.getClusterUser();if(Ta(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}cs.trace("create nats connection called");let i=await q6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:kt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),cs.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&cs.error("Error with Nats client connection, connection closed",o),JU()}),i}a(bR,"createConnection");function JU(){Lr=void 0,pa=void 0,ma=void 0,Sa=void 0}a(JU,"clearClientCache");async function J6(){Lr&&(await Lr.drain(),Lr=void 0,pa=void 0,ma=void 0,Sa=void 0)}a(J6,"closeConnection");var Lr,Sa;async function VE(){return Sa||(Sa=bR(kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Lr=await Sa),Lr||Sa}a(VE,"getConnection");async function t_(){if(pa)return pa;Ta(Lr)&&await VE();let{domain:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ta(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return pa=await Lr.jetstreamManager({domain:e,timeout:6e4}),pa}a(t_,"getJetStreamManager");async function XU(){if(ma)return ma;Ta(Lr)&&await VE();let{domain:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ta(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ma=Lr.jetstream({domain:e,timeout:6e4}),ma}a(XU,"getJetStream");async function ls(){let e=Lr||await VE(),t=pa||await t_(),r=ma||await XU();return{connection:e,jsm:t,js:r}}a(ls,"getNATSReferences");async function X6(e){let t=kt.get(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await QU.getClusterUser(),s=await bR(t,r,n),i=NR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=jU.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 kE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(X6,"getServerList");async function yR(e,t){let{jsm:r}=await ls(),n=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:G6.File,retention:x6.Limits,subjects:t,discard:F6.Old,max_msgs:s,max_bytes:i,max_age:n})}a(yR,"createLocalStream");async function ZU(){let{jsm:e}=await ls(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(ZU,"listStreams");async function Z6(e){let{jsm:t}=await ls();await t.streams.delete(e)}a(Z6,"deleteLocalStream");async function e9(e){let{connection:t}=await ls(),r=[],n=NR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(jU.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(e9,"listRemoteStreams");async function t9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ls(),i=VU(),o={durable_name:i,ack_policy:AR.Explicit};t&&(o.deliver_policy=OR.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=RR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Jt.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(t9,"viewStream");async function*r9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ls(),i=VU(),o={durable_name:i,ack_policy:AR.Explicit};t&&(o.deliver_policy=OR.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=RR(_.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(Jt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(r9,"viewStreamIterator");async function n9(e,t,r,n){cs.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=ev(n,r);let{js:s}=await ls(),i=await YE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:WU.encode(n);try{cs.trace(`publishToStream publishing to subject: ${o}`),K6(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 rv(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){cs.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await yR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(n9,"publishToStream");function ev(e,t){t===void 0&&(t=$6());let r=kt.get(De.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Jt.MSG_HEADERS.ORIGIN)&&r&&t.append(Jt.MSG_HEADERS.ORIGIN,r),t}a(ev,"addNatsMsgHeader");function r_(e){e=e.toLowerCase();let t=e_.join(kt.get(De.CONFIG_PARAMS.ROOTPATH),W6);if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ta(TR)&&(TR={port:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.HUB,config_file:Jt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:e_.join(t,Jt.PID_FILES.HUB),hdb_nats_path:t}),TR;if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ta(SR)&&(SR={port:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.LEAF,config_file:Jt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xu.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Jt.SERVER_SUFFIX.LEAF,pid_file_path:e_.join(t,Jt.PID_FILES.LEAF),hdb_nats_path:t}),SR;cs.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(r_,"getServerConfig");async function tv(e,t,r,n){try{await e.consumers.add(t,{ack_policy:AR.Explicit,durable_name:r,deliver_policy:OR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(tv,"createConsumer");async function s9(e,t,r){await e.consumers.delete(t,r)}a(s9,"removeConsumer");function i9(e){return e.split(".")[1]}a(i9,"extractServerName");async function o9(e,t,r=6e4,n=NR()){if(!kE.isObject(t))throw new Error("data param must be an object");let s=WU.encode(t),{connection:i}=await ls(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return RR(c.data)}a(o9,"request");function IR(e){return new Promise(async(t,r)=>{let n=P6(gR,["--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(IR,"reloadNATS");async function a9(){let{pid_file_path:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await IR(e)}a(a9,"reloadNATSHub");async function c9(){let{pid_file_path:e}=r_(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await IR(e)}a(c9,"reloadNATSLeaf");function l9(e,t,r){let n;switch(e.code){case $U.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case $U.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(l9,"requestErrorHandler");async function u9(e,t){let r=t+Jt.SERVER_SUFFIX.LEAF,{connection:n}=await ls(),{jsm:s}=await S9(r),{schema:i,table:o}=e,c=$E.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await rv(async()=>{if(e.subscribe===!0)await tv(s,c,n.info.server_name,l);else try{await s9(s,c,n.info.server_name)}catch(_){cs.trace(_)}})}a(u9,"updateRemoteConsumer");async function _9(e,t,r,n){let s=$E.createNatsTableStreamName(e,t),i=r+Jt.SERVER_SUFFIX.LEAF,o={type:De.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!KU&&B6()<kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=mR();await c(o)}await U6(o),n==="stop"&&await kE.async_set_timeout(1e3)}a(_9,"updateConsumerIterator");function rv(e){return M6.writeTransaction(De.SYSTEM_SCHEMA_NAME,De.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(rv,"exclusiveLock");async function nv(e,t){let r=$E.createNatsTableStreamName(e,t),n=await YE(),s=h9(e,t,n);await yR(r,[s])}a(nv,"createLocalTableStream");async function d9(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await nv(n,s)}}a(d9,"createTableStreams");async function sv(e,t){if(kt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=$E.createNatsTableStreamName(e,t),{jsm:n}=await ls();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")cs.warn(r);else throw r}}a(sv,"purgeTableStream");async function f9(e,t){if(kt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await sv(e,t[r])}a(f9,"purgeSchemaTableStreams");async function E9(e){return(await t_()).streams.info(e)}a(E9,"getStreamInfo");function h9(e,t,r){return`${Jt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(h9,"createSubjectName");async function YE(){if(Zu)return Zu;if(Zu=(await t_())?.nc?.info?.server_name,Zu===void 0)throw new Error("Unable to get jetstream manager server name");return Zu}a(YE,"getJsmServerName");async function p9(){let e=await t_(),t=await YE(),r=await ZU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=m9(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");cs.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(p9,"updateLocalStreams");function m9(e){let{config:t}=e,r=!1,n=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=kt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=kt.get(De.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(m9,"updateStreamLimits");async function S9(e){let t,r;try{t=await Lr.jetstream({domain:e}),r=await Lr.jetstreamManager({domain:e})}catch(n){throw cs.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(S9,"connectToRemoteJS")});var jE=T((HRe,lv)=>{"use strict";var Pc=wf(),Mc=MU(),T9=x(),g9=require("uuid").v4,BRe=require("clone"),WE=ii(),Uc=C(),R9=require("util"),oo=Cn(),{handleHDBError:Dr,hdb_errors:A9}=ie(),{HDB_ERROR_MSGS:KE,HTTP_STATUS_CODES:Pr}=A9,{SchemaEventMsg:QE}=Xn(),ov=ht(),{getDatabases:O9}=(ge(),oe(Fe)),{transformReq:vc}=K();lv.exports={createSchema:N9,createSchemaStructure:av,createTable:b9,createTableStructure:cv,createAttribute:L9,dropSchema:y9,dropTable:I9,dropAttribute:w9,getBackup:D9};async function N9(e){let t=await av(e);return WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema)),t}a(N9,"createSchema");async function av(e){let t=Pc.schema_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw Dr(new Error,KE.SCHEMA_EXISTS_ERR(e.schema),Pr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,KE.SCHEMA_EXISTS_ERR(e.schema),!0);return await oo.createSchema(e),`database '${e.schema}' successfully created`}a(av,"createSchemaStructure");async function b9(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await cv(e)}a(b9,"createTable");async function cv(e){let t=Pc.create_table_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw Dr(new Error,KE.TABLE_EXISTS_ERR(e.schema,e.table),Pr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,KE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:g9(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await oo.createTable(n,e);else throw Dr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Pr.BAD_REQUEST);else await oo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(cv,"createTableStructure");async function y9(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Pc.schema_object(e),n=t??r;if(n)throw Dr(n,n.message,Pr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw Dr(new Error,s,Pr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,s,!0);let i=await Mc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await oo.dropSchema(e),WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema)),await ov.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(y9,"dropSchema");async function I9(e){let t=Pc.table_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Dr(new Error,r,Pr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await oo.dropTable(e),await ov.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(I9,"dropTable");async function w9(e){let t=Pc.attribute_object(e);if(t)throw Dr(t,t.message,Pr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Dr(new Error,r,Pr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Dr(new Error,"You cannot drop a hash attribute",Pr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Dr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Pr.BAD_REQUEST,void 0,void 0,!0);try{return await oo.dropAttribute(e),C9(e),WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw T9.error(`Got an error deleting attribute ${R9.inspect(e)}.`),n}}a(w9,"dropAttribute");function C9(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(C9,"dropAttributeFromGlobal");async function L9(e){vc(e);let t=O9()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Dr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Pr.BAD_REQUEST,void 0,void 0,!0);return await oo.createAttribute(e),WE.signalSchemaChange(new QE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(L9,"createAttribute");function D9(e){return oo.getBackup(e)}a(D9,"getBackup")});var _v=T((GRe,uv)=>{"use strict";var{OPERATIONS_ENUM:P9}=C(),wR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=P9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};uv.exports=wR});var CR=T((kRe,pv)=>{"use strict";var M9=Cn(),FRe=_v(),zE=K(),JE=C(),U9=X(),{handleHDBError:dv,hdb_errors:v9}=ie(),{HDB_ERROR_MSGS:fv,HTTP_STATUS_CODES:Ev}=v9,B9=Object.values(JE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),hv="To use this operation audit log must be enabled in harperdb-config.yaml";pv.exports=H9;async function H9(e){if(zE.isEmpty(e.schema))throw new Error(fv.SCHEMA_REQUIRED_ERR);if(zE.isEmpty(e.table))throw new Error(fv.TABLE_REQUIRED_ERR);if(!U9.get(JE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw dv(new Error,hv,Ev.BAD_REQUEST,JE.LOG_LEVELS.ERROR,hv,!0);let t=zE.checkSchemaTableExist(e.schema,e.table);if(t)throw dv(new Error,t,Ev.NOT_FOUND,JE.LOG_LEVELS.ERROR,t,!0);if(!zE.isEmpty(e.search_type)&&B9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await M9.readAuditLog(e)}a(H9,"readAuditLog")});var Sv=T((VRe,mv)=>{"use strict";var{OPERATIONS_ENUM:q9}=C(),LR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=q9.GET_BACKUP,this.schema=t,this.table=r}};mv.exports=LR});var Rv=T((QRe,gv)=>{"use strict";var G9=Cn(),KRe=Sv(),DR=K(),x9=C(),WRe=X(),{handleHDBError:F9,hdb_errors:k9}=ie(),{HDB_ERROR_MSGS:Tv,HTTP_STATUS_CODES:$9}=k9;gv.exports=V9;async function V9(e){if(DR.isEmpty(e.schema))throw new Error(Tv.SCHEMA_REQUIRED_ERR);if(DR.isEmpty(e.table))throw new Error(Tv.TABLE_REQUIRED_ERR);let t=DR.checkSchemaTableExist(e.schema,e.table);if(t)throw F9(new Error,t,$9.NOT_FOUND,x9.LOG_LEVELS.ERROR,t,!0);return await G9.getBackup(read_audit_log_object)}a(V9,"getBackup")});var Iv=T((zRe,yv)=>{var ao=require("validate.js"),Ov=rt(),Bc=C(),{handleHDBError:Y9,hdb_errors:K9}=ie(),{HDB_ERROR_MSGS:pt,HTTP_STATUS_CODES:W9}=K9,PR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Q9={STRUCTURE_USER:"structure_user"},Av=Object.values(Bc.ROLE_TYPES_ENUM),j9="attribute_permissions",z9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,J9=[j9,...Object.values(Hc)],Nv=[Hc.READ,Hc.INSERT,Hc.UPDATE],X9=[z9,...Nv];function Z9(e){let t=PR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,bv(e,t)}a(Z9,"addRoleValidation");function e7(e){let t=PR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,bv(e,t)}a(e7,"alterRoleValidation");function t7(e){let t=PR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ov.validateObject(e,t)}a(t7,"dropRoleValidation");var r7=["operation","role","id","permission","hdb_user","hdb_auth_header"];function bv(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)r7.includes(n[o])||s.push(n[o]);s.length>0&&At(pt.INVALID_ROLE_JSON_KEYS(s),r);let i=Ov.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=n7(e);o&&At(o,r),Av.forEach(c=>{e.permission[c]&&!ao.isBoolean(e.permission[c])&&At(pt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Av.indexOf(o)<0){if(o===Q9.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=>{J9.includes(u)||At(pt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{ao.isDefined(_[u])?ao.isBoolean(_[u])||At(pt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):At(pt.TABLE_PERM_MISSING(u),r,o,l)}),ao.isDefined(_.attribute_permissions)){if(!ao.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=>{!X9.includes(m)&&m!==Hc.DELETE&&At(pt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!ao.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}Nv.forEach(m=>{ao.isDefined(E[m])?ao.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 s7(r)}a(bv,"customValidate");yv.exports={addRoleValidation:Z9,alterRoleValidation:e7,dropRoleValidation:t7};function n7(e){let{operation:t,permission:r}=e;if(t===Bc.OPERATIONS_ENUM.ADD_ROLE||t===Bc.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?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return pt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(n7,"validateNoSUPerms");function s7(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 Y9(new Error,n,W9.BAD_REQUEST)}else return null}a(s7,"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 ZE=T((XRe,Dv)=>{"use strict";var wv=br(),Cv=nr(),i7=na(),UR=Iv(),vR=ii(),o7=require("uuid").v4,a7=require("util"),XE=C(),c7=K(),BR=Cv.searchByValue,l7=Cv.searchByHash,u7=a7.promisify(i7.delete),_7=Zn(),d7=pc(),{hdb_errors:f7,handleHDBError:ga}=ie(),{HDB_ERROR_MSGS:Lv,HTTP_STATUS_CODES:n_}=f7,{UserEventMsg:HR}=Xn();Dv.exports={addRole:E7,alterRole:h7,dropRole:p7,listRoles:m7};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 E7(e){let t=UR.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 BR(r)||[])}catch(i){throw ga(i)}if(n&&n.length>0)throw ga(new Error,Lv.ROLE_ALREADY_EXISTS(e.role),n_.CONFLICT,void 0,void 0,!0);e.id||(e.id=o7());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await wv.insert(s),vR.signalUserChange(new HR(process.pid)),e=MR(e),e}a(E7,"addRole");async function h7(e){let t=UR.alterRoleValidation(e);if(t)throw t;e=MR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await wv.update(r)}catch(s){throw ga(s)}if(n&&n?.message==="updated 0 of 1 records")throw ga(new Error,"Invalid role id",n_.BAD_REQUEST,void 0,void 0,!0);return await vR.signalUserChange(new HR(process.pid)),e}a(h7,"alterRole");async function p7(e){let t=UR.dropRoleValidation(e);if(t)throw ga(new Error,t,n_.BAD_REQUEST,void 0,void 0,!0);let r=new d7(XE.SYSTEM_SCHEMA_NAME,XE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await l7(r));if(n.length===0)throw ga(new Error,Lv.ROLE_NOT_FOUND,n_.NOT_FOUND,void 0,void 0,!0);let s=new _7(XE.SYSTEM_SCHEMA_NAME,XE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await BR(s)),o=!1;if(c7.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ga(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,n_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await u7(c),vR.signalUserChange(new HR(process.pid)),`${n[0].role} successfully deleted`}a(p7,"dropRole");async function m7(){return BR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(m7,"listRoles")});var vv=T((eAe,Uv)=>{"use strict";var S7=X(),co=require("joi"),T7=rt(),Pv=require("moment"),g7=require("fs-extra"),qR=require("path"),R7=require("lodash"),s_=C(),{LOG_LEVELS:Ra}=C(),A7="YYYY-MM-DD hh:mm:ss",O7=qR.resolve(__dirname,"../logs");Uv.exports=function(e){return T7.validateBySchema(e,N7)};var N7=co.object({from:co.custom(Mv),until:co.custom(Mv),level:co.valid(Ra.NOTIFY,Ra.FATAL,Ra.ERROR,Ra.WARN,Ra.INFO,Ra.DEBUG,Ra.TRACE),order:co.valid("asc","desc"),limit:co.number().min(1),start:co.number().min(0),log_name:co.custom(b7)});function Mv(e,t){if(Pv(e,Pv.ISO_8601).format(A7)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Mv,"validateDatetime");function b7(e,t){if(R7.invert(s_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=S7.get(s_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?s_.LOG_NAMES.HDB:e,i=s===s_.LOG_NAMES.INSTALL?qR.join(O7,s_.LOG_NAMES.INSTALL):qR.join(n,s);return g7.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(b7,"validateReadLogPath")});var xR=T((rAe,Hv)=>{"use strict";var eh=C(),y7=x(),I7=X(),w7=vv(),GR=require("path"),Bv=require("fs-extra"),{once:C7}=require("events"),{handleHDBError:L7,hdb_errors:D7}=ie(),{PACKAGE_ROOT:P7}=C(),M7=GR.join(P7,"logs"),U7=1e3,v7=200;Hv.exports=B7;async function B7(e){let t=w7(e);if(t)throw L7(t,t.message,D7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=I7.get(eh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?eh.LOG_NAMES.HDB:e.log_name,s=n===eh.LOG_NAMES.INSTALL?GR.join(M7,eh.LOG_NAMES.INSTALL):GR.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?U7: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(Bv.statSync(s).size-(h+5)*v7,0));let S=Bv.createReadStream(s,{start:m});S.on("error",U=>{y7.error(U)});let R=0,g=[],A="",P;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=A+U;let H=0,j;for(;(j=F.exec(U))&&!S.destroyed;){P&&(P.message=U.slice(H,j.index),v(P));let[z,J,Ae]=j,ue=Ae.split("] ["),Ee=ue[0],Me=ue[1];ue.splice(0,2),P={timestamp:J,thread:Ee,level:Me,tags:ue,message:""},H=j.index+z.length}A=U.slice(H)}),S.on("end",U=>{S.destroyed||P&&(P.message=A.trim(),v(P))}),S.resume();function v(U){let F,H,j;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),U.level===o&&F>=H&&F<=j&&R<E?R++:U.level===o&&F>=H&&F<=j&&(lo(U,f,g),R++,R===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),H=new Date(l),U.level===o&&F>=H&&R<E?R++:U.level===o&&F>=H&&(lo(U,f,g),R++,R===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),j=new Date(u),U.level===o&&F<=j&&R<E?R++:U.level===o&&F<=j&&(lo(U,f,g),R++,R===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),F>=H&&F<=j&&R<E?R++:F>=H&&F<=j&&(lo(U,f,g),R++,R===h&&S.destroy());break;case i:U.level===o&&R<E?R++:U.level===o&&(lo(U,f,g),R++,R===h&&S.destroy());break;case c:F=new Date(U.timestamp),H=new Date(l),F>=H&&R<E?R++:F>=H&&R>=E&&(lo(U,f,g),R++,R===h&&S.destroy());break;case _:F=new Date(U.timestamp),j=new Date(u),F<=j&&R<E?R++:F<=j&&R>=E&&(lo(U,f,g),R++,R===h&&S.destroy());break;default:R<E?R++:(lo(U,f,g),R++,R===h&&S.destroy())}}return a(v,"onLogMessage"),await C7(S,"close"),g}a(B7,"readLog");function lo(e,t,r){t==="desc"?H7(e,r):t==="asc"?q7(e,r):r.push(e)}a(lo,"pushLineToResult");function H7(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(H7,"insertDescending");function q7(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(q7,"insertAscending")});var th=T((aAe,Fv)=>{"use strict";var FR=require("joi"),{string:i_,boolean:qv,date:G7}=FR.types(),x7=rt(),{validateSchemaExists:sAe,validateTableExists:iAe,validateSchemaName:oAe}=ys(),F7=C(),k7=et(),Gv=X();Gv.initSync();var $7=i_.invalid(Gv.get(F7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(k7.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(),xv={operation:i_.valid("add_node","update_node","set_node_replication"),node_name:$7,subscriptions:FR.array().items({table:i_.optional(),schema:i_.optional(),database:i_.optional(),subscribe:qv.required(),publish:qv.required().custom(Y7),start_time:G7.iso()}).min(1).required()};function V7(e){return x7.validateBySchema(e,FR.object(xv))}a(V7,"addUpdateNodeValidator");function Y7(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(Y7,"checkForFalsy");Fv.exports={addUpdateNodeValidator:V7,validation_schema:xv}});var $v=T((lAe,kv)=>{var K7=rt(),W7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};kv.exports=function(e){return K7.validateObject(e,W7)}});var rh=T((uAe,Vv)=>{"use strict";var Q7=C().OPERATIONS_ENUM,kR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Q7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Vv.exports=kR});var Kv=T((dAe,Yv)=>{"use strict";var j7={OPERATION:"operation",REFRESH:"refresh"},$R=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},VR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};Yv.exports={JWTTokens:$R,TOKEN_TYPE_ENUM:j7,JWTRSAKeys:VR}});var c_=T((EAe,zv)=>{"use strict";var a_=require("jsonwebtoken"),YR=require("fs-extra"),KR=K(),Un=C(),{handleHDBError:Mr,hdb_errors:z7}=ie(),{HTTP_STATUS_CODES:Ur,AUTHENTICATION_ERROR_MSGS:vr}=z7,o_=x(),Wv=sE(),jR=wr(),J7=br().update,X7=rh(),Z7=ii(),{UserEventMsg:eee}=Xn(),uo=X();uo.initSync();var WR=require("path"),{JWTTokens:tee,JWTRSAKeys:ree,TOKEN_TYPE_ENUM:nh}=Kv(),nee=uo.get(Un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?uo.get(Un.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",see=uo.get(Un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?uo.get(Un.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sh="RS256",QR;zv.exports={createTokens:iee,validateOperationToken:aee,refreshOperationToken:oee,validateRefreshToken:jv};async function iee(e){if(KR.isEmpty(e)||typeof e!="object")throw Mr(new Error,vr.INVALID_AUTH_OBJECT,Ur.BAD_REQUEST,void 0,void 0,!0);if(KR.isEmpty(e.username))throw Mr(new Error,vr.USERNAME_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);if(KR.isEmpty(e.password))throw Mr(new Error,vr.PASSWORD_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await jR.findAndValidateUser(e.username,e.password),!t)throw Mr(new Error,vr.INVALID_CREDENTIALS,Ur.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw o_.error(f),Mr(new Error,vr.INVALID_CREDENTIALS,Ur.UNAUTHORIZED,void 0,void 0,!0)}let r=await ih(),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 Qv(i,r.private_key,r.passphrase),c=await a_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:see,algorithm:sh,subject:nh.REFRESH}),l=Wv.hash(c),_=new X7(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await J7(_)}catch(f){o_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Mr(new Error,vr.REFRESH_TOKEN_SAVE_FAILED,Ur.INTERNAL_SERVER_ERROR);return Z7.signalUserChange(new eee(process.pid)),new tee(o,c)}a(iee,"createTokens");async function Qv(e,t,r){return await a_.sign(e,{key:t,passphrase:r},{expiresIn:nee,algorithm:sh,subject:nh.OPERATION})}a(Qv,"signOperationToken");async function ih(){if(QR===void 0)try{let e=WR.join(uo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PASSPHRASE_NAME),t=WR.join(uo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=WR.join(uo.getHdbBasePath(),Un.LICENSE_KEY_DIR_NAME,Un.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await YR.readFile(e)).toString(),s=(await YR.readFile(t)).toString(),i=(await YR.readFile(r)).toString();QR=new ree(i,s,n)}catch(e){throw o_.error(e),Mr(new Error,vr.NO_ENCRYPTION_KEYS,Ur.INTERNAL_SERVER_ERROR)}return QR}a(ih,"getJWTRSAKeys");async function oee(e){if(!e)throw Mr(new Error,vr.INVALID_BODY,Ur.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Mr(new Error,vr.REFRESH_TOKEN_REQUIRED,Ur.BAD_REQUEST,void 0,void 0,!0);await jv(e.refresh_token);let t=await ih(),r=await a_.decode(e.refresh_token);return{operation_token:await Qv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(oee,"refreshOperationToken");async function aee(e){try{let t=await ih(),r=await a_.verify(e,t.public_key,{algorithms:sh,subject:nh.OPERATION});return await jR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw o_.warn(t),t.name&&t.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}}a(aee,"validateOperationToken");async function jv(e){let t;try{let r=await ih(),n=await a_.verify(e,r.public_key,{algorithms:sh,subject:nh.REFRESH});t=await jR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw o_.warn(r),r.name&&r.name==="TokenExpiredError"?Mr(new Error,vr.TOKEN_EXPIRED,Ur.FORBIDDEN):Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED)}if(!Wv.validate(t.refresh_token,e))throw Mr(new Error,vr.INVALID_TOKEN,Ur.UNAUTHORIZED);return t}a(jv,"validateRefreshToken")});var zR=T((mAe,Zv)=>{"use strict";var cee=$v(),qc=require("passport"),lee=require("passport-local").Strategy,uee=require("passport-http").BasicStrategy,_ee=require("util"),dee=wr(),Xv=_ee.callbackify(dee.findAndValidateUser),pAe=Wr(),fee=C(),Jv=c_();qc.use(new lee(function(e,t,r){Xv(e,t,r)}));qc.use(new uee(function(e,t,r){Xv(e,t,r)}));qc.serializeUser(function(e,t){t(null,e)});qc.deserializeUser(function(e,t){t(null,e)});function Eee(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":qc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===fee.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Jv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):Jv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:qc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Eee,"authorize");function hee(e,t){let r=cee(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(hee,"checkPermissions");Zv.exports={authorize:Eee,checkPermissions:hee}});var Gc=T((TAe,e0)=>{"use strict";var JR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},XR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};e0.exports={Node:JR,NodeSubscription:XR}});var r0=T((RAe,t0)=>{"use strict";var pee=C().OPERATIONS_ENUM,ZR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=pee.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};t0.exports=ZR});var l_=T((OAe,n0)=>{"use strict";var eA=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},tA=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)}};n0.exports={RemotePayloadObject:eA,RemotePayloadSubscription:tA}});var i0=T((bAe,s0)=>{"use strict";var rA=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}};s0.exports=rA});var c0=T((LAe,a0)=>{"use strict";var mee=i0(),IAe=_t(),o0=Ve(),See=x(),{getSchemaPath:wAe,getTransactionAuditStorePath:CAe}=ze(),{getDatabases:Tee}=(ge(),oe(Fe));a0.exports=gee;async function gee(e){let t=new mee;try{let r=Tee()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await o0.environmentDataSize(schema_path,e.name),o=await o0.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){See.warn(`unable to stat table dbi due to ${r}`)}return t}a(gee,"lmdbGetTableSize")});var u0=T((PAe,l0)=>{"use strict";var nA=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}};l0.exports=nA});var di=T((HAe,h0)=>{"use strict";var Ree=require("fs-extra"),Aee=require("path"),cr=require("systeminformation"),_o=x(),_0=ht(),UAe=et(),ah=C(),Oee=c0(),E0=Ji(),{getThreadInfo:d0}=tt(),fA=X();fA.initSync();var Nee=u0(),{openEnvironment:vAe}=Ve(),{getSchemaPath:BAe}=ze(),{database:bee}=(ge(),oe(Fe)),oh;h0.exports={getHDBProcessInfo:aA,getNetworkInfo:lA,getDiskInfo:cA,getMemoryInfo:oA,getCPUInfo:iA,getTimeInfo:sA,getSystemInformation:uA,systemInformation:yee,getTableSize:_A,getMetrics:dA};function sA(){return cr.time()}a(sA,"getTimeInfo");async function iA(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await cr.cpu();u.cpu_speed=await cr.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:R,...g}=await cr.currentLoad();return g.cpus=[],R.forEach(A=>{let{raw_load:P,raw_load_idle:v,raw_load_irq:U,raw_load_nice:F,raw_load_system:H,raw_load_user:j,...z}=A;g.cpus.push(z)}),u.current_load=g,u}catch(e){return _o.error(`error in getCPUInfo: ${e}`),{}}}a(iA,"getCPUInfo");async function oA(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await cr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return _o.error(`error in getMemoryInfo: ${e}`),{}}}a(oA,"getMemoryInfo");async function aA(){let e={core:[],clustering:[]};try{let t=await cr.processes(),r;try{r=Number.parseInt(await Ree.readFile(Aee.join(fA.get(ah.CONFIG_PARAMS.ROOTPATH),ah.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===ah.NODE_ERROR_CODES.ENOENT)_o.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");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 _o.error(`error in getHDBProcessInfo: ${t}`),e}}a(aA,"getHDBProcessInfo");async function cA(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await cr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await cr.fsStats();return e.read_write=_,e.size=await cr.fsSize(),e}catch(t){return _o.error(`error in getDiskInfo: ${t}`),e}}a(cA,"getDiskInfo");async function lA(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await cr.networkInterfaceDefault(),e.latency=await cr.inetChecksite("google.com"),(await cr.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 cr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return _o.error(`error in getNetworkInfo: ${t}`),e}}a(lA,"getNetworkInfo");async function uA(){if(oh!==void 0)return oh;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await cr.osInfo();e=c;let l=await cr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,oh=e,oh}catch(t){return _o.error(`error in getSystemInformation: ${t}`),e}}a(uA,"getSystemInformation");async function _A(){let e=[],t=await E0.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Oee(n));return e}a(_A,"getTableSize");async function dA(){let e=await E0.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=bee({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){_o.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(dA,"getMetrics");async function f0(){if(fA.get(ah.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await _0.getNATSReferences(),t=await _0.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(f0,"getNatsStreamInfo");async function yee(e){let t=new Nee;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await uA(),t.time=sA(),t.cpu=await iA(),t.memory=await oA(),t.disk=await cA(),t.network=await lA(),t.harperdb_processes=await aA(),t.table_size=await _A(),t.metrics=await dA(),t.threads=await d0(),t.replication=await f0(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await uA();break;case"time":t.time=sA();break;case"cpu":t.cpu=await iA();break;case"memory":t.memory=await oA();break;case"disk":t.disk=await cA();break;case"network":t.network=await lA();break;case"harperdb_processes":t.harperdb_processes=await aA();break;case"table_size":t.table_size=await _A();break;case"database_metrics":case"metrics":t.metrics=await dA();break;case"threads":t.threads=await d0();break;case"replication":t.replication=await f0();break;default:break}return t}a(yee,"systemInformation")});var fi=T((FAe,T0)=>{"use strict";var Iee=br(),EA=K(),wee=require("util"),Aa=C(),p0=X();p0.initSync();var Cee=zR(),m0=nr(),{Node:GAe,NodeSubscription:xAe}=Gc(),Lee=pc(),Dee=r0(),{RemotePayloadObject:Pee,RemotePayloadSubscription:Mee}=l_(),{handleHDBError:Uee,hdb_errors:vee}=ie(),{HTTP_STATUS_CODES:Bee,HDB_ERROR_MSGS:Hee}=vee,qee=Zn(),Gee=di(),xee=Fi(),{getDatabases:Fee}=(ge(),oe(Fe)),kee=wee.promisify(Cee.authorize),$ee=m0.searchByHash,Vee=m0.searchByValue;T0.exports={authHeaderToUser:Yee,isEmpty:Kee,getNodeRecord:Wee,upsertNodeRecord:Qee,buildNodePayloads:jee,checkClusteringEnabled:zee,getAllNodeRecords:Jee,getSystemInfo:Xee,reverseSubscription:S0};async function Yee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await kee(t,null),e}a(Yee,"authHeaderToUser");function Kee(e){return e==null}a(Kee,"isEmpty");async function Wee(e){let t=new Lee(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return $ee(t)}a(Wee,"getNodeRecord");async function Qee(e){let t=new Dee(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Iee.upsert(t)}a(Qee,"upsertNodeRecord");function S0(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(S0,"reverseSubscription");function jee(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}=S0(c),E=Fee()[l]?.[_],h=new Mee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Pee(r,t,s,n)}a(jee,"buildNodePayloads");function zee(){if(!p0.get(Aa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Uee(new Error,Hee.CLUSTERING_NOT_ENABLED,Bee.BAD_REQUEST,void 0,void 0,!0)}a(zee,"checkClusteringEnabled");async function Jee(){let e=new qee(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Vee(e))}a(Jee,"getAllNodeRecords");async function Xee(){let e=await Gee.getSystemInformation();return{hdb_version:xee.version(),node_version:e.node_version,platform:e.platform}}a(Xee,"getSystemInfo")});var hA=T(($Ae,I0)=>{"use strict";var ch=ht(),g0=K(),R0=et(),A0=C(),lh=x(),O0=jE(),Zee=hu(),{RemotePayloadObject:ete}=l_(),{handleHDBError:N0,hdb_errors:tte}=ie(),{HTTP_STATUS_CODES:b0}=tte,{NodeSubscription:y0}=Gc();I0.exports=rte;async function rte(e,t){let r;try{r=await ch.request(`${t}.${R0.REQUEST_SUFFIX}`,new ete(A0.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),lh.trace("Response from remote describe all request:",r)}catch(o){lh.error(`addNode received error from describe all request to remote node: ${o}`);let c=ch.requestErrorHandler(o,"add_node",t);throw N0(new Error,c,b0.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===R0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw N0(new Error,o,b0.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===A0.SYSTEM_SCHEMA_NAME){await ch.createLocalTableStream(l,c);let h=new y0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=g0.doesSchemaExist(l),u=n[l]!==void 0,d=c?g0.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(lh.trace(`addNode creating schema: ${l}`),await O0.createSchema({operation:"create_schema",schema:l})),!d&&f){lh.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Zee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await O0.createTable(h)}await ch.createLocalTableStream(l,c);let E=new y0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(rte,"reviewSubscriptions")});var d_=T((YAe,L0)=>{"use strict";var{handleHDBError:uh,hdb_errors:nte}=ie(),{HTTP_STATUS_CODES:_h}=nte,{addUpdateNodeValidator:ste}=th(),dh=x(),C0=C(),w0=et(),ite=K(),u_=ht(),__=fi(),ote=X(),ate=hA(),{Node:cte,NodeSubscription:lte}=Gc(),{broadcast:ute}=tt(),_te="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",dte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",fte=ote.get(C0.CONFIG_PARAMS.CLUSTERING_NODENAME);L0.exports=Ete;async function Ete(e,t=!1){dh.trace("addNode called with:",e),__.checkClusteringEnabled();let r=ste(e);if(r)throw uh(r,r.message,_h.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await __.getNodeRecord(n);if(!ite.isEmptyOrZeroLength(d))throw uh(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,_h.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await ate(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=_te,o;let c=__.buildNodePayloads(s,fte,C0.OPERATIONS_ENUM.ADD_NODE,await __.getSystemInfo()),l=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new lte(E.schema,E.table,E.publish,E.subscribe))}dh.trace("addNode sending remote payload:",c);let _;try{_=await u_.request(`${n}.${w0.REQUEST_SUFFIX}`,c)}catch(d){dh.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let m=s[E];m.publish=!1,m.subscribe=!1,await u_.updateRemoteConsumer(m,n)}let f=u_.requestErrorHandler(d,"add_node",n);throw uh(new Error,f,_h.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===w0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw uh(new Error,d,_h.INTERNAL_SERVER_ERROR,"error",d)}dh.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await u_.updateRemoteConsumer(E,n),E.subscribe===!0&&await u_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new cte(n,l,_.system_info);return await __.upsertNodeRecord(u),ute({type:"nats_update"}),i.length>0?o.message=dte:o.message=`Successfully added '${n}' to manifest`,o}a(Ete,"addNode")});var SA=T((QAe,M0)=>{"use strict";var{handleHDBError:pA,hdb_errors:hte}=ie(),{HTTP_STATUS_CODES:mA}=hte,{addUpdateNodeValidator:pte}=th(),f_=x(),P0=C(),D0=et(),WAe=K(),E_=ht(),h_=fi(),mte=X(),{cloneDeep:Ste}=require("lodash"),Tte=hA(),{Node:gte,NodeSubscription:Rte}=Gc(),{broadcast:Ate}=tt(),Ote="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Nte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",bte=mte.get(P0.CONFIG_PARAMS.CLUSTERING_NODENAME);M0.exports=yte;async function yte(e){f_.trace("updateNode called with:",e),h_.checkClusteringEnabled();let t=pte(e);if(t)throw pA(t,t.message,mA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await h_.getNodeRecord(r);s.length>0&&(n=Ste(s));let{added:i,skipped:o}=await Tte(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Ote,c;let l=h_.buildNodePayloads(i,bte,P0.OPERATIONS_ENUM.UPDATE_NODE,await h_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];f_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}f_.trace("updateNode sending remote payload:",l);let _;try{_=await E_.request(`${r}.${D0.REQUEST_SUFFIX}`,l)}catch(u){f_.error(`updateNode received error from request: ${u}`);let d=E_.requestErrorHandler(u,"update_node",r);throw pA(new Error,d,mA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===D0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw pA(new Error,u,mA.INTERNAL_SERVER_ERROR,"error",u)}f_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await E_.updateRemoteConsumer(f,r),f.subscribe===!0?await E_.updateConsumerIterator(f.schema,f.table,r,"start"):await E_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new gte(r,[],_.system_info)]),await Ite(n[0],i,_.system_info),o.length>0?c.message=Nte:c.message=`Successfully updated '${r}'`,c}a(yte,"updateNode");async function Ite(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 Rte(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await h_.upsertNodeRecord(n),Ate({type:"nats_update"})}a(Ite,"updateNodeTable")});var q0=T((zAe,H0)=>{"use strict";var B0=require("joi"),{string:U0}=B0.types(),wte=rt(),v0=C(),Cte=X(),Lte=et();H0.exports=Dte;function Dte(e){let t=U0.invalid(Cte.get(v0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Lte.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=B0.object({operation:U0.valid(v0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return wte.validateBySchema(e,r)}a(Dte,"removeNodeValidator")});var Eh=T((XAe,$0)=>{"use strict";var{handleHDBError:G0,hdb_errors:Pte}=ie(),{HTTP_STATUS_CODES:x0}=Pte,Mte=q0(),p_=x(),F0=fi(),Ute=K(),fh=C(),k0=et(),TA=ht(),vte=X(),{RemotePayloadObject:Bte}=l_(),{NodeSubscription:Hte}=Gc(),qte=Eu(),Gte=na(),{broadcast:xte}=tt(),Fte=vte.get(fh.CONFIG_PARAMS.CLUSTERING_NODENAME);$0.exports=kte;async function kte(e){p_.trace("removeNode called with:",e),F0.checkClusteringEnabled();let t=Mte(e);if(t)throw G0(t,t.message,x0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await F0.getNodeRecord(r);if(Ute.isEmptyOrZeroLength(n))throw G0(new Error,`Node '${r}' was not found.`,x0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Bte(fh.OPERATIONS_ENUM.REMOVE_NODE,Fte,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await TA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await TA.updateRemoteConsumer(new Hte(u.schema,u.table,!1,!1),r)}catch(d){p_.error(d)}}try{i=await TA.request(`${r}.${k0.REQUEST_SUFFIX}`,s),p_.trace("Remove node reply from remote node:",r,i)}catch(l){p_.error("removeNode received error from request:",l),o=!0}let c=new qte(fh.SYSTEM_SCHEMA_NAME,fh.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Gte.deleteRecord(c),xte({type:"nats_update"}),i?.status===k0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(p_.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(kte,"removeNode")});var K0=T((eOe,Y0)=>{"use strict";var V0=require("joi"),{string:$te,array:Vte}=V0.types(),Yte=rt(),Kte=th();Y0.exports=Wte;function Wte(e){let t=V0.object({operation:$te.valid("configure_cluster").required(),connections:Vte.items(Kte.validation_schema).required()});return Yte.validateBySchema(e,t)}a(Wte,"configureClusterValidator")});var ph=T((rOe,J0)=>{"use strict";var Qte=C(),hh=x(),jte=K(),zte=Eh(),Jte=d_(),W0=fi(),Xte=K0(),{handleHDBError:Q0,hdb_errors:Zte}=ie(),{HTTP_STATUS_CODES:j0}=Zte,ere="Configure cluster complete.",tre="Failed to configure the cluster. Check the logs for more details.",rre="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";J0.exports=nre;async function nre(e){hh.trace("configure cluster called with:",e),W0.checkClusteringEnabled();let t=Xte(e);if(t)throw Q0(t,t.message,j0.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(z0(zte,{operation:Qte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);hh.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(z0(Jte,E,E.node_name))}let c=await Promise.allSettled(i);hh.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"&&(hh.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(jte.isEmptyOrZeroLength(l))return{message:ere,connections:_};if(u)return{message:rre,failed_nodes:l,connections:_};throw Q0(new Error,tre,j0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(nre,"configureCluster");async function z0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(z0,"functionWrapper")});var Z0=T((sOe,X0)=>{"use strict";var mh=require("joi"),sre=rt(),{validateSchemaExists:ire,validateTableExists:ore,validateSchemaName:are}=ys(),cre=mh.object({operation:mh.string().valid("purge_stream"),schema:mh.string().custom(ire).custom(are).required(),table:mh.string().custom(ore).required()});function lre(e){return sre.validateBySchema(e,cre)}a(lre,"purgeStreamValidator");X0.exports=lre});var gA=T((oOe,eB)=>{"use strict";var{handleHDBError:ure,hdb_errors:_re}=ie(),{HTTP_STATUS_CODES:dre}=_re,fre=Z0(),Ere=ht(),hre=fi();eB.exports=pre;async function pre(e){if(e.purge_ingest!==!0){let s=fre(e);if(s)throw ure(s,s.message,dre.BAD_REQUEST,void 0,void 0,!0)}hre.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await Ere.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(pre,"purgeStream")});var Th=T((cOe,oB)=>{"use strict";var AA=fi(),mre=ht(),nB=X(),Sh=C(),Oa=et(),Sre=K(),RA=x(),{RemotePayloadObject:Tre}=l_(),{ErrorCode:tB}=require("nats"),rB=nB.get(Sh.CONFIG_PARAMS.CLUSTERING_ENABLED),sB=nB.get(Sh.CONFIG_PARAMS.CLUSTERING_NODENAME);oB.exports={clusterStatus:gre,buildNodeStatus:iB};async function gre(){let e={node_name:sB,is_enabled:rB,connections:[]};if(!rB)return e;let t=await AA.getAllNodeRecords();if(Sre.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(iB(t[n],e.connections));return await Promise.allSettled(r),e}a(gre,"clusterStatus");async function iB(e,t){let r=e.name,n=new Tre(Sh.OPERATIONS_ENUM.CLUSTER_STATUS,sB,void 0,await AA.getSystemInfo()),s,i,o=Oa.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await mre.request(Oa.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Oa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Oa.CLUSTER_STATUS_STATUSES.CLOSED,RA.error(`Error getting node status from ${r} `,s))}catch(l){RA.warn(`Error getting node status from ${r}`,l),l.code===tB.NoResponders?o=Oa.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===tB.Timeout?o=Oa.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Oa.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Rre(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!==Sh.PRE_4_0_0_VERSION&&await AA.upsertNodeRecord(l)}catch(l){RA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(iB,"buildNodeStatus");function Rre(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(Rre,"NodeStatusObject")});var Rh=T((uOe,aB)=>{"use strict";var{handleHDBError:Are,hdb_errors:Ore}=ie(),{HTTP_STATUS_CODES:Nre}=Ore,bre=ht(),yre=fi(),OA=K(),gh=require("joi"),Ire=rt(),wre=2e3,Cre=gh.object({timeout:gh.number().min(1),connected_nodes:gh.boolean(),routes:gh.boolean()});aB.exports=Lre;async function Lre(e){yre.checkClusteringEnabled();let t=Ire.validateBySchema(e,Cre);if(t)throw Are(t,t.message,Nre.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||OA.autoCastBoolean(n),o=s===void 0||OA.autoCastBoolean(s),c={nodes:[]},l=await bre.getServerList(r??wre),_={};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:OA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Lre,"clusterNetwork")});var _B=T((dOe,uB)=>{"use strict";var NA=require("joi"),cB=rt(),{route_constraints:lB}=hg();uB.exports={setRoutesValidator:Dre,deleteRoutesValidator:Pre};function Dre(e){let t=NA.object({server:NA.valid("hub","leaf").required(),routes:lB.required()});return cB.validateBySchema(e,t)}a(Dre,"setRoutesValidator");function Pre(e){let t=NA.object({routes:lB.required()});return cB.validateBySchema(e,t)}a(Pre,"deleteRoutesValidator")});var Oh=T((EOe,hB)=>{"use strict";var Na=Et(),bA=K(),Ah=C(),dB=_B(),{handleHDBError:fB,hdb_errors:Mre}=ie(),{HTTP_STATUS_CODES:EB}=Mre,Ure="cluster routes successfully set",vre="cluster routes successfully deleted";hB.exports={setRoutes:Bre,getRoutes:Hre,deleteRoutes:qre};function Bre(e){let t=dB.setRoutesValidator(e);if(t)throw fB(t,t.message,EB.BAD_REQUEST,void 0,void 0,!0);let r=Na.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=bA.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"?Na.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Na.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Ure,set:o,skipped:i}}a(Bre,"setRoutes");function Hre(){let e=Na.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Hre,"getRoutes");function qre(e){let t=dB.deleteRoutesValidator(e);if(t)throw fB(t,t.message,EB.BAD_REQUEST,void 0,void 0,!0);let r=Na.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=bA.isEmptyOrZeroLength(n)?null:n,Na.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=bA.isEmptyOrZeroLength(s)?null:s,Na.updateConfigValue(Ah.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:vre,deleted:i,skipped:o}}a(qre,"deleteRoutes")});var mB=T((pOe,pB)=>{"use strict";var m_=require("alasql"),ba=require("recursive-iterator"),us=x(),Gre=K(),S_=C(),yA=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,Fre(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=>S_.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=>!S_.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][S_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=xre(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(_=>!S_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new m_.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 xre(e){return e.filter(t=>t[S_.PERMS_CRUD_ENUM.READ])}a(xre,"filterReadRestrictedAttrs");function Fre(e,t,r,n,s){kre(e,t,r,n,s)}a(Fre,"interpretAST");function T_(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(T_,"addSchemaTableToMap");function kre(e,t,r,n,s){if(!e){us.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof m_.yy.Insert?Kre(e,t,r):e instanceof m_.yy.Select?$re(e,t,r,n,s):e instanceof m_.yy.Update?Vre(e,t,r):e instanceof m_.yy.Delete?Yre(e,t,r):us.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(kre,"getRecordAttributesAST");function $re(e,t,r,n,s){if(!e){us.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Gre.isEmptyOrZeroLength(i)){us.error("No schema specified");return}e.from.forEach(c=>{T_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),T_(c.table,t,r,n,s)});let o=new ba(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{us.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 ba(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{us.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 ba(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{us.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 ba(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{us.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a($re,"getSelectAttributes");function Vre(e,t,r){if(!e){us.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ba(e.columns),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IA(e.table.tableid,s,i.columnid,t,r)}a(Vre,"getUpdateAttributes");function Yre(e,t,r){if(!e){us.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ba(e.where),s=e.table.databaseid;T_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IA(e.table.tableid,s,i.columnid,t,r)}a(Yre,"getDeleteAttributes");function Kre(e,t,r){if(!e){us.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ba(e.columns),s=e.into.databaseid;T_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&IA(e.into.tableid,s,i.columnid,t,r)}a(Kre,"getInsertAttributes");function IA(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(IA,"pushAttribute");pB.exports=yA});var bh=T((SOe,RB)=>{var Nh=aa(),SB=require("chalk"),dn=x(),TB=require("prompt"),{promisify:Wre}=require("util"),wA=C(),Qre=require("fs-extra"),jre=require("path"),zre=K(),Jre=Fi(),gB=X();gB.initSync();var Xre=require("moment"),Zre=Wre(TB.get),ene=jre.join(gB.getHdbBasePath(),wA.LICENSE_KEY_DIR_NAME,wA.LICENSE_FILE_NAME,wA.LICENSE_FILE_NAME);RB.exports={getFingerprint:rne,setLicense:tne,parseLicense:CA,register:nne,getRegistrationInfo:ine};async function tne(e){if(e&&e.key&&e.company){try{dn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await CA(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(tne,"setLicense");async function rne(){let e={};try{e=await Nh.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dn.error(r),dn.error(t),new Error(r)}return e}a(rne,"getFingerprint");async function CA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dn.info("Validating license input...");let r=Nh.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 Qre.writeFile(ene,JSON.stringify({license_key:e,company:t}))}catch(n){throw dn.error("Failed to write License"),n}return"Registration successful."}a(CA,"parseLicense");async function nne(){let e=await sne();return CA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(nne,"register");async function sne(){let e=await Nh.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:SB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:SB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{TB.start()}catch(n){dn.error(n)}let r;try{r=await Zre(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(sne,"promptForRegistration");async function ine(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Nh.getLicense()}catch(r){throw dn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(zre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Jre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Xre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(ine,"getRegistrationInfo")});var OB=T((gOe,AB)=>{"use strict";var one=et(),LA=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+one.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,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"}};AB.exports=LA});var yB=T((AOe,bB)=>{"use strict";var NB=et(),DA=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+NB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+NB.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"}};bB.exports=DA});var wB=T((NOe,IB)=>{"use strict";var PA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};IB.exports=PA});var LB=T((yOe,CB)=>{"use strict";var ane=et(),MA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+ane.SERVER_SUFFIX.ADMIN,this.password=r}};CB.exports=MA});var Lh=T((wOe,MB)=>{"use strict";var xc=require("path"),wh=require("fs-extra"),cne=OB(),lne=yB(),une=wB(),_ne=LB(),UA=wr(),kc=K(),Br=Et(),Ih=C(),g_=et(),{CONFIG_PARAMS:mt}=Ih,R_=x(),A_=X(),DB=li(),vA=ht(),Fc="clustering",dne=1e4,PB=5;MB.exports={generateNatsConfig:Ene,removeNatsConfig:hne,getHubConfigPath:fne};function fne(){let e=A_.get(mt.ROOTPATH);return xc.join(e,Fc,g_.NATS_CONFIG_FILES.HUB_SERVER)}a(fne,"getHubConfigPath");async function Ene(e=!1,t=void 0){A_.initSync();let r=A_.get(mt.ROOTPATH),n=xc.join(r,Fc,g_.PID_FILES.HUB),s=xc.join(r,Fc,g_.PID_FILES.LEAF),i=Br.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xc.join(r,Fc,g_.NATS_CONFIG_FILES.HUB_SERVER),c=xc.join(r,Fc,g_.NATS_CONFIG_FILES.LEAF_SERVER),l=Br.getConfigFromFile(mt.CLUSTERING_TLS_CERTIFICATE),_=Br.getConfigFromFile(mt.CLUSTERING_TLS_PRIVATEKEY),u=Br.getConfigFromFile(mt.CLUSTERING_TLS_CERT_AUTH),d=Br.getConfigFromFile(mt.CLUSTERING_TLS_INSECURE),f=Br.getConfigFromFile(mt.CLUSTERING_TLS_VERIFY),E=Br.getConfigFromFile(mt.CLUSTERING_NODENAME),h=Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await vA.checkNATSServerInstalled()||Ch("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await UA.listUsers(),S=Br.getConfigFromFile(mt.CLUSTERING_USER),R=await UA.getClusterUser();(kc.isEmpty(R)||R.active!==!0)&&Ch(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yh(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yh(mt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yh(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),await yh(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],A=[];for(let[z,J]of m.entries())J.role.role===Ih.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(g.push(new _ne(J.username,DB.decrypt(J.hash))),A.push(new une(J.username,DB.decrypt(J.hash))));let P=[],{hub_routes:v}=Br.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(v))for(let z of v)P.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let U=new cne(Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Br.getConfigFromFile(mt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,g,A);u==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ih.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await wh.writeJson(o,U),R_.trace(`Hub server config written to ${o}`));let F=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new lne(Br.getConfigFromFile(mt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[F],[H],g,A,l,_,u,d);u==null&&delete j.tls.ca_file,(t===void 0||t===Ih.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await wh.writeJson(c,j),R_.trace(`Leaf server config written to ${c}`))}a(Ene,"generateNatsConfig");async function yh(e){let t=A_.get(e);return kc.isEmpty(t)&&Ch(`port undefined for '${e}'`),await kc.isPortTaken(t)&&Ch(`'${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(yh,"isPortAvailable");function Ch(e){let t=`Error generating clustering config: ${e}`;R_.error(t),console.error(t),process.exit(1)}a(Ch,"generateNatsConfigError");async function hne(e){let{port:t,config_file:r}=vA.getServerConfig(e),{username:n,decrypt_hash:s}=await UA.getClusterUser(),i=0,o=2e3;for(;i<PB;){try{let _=await vA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){R_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=PB)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 kc.async_set_timeout(o*(i*2))}let c="0".repeat(dne),l=xc.join(A_.get(mt.ROOTPATH),Fc,r);await wh.writeFile(l,c),await wh.remove(l),R_.notify(e,"started.")}a(hne,"removeNatsConfig")});var GB=T((LOe,qB)=>{"use strict";var fn=X(),pne=aa(),me=C(),O_=et(),Ei=require("path"),{PACKAGE_ROOT:Ph}=C(),UB=X(),Dh=K(),$c="/dev/null",mne=Ei.join(Ph,"launchServiceScripts"),vB=Ei.join(Ph,"utility/scripts"),Sne=Ei.join(vB,me.HDB_RESTART_SCRIPT),BB=Ei.resolve(Ph,"dependencies",`${process.platform}-${process.arch}`,O_.NATS_BINARY_NAME);function HB(){let t=pne.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 Dh.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Dh.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Ph}}a(HB,"generateMainServerConfig");var Tne=9930;function gne(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",O_.NATS_CONFIG_FILES.HUB_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=UB.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=O_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Tne?"-"+n:""),script:BB,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=$c,i.error_file=$c),i}a(gne,"generateNatsHubServerConfig");var Rne=9940;function Ane(){fn.initSync(!0);let e=fn.get(me.CONFIG_PARAMS.ROOTPATH),t=Ei.join(e,"clustering",O_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ei.join(fn.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=UB.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=O_.LOG_LEVEL_FLAGS[fn.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Rne?"-"+n:""),script:BB,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=$c,i.error_file=$c),i}a(Ane,"generateNatsLeafServerConfig");function One(){fn.initSync();let e=Ei.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:mne,autorestart:!1};return fn.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$c,t.error_file=$c),t}a(One,"generateClusteringUpgradeV4ServiceConfig");function Nne(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return Dh.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Dh.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:vB},script:Sne}}a(Nne,"generateRestart");function bne(){return{apps:[HB()]}}a(bne,"generateAllServiceConfigs");qB.exports={generateAllServiceConfigs:bne,generateMainServerConfig:HB,generateRestart:Nne,generateNatsHubServerConfig:gne,generateNatsLeafServerConfig:Ane,generateClusteringUpgradeV4ServiceConfig:One}});var Vc=T((MOe,XB)=>{"use strict";var He=C(),yne=K(),pi=Lh(),Mh=ht(),hi=et(),fo=GB(),Uh=X(),Eo=x(),Ine=fi(),{startWorker:xB,onMessageFromWorkers:wne}=tt(),Cne=di(),POe=require("util"),Lne=require("child_process"),Dne=require("fs"),{execFile:Pne}=Lne,we;XB.exports={enterPM2Mode:Mne,start:ho,stop:BA,reload:kB,restart:$B,list:HA,describe:YB,connect:mi,kill:qne,startAllServices:Gne,startService:qA,getUniqueServicesList:KB,restartAllServices:xne,isServiceRegistered:WB,reloadStopStart:QB,restartHdb:VB,deleteProcess:Bne,startClusteringProcesses:zB,startClusteringThreads:JB,isHdbRestartRunning:Hne,isClusteringRunning:kne,stopClustering:Fne,reloadClustering:$ne};var N_=!1;wne(e=>{e.type==="restart"&&Uh.initSync(!0)});function Mne(){N_=!0}a(Mne,"enterPM2Mode");function mi(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Eo.setupConsoleLogging(),r&&t(r),e(n)})})}a(mi,"connect");var Hr,Une=10,FB;function ho(e,t=!1){if(N_)return vne(e);let r=Pne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Hr.indexOf(r);o>-1&&Hr.splice(o,1),!FB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Une&&(Dne.existsSync(pi.getHubConfigPath())?ho(e):(await pi.generateNatsConfig(!0),ho(e),await new Promise(c=>setTimeout(c,3e3)),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Uh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&hi.LOG_LEVEL_HIERARCHY[o]>=hi.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===hi.LOG_LEVELS.ERR||u===hi.LOG_LEVELS.WRN?Eo.OUTPUTS.STDERR:Eo.OUTPUTS.STDOUT;Eo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=hi.LOG_LEVELS[f]}if(hi.LOG_LEVEL_HIERARCHY[o]>=hi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===hi.LOG_LEVELS.ERR||u===hi.LOG_LEVELS.WRN?Eo.OUTPUTS.STDERR:Eo.OUTPUTS.STDOUT;Eo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Hr=[],!Hr&&!t){let i=a(()=>{FB=!0,Hr&&(Hr.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)}Hr.push(r)}a(ho,"start");function vne(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(vne,"startWithPM2");function BA(e){if(!N_){for(let t of Hr||[])t.name===e&&(Hr.splice(Hr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await mi()}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(BA,"stop");function kB(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(kB,"reload");function $B(e){if(!N_)for(let t of Hr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a($B,"restart");function Bne(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Bne,"deleteProcess");async function VB(){await ho(fo.generateRestart())}a(VB,"restartHdb");async function Hne(){let e=await HA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Hne,"isHdbRestartRunning");function HA(){return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(HA,"list");function YB(e){return new Promise(async(t,r)=>{try{await mi()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(YB,"describe");function qne(){if(!N_){for(let e of Hr||[])e.kill();Hr=[];return}return new Promise(async(e,t)=>{try{await mi()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(qne,"kill");async function Gne(){try{await zB(),await JB(),await ho(fo.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(Gne,"startAllServices");async function qA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=fo.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=fo.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=fo.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=fo.generateNatsHubServerConfig(),await ho(r,t),await pi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=fo.generateNatsLeafServerConfig(),await ho(r,t),await pi.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=fo.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ho(r)}catch(r){throw we?.disconnect(),r}}a(qA,"startService");async function KB(){try{let e=await HA(),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(KB,"getUniqueServicesList");async function xne(e=[]){try{let t=!1,r=await KB();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 $B(o))}t&&await QB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(xne,"restartAllServices");async function WB(e){if(Hr?.find(r=>r.name===e))return!0;let t=await Cne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(WB,"isServiceRegistered");async function QB(e){let t=Uh.get(He.CONFIG_PARAMS.THREADS_COUNT)??Uh.get(He.CONFIG_PARAMS.THREADS),r=await YB(e),n=yne.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await BA(e),await qA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await VB():await kB(e)}a(QB,"reloadStopStart");var jB;async function zB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await qA(r,e)}}a(zB,"startClusteringProcesses");async function JB(){jB=xB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Mh.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Mh.updateLocalStreams();let e=await Ine.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Eo.info("Starting clustering upgrade 4.0.0 process"),xB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(JB,"startClusteringThreads");async function Fne(){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 jB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await BA(t)}}a(Fne,"stopClustering");async function kne(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await WB(t)===!1)return!1}return!0}a(kne,"isClusteringRunning");async function $ne(){await pi.generateNatsConfig(!0),await Mh.reloadNATSHub(),await Mh.reloadNATSLeaf(),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await pi.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a($ne,"reloadClustering")});var ya=T((BOe,iH)=>{"use strict";var Vne=require("minimist"),{isMainThread:xA,parentPort:tH}=require("worker_threads"),ct=C(),{PROCESS_DESCRIPTORS_VALIDATE:b_}=ct,vs=x(),FA=K(),Bh=Lh(),vh=ht(),vOe=et(),rH=Et(),Bs=Vc(),ZB=di(),Yne=vo(),{restartWorkers:Hh,onMessageByType:Kne}=tt(),{handleHDBError:Wne,hdb_errors:Qne}=ie(),{HTTP_STATUS_CODES:jne}=Qne,qh=X();qh.initSync();var y_=`Restarting HarperDB. This may take up to ${ct.RESTART_TIMEOUT_MS/1e3} seconds.`,zne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",eH="Clustering is not enabled so cannot be restarted",Jne="Invalid service",Yc,vn;iH.exports={restart:nH,restartService:kA};xA&&Kne(ct.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?kA({service:e.workerType}):nH({operation:"restart"})});async function nH(e){vn=Object.keys(e).length===0,Yc=await Bs.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR);let t=Vne(process.argv);if(t.service){await kA(t);return}if(vn&&!Yc){console.error(zne);return}if(vn&&console.log(y_),Yc){Bs.enterPM2Mode(),vs.notify(y_);let r=Yne(Object.keys(ct.CONFIG_PARAM_MAP),!0);return FA.isEmptyOrZeroLength(Object.keys(r))||rH.updateConfigValue(void 0,void 0,r,!0,!0),Xne(),y_}return xA?(vs.notify(y_),setTimeout(()=>{Hh()},50)):tH.postMessage({type:ct.ITC_EVENT_TYPES.RESTART}),y_}a(nH,"restart");async function kA(e){let{service:t}=e;if(ct.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Wne(new Error,Jne,jne.BAD_REQUEST,void 0,void 0,!0);if(Yc=await Bs.isServiceRegistered(ct.HDB_PROC_DESCRIPTOR),!xA)return tH.postMessage({type:ct.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case b_.clustering:if(!qh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=eH;break}vn&&console.log("Restarting clustering"),vs.notify("Restarting clustering"),await sH();break;case b_.clustering_config:case b_["clustering config"]:if(!qh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=eH;break}vn&&console.log("Restarting clustering_config"),vs.notify("Restarting clustering_config"),await Bs.reloadClustering();break;case"custom_functions":case"custom functions":case b_.harperdb:case b_.http_workers:if(vn&&!Yc){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}vn&&console.log("Restarting http_workers"),vs.notify("Restarting http_workers"),vn?await Bs.restart(ct.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Hh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(vs.error(r),vn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(kA,"restartService");async function Xne(){await sH(),await Bs.restart(ct.HDB_PROC_DESCRIPTOR),await FA.async_set_timeout(2e3),qh.get(ct.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await GA(),vn&&(await vh.closeConnection(),process.exit(0))}a(Xne,"restartPM2Mode");async function sH(){if(!rH.getConfigFromFile(ct.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await ZB.getHDBProcessInfo()).clustering.length===0)vs.trace("Clustering not running, restart will start clustering services"),await Bh.generateNatsConfig(!0),await Bs.startClusteringProcesses(),await Bs.startClusteringThreads(),await GA(),vn&&await vh.closeConnection();else{await Bh.generateNatsConfig(!0),Yc?(vs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Bs.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bs.restart(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await ZB.getHDBProcessInfo()).clustering.forEach(s=>{vs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await FA.async_set_timeout(3e3),await GA(),await vh.updateLocalStreams(),vn&&await vh.closeConnection(),vs.trace("Restart clustering restarting ingest and reply service threads");let t=Hh(ct.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Hh(ct.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(sH,"restartClustering");async function GA(){await Bh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Bh.removeNatsConfig(ct.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(GA,"removeNatsConfig")});var pH=T((GOe,hH)=>{"use strict";var qOe=require("lodash"),qr=C(),{handleHDBError:oH,hdb_errors:Zne}=ie(),{HDB_ERROR_MSGS:ese,HTTP_STATUS_CODES:tse}=Zne,$A=x();hH.exports={getRolePermissions:nse};var Ia=Object.create(null),rse=a(e=>({key:e,perms:{}}),"perms_template_obj"),uH=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),_H=a((e=!1,t=!1,r=!1,n=!1)=>({[qr.PERMS_CRUD_ENUM.READ]:e,[qr.PERMS_CRUD_ENUM.INSERT]:t,[qr.PERMS_CRUD_ENUM.UPDATE]:r,[qr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),VA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,..._H(t,r,n,s)}),"table_perms_template"),aH=a((e,t=_H())=>({attribute_name:e,describe:EH(t),[I_]:t[I_],[YA]:t[YA],[KA]:t[KA]}),"attr_perms_template"),cH=a((e,t=!1)=>({attribute_name:e,describe:t,[I_]:t}),"timestamp_attr_perms_template"),{READ:I_,INSERT:YA,UPDATE:KA}=qr.PERMS_CRUD_ENUM,dH=Object.values(qr.PERMS_CRUD_ENUM),fH=[I_,YA,KA];function nse(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[qr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Ia[t]&&Ia[t].key===n)return Ia[t].perms;let s=sse(e,r);return Ia[t]?Ia[t].key=n:Ia[t]=rse(n),Ia[t].perms=s,s}catch(r){if(!e[qr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qr.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 $A.error(n),$A.debug(r),oH(new Error,ese.OUTDATED_PERMS_TRANSLATION_ERROR,tse.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
12
- ${r.stack}`;throw $A.error(n),oH(new Error)}}}a(nse,"getRolePermissions");function sse(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[qr.SYSTEM_SCHEMA_NAME]=n[qr.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]=ise(t[i]);return}r[i]=uH(),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],_=ose(c,l);r[i].describe||dH.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=VA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=VA()})}),r}a(sse,"translateRolePermissions");function ise(e){let t=uH(!0);return Object.keys(e).forEach(r=>{t.tables[r]=VA(!0,!0,!0,!0,!0)}),t}a(ise,"createStructureUserPermissions");function ose(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 qr.TIME_STAMP_NAMES.includes(d)&&(f=cH(d,u[I_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=aH(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=EH(u),s.attribute_permissions.push(u),c||ase(u,l)}else if(_!==o){let u;qr.TIME_STAMP_NAMES.includes(_)?u=cH(_):u=aH(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=lH(s),s}else return e.describe=lH(e),e}a(ose,"getTableAttrPerms");function lH(e){return dH.filter(t=>e[t]).length>0}a(lH,"getSchemaTableDescribePerm");function EH(e){return fH.filter(t=>e[t]).length>0}a(EH,"getAttributeDescribePerm");function ase(e,t){fH.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(ase,"checkForHashPerms")});var w_={};$e(w_,{authentication:()=>NH,bypassAuth:()=>Ese,login:()=>pse,logout:()=>mse,start:()=>hse});function Ese(){OH=!0}async function NH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?_se?use:[]:lse?cse:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new no([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Gh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Gh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Gh){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 SH.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new Kc.AuthAuditLog(E,h,$t.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===$t.AUTH_AUDIT_STATUS.SUCCESS?mH.notify(S):mH.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),u(E,$t.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Kc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=wa.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,xh.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,xh.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return fse&&(wa.get(h)||(wa.set(h,h),u(m,$t.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:po({error:R.message},e)})}wa.set(n,d),dse&&u(d.username,$t.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await it.getUser(_.user,null,e):(OH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,gH.getSuperUser)());Gh&&(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,SH.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")&&Yi.loginPath?(f.status=302,f.headers.set("Location",Yi.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 no);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function hse({server:e,port:t}){e.request(NH,{port:t||"all"}),TH||(TH=!0,setInterval(()=>{wa=new Map},Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),AH.user.addListener(()=>{wa=new Map}))}async function pse(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 mse(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var gH,xh,RH,Bn,$t,Kc,AH,mH,cse,lse,use,_se,SH,Gh,OH,dse,fse,wa,TH,Fh=Ne(()=>{gH=q(wr());mr();Jl();xh=q(c_());ge();RH=require("uuid"),Bn=q(X()),$t=q(C()),Kc=q(x()),AH=q(Iu());Uu();Wc();mH=(0,Kc.loggerWithTag)("auth-event");Bn.initSync();cse=Bn.get($t.CONFIG_PARAMS.HTTP_CORSACCESSLIST),lse=Bn.get($t.CONFIG_PARAMS.HTTP_CORS),use=Bn.get($t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),_se=Bn.get($t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),SH=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Gh=Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,OH=Bn.get($t.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,dse=Bn.get($t.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,fse=Bn.get($t.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,wa=new Map;it.onInvalidatedUser(()=>{wa=new Map});a(Ese,"bypassAuth");a(NH,"authentication");a(hse,"start");a(pse,"login");a(mse,"logout")});var DH=T((WOe,LH)=>{"use strict";var Ce=require("joi"),bH=require("fs-extra"),yH=require("path"),Ti=rt(),IH=X(),wH=C(),CH=x(),{hdb_errors:Sse}=ie(),{HDB_ERROR_MSGS:lr}=Sse,Si=/^[a-zA-Z0-9-_]+$/;LH.exports={getDropCustomFunctionValidator:gse,setCustomFunctionValidator:Rse,addComponentValidator:bse,dropCustomFunctionProjectValidator:yse,packageComponentValidator:Ise,deployComponentValidator:wse,setComponentFileValidator:Ase,getComponentFileValidator:Nse,dropComponentFileValidator:Ose};function kh(e,t,r){try{let n=IH.get(wH.CONFIG_PARAMS.COMPONENTSROOT),s=yH.join(n,t);return bH.existsSync(s)?e?t:r.message(lr.PROJECT_EXISTS):e?r.message(lr.NO_PROJECT):t}catch(n){return CH.error(n),r.message(lr.VALIDATION_ERR)}}a(kh,"checkProjectExists");function C_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(C_,"checkFilePath");function Tse(e,t,r,n){try{let s=IH.get(wH.CONFIG_PARAMS.COMPONENTSROOT),i=yH.join(s,e,t,r+".js");return bH.existsSync(i)?r:n.message(lr.NO_FILE)}catch(s){return CH.error(s),n.message(lr.VALIDATION_ERR)}}a(Tse,"checkFileExists");function gse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(Si).custom(Tse.bind(null,e.project,e.type)).custom(C_).required().messages({"string.pattern.base":lr.BAD_FILE_NAME})});return Ti.validateBySchema(e,t)}a(gse,"getDropCustomFunctionValidator");function Rse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(C_).required(),function_content:Ce.string().required()});return Ti.validateBySchema(e,t)}a(Rse,"setCustomFunctionValidator");function Ase(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:Ce.string().custom(C_).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ti.validateBySchema(e,t)}a(Ase,"setComponentFileValidator");function Ose(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),file:Ce.string().custom(C_).optional()});return Ti.validateBySchema(e,t)}a(Ose,"dropComponentFileValidator");function Nse(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(C_).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ti.validateBySchema(e,t)}a(Nse,"getComponentFileValidator");function bse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!1)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Ti.validateBySchema(e,t)}a(bse,"addComponentValidator");function yse(e){let t=Ce.object({project:Ce.string().pattern(Si).custom(kh.bind(null,!0)).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME})});return Ti.validateBySchema(e,t)}a(yse,"dropCustomFunctionProjectValidator");function Ise(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Ti.validateBySchema(e,t)}a(Ise,"packageComponentValidator");function wse(e){let t=Ce.object({project:Ce.string().pattern(Si).required().messages({"string.pattern.base":lr.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":lr.BAD_PACKAGE}),package:Ce.string().optional()});return Ti.validateBySchema(e,t)}a(wse,"deployComponentValidator")});var Kh=T((jOe,qH)=>{"use strict";var $h=require("joi"),Vh=require("path"),PH=require("fs-extra"),{exec:Cse}=require("child_process"),Lse=require("util"),MH=Lse.promisify(Cse),L_=C(),{handleHDBError:Qc,hdb_errors:Dse}=ie(),{HTTP_STATUS_CODES:jc}=Dse,D_=X(),Pse=rt(),zc=x();D_.initSync();var WA=D_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),UH="npm install --omit=dev --json",Mse=`${UH} --dry-run`;qH.exports={installModules:Hse,auditModules:qse,installAllRootModules:Use,uninstallRootModule:vse,linkHarperdb:Bse};async function Use(e=!1){await Yh(),await P_(e?"npm install --ignore-scripts":"npm install",D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Use,"installAllRootModules");async function vse(e){await P_(`npm uninstall ${e}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(vse,"uninstallRootModule");async function Bse(){await Yh(),await P_(`npm link ${L_.PACKAGE_ROOT}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Bse,"linkHarperdb");async function P_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await MH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
11
+ `,"")}a(QU,"runCommand");async function z6(){try{await I6.access(AR)}catch{return!1}let e=await QU(`${AR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return w6.eq(t,Q6)}a(z6,"checkNATSServerInstalled");async function IR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await KU.getClusterUser();if(Ta(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}us.trace("create nats connection called");let i=await G6({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),us.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&us.error("Error with Nats client connection, connection closed",o),jU()}),i}a(IR,"createConnection");function jU(){Pr=void 0,pa=void 0,ma=void 0,Sa=void 0}a(jU,"clearClientCache");async function J6(){Pr&&(await Pr.drain(),Pr=void 0,pa=void 0,ma=void 0,Sa=void 0)}a(J6,"closeConnection");var Pr,Sa;async function WE(){return Sa||(Sa=IR(Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pr=await Sa),Pr||Sa}a(WE,"getConnection");async function n_(){if(pa)return pa;Ta(Pr)&&await WE();let{domain:e}=s_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ta(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return pa=await Pr.jetstreamManager({domain:e,timeout:6e4}),pa}a(n_,"getJetStreamManager");async function zU(){if(ma)return ma;Ta(Pr)&&await WE();let{domain:e}=s_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ta(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ma=Pr.jetstream({domain:e,timeout:6e4}),ma}a(zU,"getJetStream");async function _s(){let e=Pr||await WE(),t=pa||await n_(),r=ma||await zU();return{connection:e,jsm:t,js:r}}a(_s,"getNATSReferences");async function X6(e){let t=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await KU.getClusterUser(),s=await IR(t,r,n),i=yR(),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 YE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(X6,"getServerList");async function wR(e,t){let{jsm:r}=await _s(),n=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:q6.File,retention:x6.Limits,subjects:t,discard:F6.Old,max_msgs:s,max_bytes:i,max_age:n})}a(wR,"createLocalStream");async function JU(){let{jsm:e}=await _s(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(JU,"listStreams");async function Z6(e){let{jsm:t}=await _s();await t.streams.delete(e)}a(Z6,"deleteLocalStream");async function e9(e){let{connection:t}=await _s(),r=[],n=yR(),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(e9,"listRemoteStreams");async function t9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await _s(),i=kU(),o={durable_name:i,ack_policy:bR.Explicit};t&&(o.deliver_policy=NR.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=OR(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Zt.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(t9,"viewStream");async function*r9(e,t=void 0,r=void 0){let{jsm:n,js:s}=await _s(),i=kU(),o={durable_name:i,ack_policy:bR.Explicit};t&&(o.deliver_policy=NR.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=OR(_.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(Zt.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(r9,"viewStreamIterator");async function n9(e,t,r,n){us.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=XU(n,r);let{js:s}=await _s(),i=await QE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:YU.encode(n);try{us.trace(`publishToStream publishing to subject: ${o}`),K6(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 ev(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){us.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await wR(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(n9,"publishToStream");function XU(e,t){t===void 0&&(t=$6());let r=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Zt.MSG_HEADERS.ORIGIN)&&r&&t.append(Zt.MSG_HEADERS.ORIGIN,r),t}a(XU,"addNatsMsgHeader");function s_(e){e=e.toLowerCase();let t=r_.join(Vt.get(Pe.CONFIG_PARAMS.ROOTPATH),W6);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ta(RR)&&(RR={port:e_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:e_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.HUB,config_file:Zt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:r_.join(t,Zt.PID_FILES.HUB),hdb_nats_path:t}),RR;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ta(gR)&&(gR={port:e_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:e_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,config_file:Zt.NATS_CONFIG_FILES.LEAF_SERVER,domain:e_.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Zt.SERVER_SUFFIX.LEAF,pid_file_path:r_.join(t,Zt.PID_FILES.LEAF),hdb_nats_path:t}),gR;us.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(s_,"getServerConfig");async function ZU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:bR.Explicit,durable_name:r,deliver_policy:NR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(ZU,"createConsumer");async function s9(e,t,r){await e.consumers.delete(t,r)}a(s9,"removeConsumer");function i9(e){return e.split(".")[1]}a(i9,"extractServerName");async function o9(e,t,r=6e4,n=yR()){if(!YE.isObject(t))throw new Error("data param must be an object");let s=YU.encode(t),{connection:i}=await _s(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return OR(c.data)}a(o9,"request");function CR(e){return new Promise(async(t,r)=>{let n=P6(AR,["--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(CR,"reloadNATS");async function a9(){let{pid_file_path:e}=s_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await CR(e)}a(a9,"reloadNATSHub");async function c9(){let{pid_file_path:e}=s_(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await CR(e)}a(c9,"reloadNATSLeaf");function l9(e,t,r){let n;switch(e.code){case FU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case FU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(l9,"requestErrorHandler");async function u9(e,t){let r=t+Zt.SERVER_SUFFIX.LEAF,{connection:n}=await _s(),{jsm:s}=await S9(r),{schema:i,table:o}=e,c=KE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await ev(async()=>{if(e.subscribe===!0)await ZU(s,c,n.info.server_name,l);else try{await s9(s,c,n.info.server_name)}catch(_){us.trace(_)}})}a(u9,"updateRemoteConsumer");async function _9(e,t,r,n){let s=KE.createNatsTableStreamName(e,t),i=r+Zt.SERVER_SUFFIX.LEAF,o={type:Pe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!VU&&B6()<Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=TR();await c(o)}await U6(o),n==="stop"&&await YE.async_set_timeout(1e3)}a(_9,"updateConsumerIterator");function ev(e){return M6.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(ev,"exclusiveLock");async function tv(e,t){let r=KE.createNatsTableStreamName(e,t),n=await QE(),s=h9(e,t,n);await wR(r,[s])}a(tv,"createLocalTableStream");async function d9(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await tv(n,s)}}a(d9,"createTableStreams");async function rv(e,t){if(Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=KE.createNatsTableStreamName(e,t),{jsm:n}=await _s();await n.streams.purge(r)}catch(r){if(r.message==="stream not found")us.warn(r);else throw r}}a(rv,"purgeTableStream");async function f9(e,t){if(Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await rv(e,t[r])}a(f9,"purgeSchemaTableStreams");async function E9(e){return(await n_()).streams.info(e)}a(E9,"getStreamInfo");function h9(e,t,r){return`${Zt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(h9,"createSubjectName");async function QE(){if(t_)return t_;if(t_=(await n_())?.nc?.info?.server_name,t_===void 0)throw new Error("Unable to get jetstream manager server name");return t_}a(QE,"getJsmServerName");async function p9(){let e=await n_(),t=await QE(),r=await JU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=m9(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");us.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(p9,"updateLocalStreams");function m9(e){let{config:t}=e,r=!1,n=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Vt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Vt.get(Pe.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(m9,"updateStreamLimits");async function S9(e){let t,r;try{t=await Pr.jetstream({domain:e}),r=await Pr.jetstreamManager({domain:e})}catch(n){throw us.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(S9,"connectToRemoteJS")});var XE=g((qRe,av)=>{"use strict";var Pc=Cf(),Mc=DU(),T9=x(),g9=require("uuid").v4,GRe=require("clone"),zE=ai(),Uc=C(),R9=require("util"),co=Pn(),{handleHDBError:Mr,hdb_errors:A9}=ie(),{HDB_ERROR_MSGS:jE,HTTP_STATUS_CODES:Ur}=A9,{SchemaEventMsg:JE}=ts(),sv=pt(),{getDatabases:O9}=(Te(),oe(ke)),{transformReq:vc}=K();av.exports={createSchema:b9,createSchemaStructure:iv,createTable:N9,createTableStructure:ov,createAttribute:L9,dropSchema:y9,dropTable:I9,dropAttribute:w9,getBackup:D9};async function b9(e){let t=await iv(e);return zE.signalSchemaChange(new JE(process.pid,e.operation,e.schema)),t}a(b9,"createSchema");async function iv(e){let t=Pc.schema_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw Mr(new Error,jE.SCHEMA_EXISTS_ERR(e.schema),Ur.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,jE.SCHEMA_EXISTS_ERR(e.schema),!0);return await co.createSchema(e),`database '${e.schema}' successfully created`}a(iv,"createSchemaStructure");async function N9(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await ov(e)}a(N9,"createTable");async function ov(e){let t=Pc.create_table_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw Mr(new Error,jE.TABLE_EXISTS_ERR(e.schema,e.table),Ur.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,jE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:g9(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await co.createTable(n,e);else throw Mr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ur.BAD_REQUEST);else await co.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(ov,"createTableStructure");async function y9(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Pc.schema_object(e),n=t??r;if(n)throw Mr(n,n.message,Ur.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw Mr(new Error,s,Ur.NOT_FOUND,Uc.LOG_LEVELS.ERROR,s,!0);let i=await Mc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await co.dropSchema(e),zE.signalSchemaChange(new JE(process.pid,e.operation,e.schema)),await sv.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(y9,"dropSchema");async function I9(e){let t=Pc.table_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Mr(new Error,r,Ur.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await co.dropTable(e),await sv.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(I9,"dropTable");async function w9(e){let t=Pc.attribute_object(e);if(t)throw Mr(t,t.message,Ur.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Mr(new Error,r,Ur.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Mr(new Error,"You cannot drop a hash attribute",Ur.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Mr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ur.BAD_REQUEST,void 0,void 0,!0);try{return await co.dropAttribute(e),C9(e),zE.signalSchemaChange(new JE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw T9.error(`Got an error deleting attribute ${R9.inspect(e)}.`),n}}a(w9,"dropAttribute");function C9(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(C9,"dropAttributeFromGlobal");async function L9(e){vc(e);let t=O9()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Mr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Ur.BAD_REQUEST,void 0,void 0,!0);return await co.createAttribute(e),zE.signalSchemaChange(new JE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(L9,"createAttribute");function D9(e){return co.getBackup(e)}a(D9,"getBackup")});var lv=g((FRe,cv)=>{"use strict";var{OPERATIONS_ENUM:P9}=C(),LR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=P9.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};cv.exports=LR});var DR=g((VRe,Ev)=>{"use strict";var M9=Pn(),$Re=lv(),ZE=K(),eh=C(),U9=X(),{handleHDBError:uv,hdb_errors:v9}=ie(),{HDB_ERROR_MSGS:_v,HTTP_STATUS_CODES:dv}=v9,B9=Object.values(eh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),fv="To use this operation audit log must be enabled in harperdb-config.yaml";Ev.exports=H9;async function H9(e){if(ZE.isEmpty(e.schema))throw new Error(_v.SCHEMA_REQUIRED_ERR);if(ZE.isEmpty(e.table))throw new Error(_v.TABLE_REQUIRED_ERR);if(!U9.get(eh.CONFIG_PARAMS.LOGGING_AUDITLOG))throw uv(new Error,fv,dv.BAD_REQUEST,eh.LOG_LEVELS.ERROR,fv,!0);let t=ZE.checkSchemaTableExist(e.schema,e.table);if(t)throw uv(new Error,t,dv.NOT_FOUND,eh.LOG_LEVELS.ERROR,t,!0);if(!ZE.isEmpty(e.search_type)&&B9.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await M9.readAuditLog(e)}a(H9,"readAuditLog")});var pv=g((KRe,hv)=>{"use strict";var{OPERATIONS_ENUM:G9}=C(),PR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=G9.GET_BACKUP,this.schema=t,this.table=r}};hv.exports=PR});var Tv=g((zRe,Sv)=>{"use strict";var q9=Pn(),QRe=pv(),MR=K(),x9=C(),jRe=X(),{handleHDBError:F9,hdb_errors:k9}=ie(),{HDB_ERROR_MSGS:mv,HTTP_STATUS_CODES:$9}=k9;Sv.exports=V9;async function V9(e){if(MR.isEmpty(e.schema))throw new Error(mv.SCHEMA_REQUIRED_ERR);if(MR.isEmpty(e.table))throw new Error(mv.TABLE_REQUIRED_ERR);let t=MR.checkSchemaTableExist(e.schema,e.table);if(t)throw F9(new Error,t,$9.NOT_FOUND,x9.LOG_LEVELS.ERROR,t,!0);return await q9.getBackup(read_audit_log_object)}a(V9,"getBackup")});var Nv=g((XRe,bv)=>{var lo=require("validate.js"),Rv=rt(),Bc=C(),{handleHDBError:Y9,hdb_errors:K9}=ie(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:W9}=K9,UR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Q9={STRUCTURE_USER:"structure_user"},gv=Object.values(Bc.ROLE_TYPES_ENUM),j9="attribute_permissions",z9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,J9=[j9,...Object.values(Hc)],Av=[Hc.READ,Hc.INSERT,Hc.UPDATE],X9=[z9,...Av];function Z9(e){let t=UR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Ov(e,t)}a(Z9,"addRoleValidation");function e7(e){let t=UR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Ov(e,t)}a(e7,"alterRoleValidation");function t7(e){let t=UR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Rv.validateObject(e,t)}a(t7,"dropRoleValidation");var r7=["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++)r7.includes(n[o])||s.push(n[o]);s.length>0&&Nt(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=Rv.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Nt(o,r)}),e.permission){let o=n7(e);o&&Nt(o,r),gv.forEach(c=>{e.permission[c]&&!lo.isBoolean(e.permission[c])&&Nt(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(gv.indexOf(o)<0){if(o===Q9.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]||Nt(mt.SCHEMA_NOT_FOUND(d),r)}continue}Nt(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Nt(mt.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]){Nt(mt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{J9.includes(u)||Nt(mt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{lo.isDefined(_[u])?lo.isBoolean(_[u])||Nt(mt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):Nt(mt.TABLE_PERM_MISSING(u),r,o,l)}),lo.isDefined(_.attribute_permissions)){if(!lo.isArray(_.attribute_permissions)){Nt(mt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{Nt(mt.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=>{!X9.includes(m)&&m!==Hc.DELETE&&Nt(mt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!lo.isDefined(E.attribute_name)){Nt(mt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){Nt(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}Av.forEach(m=>{lo.isDefined(E[m])?lo.isBoolean(E[m])||Nt(mt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):Nt(mt.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}`;Nt(mt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return s7(r)}a(Ov,"customValidate");bv.exports={addRoleValidation:Z9,alterRoleValidation:e7,dropRoleValidation:t7};function n7(e){let{operation:t,permission:r}=e;if(t===Bc.OPERATIONS_ENUM.ADD_ROLE||t===Bc.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 mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(n7,"validateNoSUPerms");function s7(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return Y9(new Error,n,W9.BAD_REQUEST)}else return null}a(s7,"generateRolePermResponse");function Nt(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(Nt,"addPermError")});var rh=g((eAe,Cv)=>{"use strict";var yv=wr(),Iv=ir(),i7=na(),BR=Nv(),HR=ai(),o7=require("uuid").v4,a7=require("util"),th=C(),c7=K(),GR=Iv.searchByValue,l7=Iv.searchByHash,u7=a7.promisify(i7.delete),_7=rs(),d7=pc(),{hdb_errors:f7,handleHDBError:ga}=ie(),{HDB_ERROR_MSGS:wv,HTTP_STATUS_CODES:i_}=f7,{UserEventMsg:qR}=ts();Cv.exports={addRole:E7,alterRole:h7,dropRole:p7,listRoles:m7};function vR(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(vR,"scrubRoleDetails");async function E7(e){let t=BR.addRoleValidation(e);if(t)throw t;e=vR(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 ga(i)}if(n&&n.length>0)throw ga(new Error,wv.ROLE_ALREADY_EXISTS(e.role),i_.CONFLICT,void 0,void 0,!0);e.id||(e.id=o7());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await yv.insert(s),HR.signalUserChange(new qR(process.pid)),e=vR(e),e}a(E7,"addRole");async function h7(e){let t=BR.alterRoleValidation(e);if(t)throw t;e=vR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await yv.update(r)}catch(s){throw ga(s)}if(n&&n?.message==="updated 0 of 1 records")throw ga(new Error,"Invalid role id",i_.BAD_REQUEST,void 0,void 0,!0);return await HR.signalUserChange(new qR(process.pid)),e}a(h7,"alterRole");async function p7(e){let t=BR.dropRoleValidation(e);if(t)throw ga(new Error,t,i_.BAD_REQUEST,void 0,void 0,!0);let r=new d7(th.SYSTEM_SCHEMA_NAME,th.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await l7(r));if(n.length===0)throw ga(new Error,wv.ROLE_NOT_FOUND,i_.NOT_FOUND,void 0,void 0,!0);let s=new _7(th.SYSTEM_SCHEMA_NAME,th.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await GR(s)),o=!1;if(c7.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ga(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,i_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await u7(c),HR.signalUserChange(new qR(process.pid)),`${n[0].role} successfully deleted`}a(p7,"dropRole");async function m7(){return GR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(m7,"listRoles")});var Mv=g((rAe,Pv)=>{"use strict";var S7=X(),uo=require("joi"),T7=rt(),Lv=require("moment"),g7=require("fs-extra"),xR=require("path"),R7=require("lodash"),o_=C(),{LOG_LEVELS:Ra}=C(),A7="YYYY-MM-DD hh:mm:ss",O7=xR.resolve(__dirname,"../logs");Pv.exports=function(e){return T7.validateBySchema(e,b7)};var b7=uo.object({from:uo.custom(Dv),until:uo.custom(Dv),level:uo.valid(Ra.NOTIFY,Ra.FATAL,Ra.ERROR,Ra.WARN,Ra.INFO,Ra.DEBUG,Ra.TRACE),order:uo.valid("asc","desc"),limit:uo.number().min(1),start:uo.number().min(0),log_name:uo.custom(N7)});function Dv(e,t){if(Lv(e,Lv.ISO_8601).format(A7)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Dv,"validateDatetime");function N7(e,t){if(R7.invert(o_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=S7.get(o_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?o_.LOG_NAMES.HDB:e,i=s===o_.LOG_NAMES.INSTALL?xR.join(O7,o_.LOG_NAMES.INSTALL):xR.join(n,s);return g7.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(N7,"validateReadLogPath")});var kR=g((sAe,vv)=>{"use strict";var nh=C(),y7=x(),I7=X(),w7=Mv(),FR=require("path"),Uv=require("fs-extra"),{once:C7}=require("events"),{handleHDBError:L7,hdb_errors:D7}=ie(),{PACKAGE_ROOT:P7}=C(),M7=FR.join(P7,"logs"),U7=1e3,v7=200;vv.exports=B7;async function B7(e){let t=w7(e);if(t)throw L7(t,t.message,D7.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=I7.get(nh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?nh.LOG_NAMES.HDB:e.log_name,s=n===nh.LOG_NAMES.INSTALL?FR.join(M7,nh.LOG_NAMES.INSTALL):FR.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?U7: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(Uv.statSync(s).size-(h+5)*v7,0));let S=Uv.createReadStream(s,{start:m});S.on("error",U=>{y7.error(U)});let R=0,T=[],A="",P;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=A+U;let H=0,j;for(;(j=F.exec(U))&&!S.destroyed;){P&&(P.message=U.slice(H,j.index),v(P));let[z,J,Ee]=j,ue=Ee.split("] ["),he=ue[0],Me=ue[1];ue.splice(0,2),P={timestamp:J,thread:he,level:Me,tags:ue,message:""},H=j.index+z.length}A=U.slice(H)}),S.on("end",U=>{S.destroyed||P&&(P.message=A.trim(),v(P))}),S.resume();function v(U){let F,H,j;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),U.level===o&&F>=H&&F<=j&&R<E?R++:U.level===o&&F>=H&&F<=j&&(_o(U,f,T),R++,R===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),H=new Date(l),U.level===o&&F>=H&&R<E?R++:U.level===o&&F>=H&&(_o(U,f,T),R++,R===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),j=new Date(u),U.level===o&&F<=j&&R<E?R++:U.level===o&&F<=j&&(_o(U,f,T),R++,R===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),H=new Date(l),j=new Date(u),F>=H&&F<=j&&R<E?R++:F>=H&&F<=j&&(_o(U,f,T),R++,R===h&&S.destroy());break;case i:U.level===o&&R<E?R++:U.level===o&&(_o(U,f,T),R++,R===h&&S.destroy());break;case c:F=new Date(U.timestamp),H=new Date(l),F>=H&&R<E?R++:F>=H&&R>=E&&(_o(U,f,T),R++,R===h&&S.destroy());break;case _:F=new Date(U.timestamp),j=new Date(u),F<=j&&R<E?R++:F<=j&&R>=E&&(_o(U,f,T),R++,R===h&&S.destroy());break;default:R<E?R++:(_o(U,f,T),R++,R===h&&S.destroy())}}return a(v,"onLogMessage"),await C7(S,"close"),T}a(B7,"readLog");function _o(e,t,r){t==="desc"?H7(e,r):t==="asc"?G7(e,r):r.push(e)}a(_o,"pushLineToResult");function H7(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(H7,"insertDescending");function G7(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(G7,"insertAscending")});var sh=g((lAe,qv)=>{"use strict";var $R=require("joi"),{string:a_,boolean:Bv,date:q7}=$R.types(),x7=rt(),{validateSchemaExists:oAe,validateTableExists:aAe,validateSchemaName:cAe}=ws(),F7=C(),k7=et(),Hv=X();Hv.initSync();var $7=a_.invalid(Hv.get(F7.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(k7.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:a_.valid("add_node","update_node","set_node_replication"),node_name:$7,subscriptions:$R.array().items({table:a_.optional(),schema:a_.optional(),database:a_.optional(),subscribe:Bv.required(),publish:Bv.required().custom(Y7),start_time:q7.iso()}).min(1).required()};function V7(e){return x7.validateBySchema(e,$R.object(Gv))}a(V7,"addUpdateNodeValidator");function Y7(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(Y7,"checkForFalsy");qv.exports={addUpdateNodeValidator:V7,validation_schema:Gv}});var Fv=g((_Ae,xv)=>{var K7=rt(),W7={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};xv.exports=function(e){return K7.validateObject(e,W7)}});var ih=g((dAe,kv)=>{"use strict";var Q7=C().OPERATIONS_ENUM,VR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Q7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};kv.exports=VR});var Vv=g((EAe,$v)=>{"use strict";var j7={OPERATION:"operation",REFRESH:"refresh"},YR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},KR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};$v.exports={JWTTokens:YR,TOKEN_TYPE_ENUM:j7,JWTRSAKeys:KR}});var u_=g((pAe,Qv)=>{"use strict";var l_=require("jsonwebtoken"),WR=require("fs-extra"),QR=K(),Hn=C(),{handleHDBError:vr,hdb_errors:z7}=ie(),{HTTP_STATUS_CODES:Br,AUTHENTICATION_ERROR_MSGS:Hr}=z7,c_=x(),Yv=iE(),JR=Lr(),J7=wr().update,X7=ih(),Z7=ai(),{UserEventMsg:eee}=ts(),fo=X();fo.initSync();var jR=require("path"),{JWTTokens:tee,JWTRSAKeys:ree,TOKEN_TYPE_ENUM:oh}=Vv(),nee=fo.get(Hn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?fo.get(Hn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",see=fo.get(Hn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?fo.get(Hn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ah="RS256",zR;Qv.exports={createTokens:iee,validateOperationToken:aee,refreshOperationToken:oee,validateRefreshToken:Wv};async function iee(e){if(QR.isEmpty(e)||typeof e!="object")throw vr(new Error,Hr.INVALID_AUTH_OBJECT,Br.BAD_REQUEST,void 0,void 0,!0);if(QR.isEmpty(e.username))throw vr(new Error,Hr.USERNAME_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);if(QR.isEmpty(e.password))throw vr(new Error,Hr.PASSWORD_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await JR.findAndValidateUser(e.username,e.password),!t)throw vr(new Error,Hr.INVALID_CREDENTIALS,Br.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw c_.error(f),vr(new Error,Hr.INVALID_CREDENTIALS,Br.UNAUTHORIZED,void 0,void 0,!0)}let r=await ch(),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 Kv(i,r.private_key,r.passphrase),c=await l_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:see,algorithm:ah,subject:oh.REFRESH}),l=Yv.hash(c),_=new X7(Hn.SYSTEM_SCHEMA_NAME,Hn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await J7(_)}catch(f){c_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw vr(new Error,Hr.REFRESH_TOKEN_SAVE_FAILED,Br.INTERNAL_SERVER_ERROR);return Z7.signalUserChange(new eee(process.pid)),new tee(o,c)}a(iee,"createTokens");async function Kv(e,t,r){return await l_.sign(e,{key:t,passphrase:r},{expiresIn:nee,algorithm:ah,subject:oh.OPERATION})}a(Kv,"signOperationToken");async function ch(){if(zR===void 0)try{let e=jR.join(fo.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=jR.join(fo.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=jR.join(fo.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await WR.readFile(e)).toString(),s=(await WR.readFile(t)).toString(),i=(await WR.readFile(r)).toString();zR=new ree(i,s,n)}catch(e){throw c_.error(e),vr(new Error,Hr.NO_ENCRYPTION_KEYS,Br.INTERNAL_SERVER_ERROR)}return zR}a(ch,"getJWTRSAKeys");async function oee(e){if(!e)throw vr(new Error,Hr.INVALID_BODY,Br.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw vr(new Error,Hr.REFRESH_TOKEN_REQUIRED,Br.BAD_REQUEST,void 0,void 0,!0);await Wv(e.refresh_token);let t=await ch(),r=await l_.decode(e.refresh_token);return{operation_token:await Kv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(oee,"refreshOperationToken");async function aee(e){try{let t=await ch(),r=await l_.verify(e,t.public_key,{algorithms:ah,subject:oh.OPERATION});return await JR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw c_.warn(t),t.name&&t.name==="TokenExpiredError"?vr(new Error,Hr.TOKEN_EXPIRED,Br.FORBIDDEN):vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED)}}a(aee,"validateOperationToken");async function Wv(e){let t;try{let r=await ch(),n=await l_.verify(e,r.public_key,{algorithms:ah,subject:oh.REFRESH});t=await JR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw c_.warn(r),r.name&&r.name==="TokenExpiredError"?vr(new Error,Hr.TOKEN_EXPIRED,Br.FORBIDDEN):vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED)}if(!Yv.validate(t.refresh_token,e))throw vr(new Error,Hr.INVALID_TOKEN,Br.UNAUTHORIZED);return t}a(Wv,"validateRefreshToken")});var XR=g((TAe,Jv)=>{"use strict";var cee=Fv(),Gc=require("passport"),lee=require("passport-local").Strategy,uee=require("passport-http").BasicStrategy,_ee=require("util"),dee=Lr(),zv=_ee.callbackify(dee.findAndValidateUser),SAe=Qr(),fee=C(),jv=u_();Gc.use(new lee(function(e,t,r){zv(e,t,r)}));Gc.use(new uee(function(e,t,r){zv(e,t,r)}));Gc.serializeUser(function(e,t){t(null,e)});Gc.deserializeUser(function(e,t){t(null,e)});function Eee(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":Gc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===fee.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?jv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):jv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Gc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Eee,"authorize");function hee(e,t){let r=cee(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(hee,"checkPermissions");Jv.exports={authorize:Eee,checkPermissions:hee}});var qc=g((RAe,Xv)=>{"use strict";var ZR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},eA=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};Xv.exports={Node:ZR,NodeSubscription:eA}});var e0=g((OAe,Zv)=>{"use strict";var pee=C().OPERATIONS_ENUM,tA=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=pee.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Zv.exports=tA});var __=g((NAe,t0)=>{"use strict";var rA=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},nA=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)}};t0.exports={RemotePayloadObject:rA,RemotePayloadSubscription:nA}});var n0=g((IAe,r0)=>{"use strict";var sA=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}};r0.exports=sA});var o0=g((PAe,i0)=>{"use strict";var mee=n0(),CAe=at(),s0=Ve(),See=x(),{getSchemaPath:LAe,getTransactionAuditStorePath:DAe}=ze(),{getDatabases:Tee}=(Te(),oe(ke));i0.exports=gee;async function gee(e){let t=new mee;try{let r=Tee()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await s0.environmentDataSize(schema_path,e.name),o=await s0.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){See.warn(`unable to stat table dbi due to ${r}`)}return t}a(gee,"lmdbGetTableSize")});var c0=g((UAe,a0)=>{"use strict";var iA=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}};a0.exports=iA});var Ei=g((qAe,f0)=>{"use strict";var Ree=require("fs-extra"),Aee=require("path"),ur=require("systeminformation"),Eo=x(),l0=pt(),BAe=et(),uh=C(),Oee=o0(),d0=Zi(),{getThreadInfo:u0}=tt(),hA=X();hA.initSync();var bee=c0(),{openEnvironment:HAe}=Ve(),{getSchemaPath:GAe}=ze(),{database:Nee}=(Te(),oe(ke)),lh;f0.exports={getHDBProcessInfo:lA,getNetworkInfo:_A,getDiskInfo:uA,getMemoryInfo:cA,getCPUInfo:aA,getTimeInfo:oA,getSystemInformation:dA,systemInformation:yee,getTableSize:fA,getMetrics:EA};function oA(){return ur.time()}a(oA,"getTimeInfo");async function aA(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await ur.cpu();u.cpu_speed=await ur.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:R,...T}=await ur.currentLoad();return T.cpus=[],R.forEach(A=>{let{raw_load:P,raw_load_idle:v,raw_load_irq:U,raw_load_nice:F,raw_load_system:H,raw_load_user:j,...z}=A;T.cpus.push(z)}),u.current_load=T,u}catch(e){return Eo.error(`error in getCPUInfo: ${e}`),{}}}a(aA,"getCPUInfo");async function cA(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await ur.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Eo.error(`error in getMemoryInfo: ${e}`),{}}}a(cA,"getMemoryInfo");async function lA(){let e={core:[],clustering:[]};try{let t=await ur.processes(),r;try{r=Number.parseInt(await Ree.readFile(Aee.join(hA.get(uh.CONFIG_PARAMS.ROOTPATH),uh.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===uh.NODE_ERROR_CODES.ENOENT)Eo.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");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 Eo.error(`error in getHDBProcessInfo: ${t}`),e}}a(lA,"getHDBProcessInfo");async function uA(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await ur.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await ur.fsStats();return e.read_write=_,e.size=await ur.fsSize(),e}catch(t){return Eo.error(`error in getDiskInfo: ${t}`),e}}a(uA,"getDiskInfo");async function _A(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ur.networkInterfaceDefault(),e.latency=await ur.inetChecksite("google.com"),(await ur.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 ur.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return Eo.error(`error in getNetworkInfo: ${t}`),e}}a(_A,"getNetworkInfo");async function dA(){if(lh!==void 0)return lh;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await ur.osInfo();e=c;let l=await ur.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,lh=e,lh}catch(t){return Eo.error(`error in getSystemInformation: ${t}`),e}}a(dA,"getSystemInformation");async function fA(){let e=[],t=await d0.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Oee(n));return e}a(fA,"getTableSize");async function EA(){let e=await d0.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=Nee({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){Eo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(EA,"getMetrics");async function _0(){if(hA.get(uh.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await l0.getNATSReferences(),t=await l0.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(_0,"getNatsStreamInfo");async function yee(e){let t=new bee;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await dA(),t.time=oA(),t.cpu=await aA(),t.memory=await cA(),t.disk=await uA(),t.network=await _A(),t.harperdb_processes=await lA(),t.table_size=await fA(),t.metrics=await EA(),t.threads=await u0(),t.replication=await _0(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await dA();break;case"time":t.time=oA();break;case"cpu":t.cpu=await aA();break;case"memory":t.memory=await cA();break;case"disk":t.disk=await uA();break;case"network":t.network=await _A();break;case"harperdb_processes":t.harperdb_processes=await lA();break;case"table_size":t.table_size=await fA();break;case"database_metrics":case"metrics":t.metrics=await EA();break;case"threads":t.threads=await u0();break;case"replication":t.replication=await _0();break;default:break}return t}a(yee,"systemInformation")});var hi=g(($Ae,m0)=>{"use strict";var Iee=wr(),pA=K(),wee=require("util"),Aa=C(),E0=X();E0.initSync();var Cee=XR(),h0=ir(),{Node:FAe,NodeSubscription:kAe}=qc(),Lee=pc(),Dee=e0(),{RemotePayloadObject:Pee,RemotePayloadSubscription:Mee}=__(),{handleHDBError:Uee,hdb_errors:vee}=ie(),{HTTP_STATUS_CODES:Bee,HDB_ERROR_MSGS:Hee}=vee,Gee=rs(),qee=Ei(),xee=$i(),{getDatabases:Fee}=(Te(),oe(ke)),kee=wee.promisify(Cee.authorize),$ee=h0.searchByHash,Vee=h0.searchByValue;m0.exports={authHeaderToUser:Yee,isEmpty:Kee,getNodeRecord:Wee,upsertNodeRecord:Qee,buildNodePayloads:jee,checkClusteringEnabled:zee,getAllNodeRecords:Jee,getSystemInfo:Xee,reverseSubscription:p0};async function Yee(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await kee(t,null),e}a(Yee,"authHeaderToUser");function Kee(e){return e==null}a(Kee,"isEmpty");async function Wee(e){let t=new Lee(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return $ee(t)}a(Wee,"getNodeRecord");async function Qee(e){let t=new Dee(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Iee.upsert(t)}a(Qee,"upsertNodeRecord");function p0(e){if(pA.isEmpty(e.subscribe)||pA.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(p0,"reverseSubscription");function jee(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=pA.getTableHashAttribute(l,_),{subscribe:d,publish:f}=p0(c),E=Fee()[l]?.[_],h=new Mee(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Pee(r,t,s,n)}a(jee,"buildNodePayloads");function zee(){if(!E0.get(Aa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Uee(new Error,Hee.CLUSTERING_NOT_ENABLED,Bee.BAD_REQUEST,void 0,void 0,!0)}a(zee,"checkClusteringEnabled");async function Jee(){let e=new Gee(Aa.SYSTEM_SCHEMA_NAME,Aa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Vee(e))}a(Jee,"getAllNodeRecords");async function Xee(){let e=await qee.getSystemInformation();return{hdb_version:xee.version(),node_version:e.node_version,platform:e.platform}}a(Xee,"getSystemInfo")});var mA=g((YAe,N0)=>{"use strict";var _h=pt(),S0=K(),T0=et(),g0=C(),dh=x(),R0=XE(),Zee=mu(),{RemotePayloadObject:ete}=__(),{handleHDBError:A0,hdb_errors:tte}=ie(),{HTTP_STATUS_CODES:O0}=tte,{NodeSubscription:b0}=qc();N0.exports=rte;async function rte(e,t){let r;try{r=await _h.request(`${t}.${T0.REQUEST_SUFFIX}`,new ete(g0.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),dh.trace("Response from remote describe all request:",r)}catch(o){dh.error(`addNode received error from describe all request to remote node: ${o}`);let c=_h.requestErrorHandler(o,"add_node",t);throw A0(new Error,c,O0.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 A0(new Error,o,O0.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===g0.SYSTEM_SCHEMA_NAME){await _h.createLocalTableStream(l,c);let h=new b0(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=S0.doesSchemaExist(l),u=n[l]!==void 0,d=c?S0.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(dh.trace(`addNode creating schema: ${l}`),await R0.createSchema({operation:"create_schema",schema:l})),!d&&f){dh.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Zee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await R0.createTable(h)}await _h.createLocalTableStream(l,c);let E=new b0(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(rte,"reviewSubscriptions")});var E_=g((WAe,w0)=>{"use strict";var{handleHDBError:fh,hdb_errors:nte}=ie(),{HTTP_STATUS_CODES:Eh}=nte,{addUpdateNodeValidator:ste}=sh(),hh=x(),I0=C(),y0=et(),ite=K(),d_=pt(),f_=hi(),ote=X(),ate=mA(),{Node:cte,NodeSubscription:lte}=qc(),{broadcast:ute}=tt(),_te="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",dte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",fte=ote.get(I0.CONFIG_PARAMS.CLUSTERING_NODENAME);w0.exports=Ete;async function Ete(e,t=!1){hh.trace("addNode called with:",e),f_.checkClusteringEnabled();let r=ste(e);if(r)throw fh(r,r.message,Eh.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await f_.getNodeRecord(n);if(!ite.isEmptyOrZeroLength(d))throw fh(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Eh.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await ate(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=_te,o;let c=f_.buildNodePayloads(s,fte,I0.OPERATIONS_ENUM.ADD_NODE,await f_.getSystemInfo()),l=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new lte(E.schema,E.table,E.publish,E.subscribe))}hh.trace("addNode sending remote payload:",c);let _;try{_=await d_.request(`${n}.${y0.REQUEST_SUFFIX}`,c)}catch(d){hh.error(`addNode received error from request: ${d}`);for(let E=0,h=s.length;E<h;E++){let m=s[E];m.publish=!1,m.subscribe=!1,await d_.updateRemoteConsumer(m,n)}let f=d_.requestErrorHandler(d,"add_node",n);throw fh(new Error,f,Eh.INTERNAL_SERVER_ERROR,"error",f)}if(_.status===y0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw fh(new Error,d,Eh.INTERNAL_SERVER_ERROR,"error",d)}hh.trace(_);for(let d=0,f=s.length;d<f;d++){let E=s[d];await d_.updateRemoteConsumer(E,n),E.subscribe===!0&&await d_.updateConsumerIterator(E.schema,E.table,n,"start")}let u=new cte(n,l,_.system_info);return await f_.upsertNodeRecord(u),ute({type:"nats_update"}),i.length>0?o.message=dte:o.message=`Successfully added '${n}' to manifest`,o}a(Ete,"addNode")});var gA=g((zAe,D0)=>{"use strict";var{handleHDBError:SA,hdb_errors:hte}=ie(),{HTTP_STATUS_CODES:TA}=hte,{addUpdateNodeValidator:pte}=sh(),h_=x(),L0=C(),C0=et(),jAe=K(),p_=pt(),m_=hi(),mte=X(),{cloneDeep:Ste}=require("lodash"),Tte=mA(),{Node:gte,NodeSubscription:Rte}=qc(),{broadcast:Ate}=tt(),Ote="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",bte="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nte=mte.get(L0.CONFIG_PARAMS.CLUSTERING_NODENAME);D0.exports=yte;async function yte(e){h_.trace("updateNode called with:",e),m_.checkClusteringEnabled();let t=pte(e);if(t)throw SA(t,t.message,TA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await m_.getNodeRecord(r);s.length>0&&(n=Ste(s));let{added:i,skipped:o}=await Tte(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Ote,c;let l=m_.buildNodePayloads(i,Nte,L0.OPERATIONS_ENUM.UPDATE_NODE,await m_.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let f=i[u];h_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),i[u].start_time===void 0&&delete i[u].start_time}h_.trace("updateNode sending remote payload:",l);let _;try{_=await p_.request(`${r}.${C0.REQUEST_SUFFIX}`,l)}catch(u){h_.error(`updateNode received error from request: ${u}`);let d=p_.requestErrorHandler(u,"update_node",r);throw SA(new Error,d,TA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===C0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw SA(new Error,u,TA.INTERNAL_SERVER_ERROR,"error",u)}h_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];await p_.updateRemoteConsumer(f,r),f.subscribe===!0?await p_.updateConsumerIterator(f.schema,f.table,r,"start"):await p_.updateConsumerIterator(f.schema,f.table,r,"stop")}return n||(n=[new gte(r,[],_.system_info)]),await Ite(n[0],i,_.system_info),o.length>0?c.message=bte:c.message=`Successfully updated '${r}'`,c}a(yte,"updateNode");async function Ite(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 Rte(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await m_.upsertNodeRecord(n),Ate({type:"nats_update"})}a(Ite,"updateNodeTable")});var B0=g((XAe,v0)=>{"use strict";var U0=require("joi"),{string:P0}=U0.types(),wte=rt(),M0=C(),Cte=X(),Lte=et();v0.exports=Dte;function Dte(e){let t=P0.invalid(Cte.get(M0.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Lte.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=U0.object({operation:P0.valid(M0.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return wte.validateBySchema(e,r)}a(Dte,"removeNodeValidator")});var mh=g((eOe,F0)=>{"use strict";var{handleHDBError:H0,hdb_errors:Pte}=ie(),{HTTP_STATUS_CODES:G0}=Pte,Mte=B0(),S_=x(),q0=hi(),Ute=K(),ph=C(),x0=et(),RA=pt(),vte=X(),{RemotePayloadObject:Bte}=__(),{NodeSubscription:Hte}=qc(),Gte=pu(),qte=na(),{broadcast:xte}=tt(),Fte=vte.get(ph.CONFIG_PARAMS.CLUSTERING_NODENAME);F0.exports=kte;async function kte(e){S_.trace("removeNode called with:",e),q0.checkClusteringEnabled();let t=Mte(e);if(t)throw H0(t,t.message,G0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await q0.getNodeRecord(r);if(Ute.isEmptyOrZeroLength(n))throw H0(new Error,`Node '${r}' was not found.`,G0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Bte(ph.OPERATIONS_ENUM.REMOVE_NODE,Fte,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await RA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await RA.updateRemoteConsumer(new Hte(u.schema,u.table,!1,!1),r)}catch(d){S_.error(d)}}try{i=await RA.request(`${r}.${x0.REQUEST_SUFFIX}`,s),S_.trace("Remove node reply from remote node:",r,i)}catch(l){S_.error("removeNode received error from request:",l),o=!0}let c=new Gte(ph.SYSTEM_SCHEMA_NAME,ph.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await qte.deleteRecord(c),xte({type:"nats_update"}),i?.status===x0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(S_.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(kte,"removeNode")});var V0=g((rOe,$0)=>{"use strict";var k0=require("joi"),{string:$te,array:Vte}=k0.types(),Yte=rt(),Kte=sh();$0.exports=Wte;function Wte(e){let t=k0.object({operation:$te.valid("configure_cluster").required(),connections:Vte.items(Kte.validation_schema).required()});return Yte.validateBySchema(e,t)}a(Wte,"configureClusterValidator")});var Th=g((sOe,j0)=>{"use strict";var Qte=C(),Sh=x(),jte=K(),zte=mh(),Jte=E_(),Y0=hi(),Xte=V0(),{handleHDBError:K0,hdb_errors:Zte}=ie(),{HTTP_STATUS_CODES:W0}=Zte,ere="Configure cluster complete.",tre="Failed to configure the cluster. Check the logs for more details.",rre="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";j0.exports=nre;async function nre(e){Sh.trace("configure cluster called with:",e),Y0.checkClusteringEnabled();let t=Xte(e);if(t)throw K0(t,t.message,W0.BAD_REQUEST,void 0,void 0,!0);let r=await Y0.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(Q0(zte,{operation:Qte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Sh.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(Q0(Jte,E,E.node_name))}let c=await Promise.allSettled(i);Sh.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"&&(Sh.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(jte.isEmptyOrZeroLength(l))return{message:ere,connections:_};if(u)return{message:rre,failed_nodes:l,connections:_};throw K0(new Error,tre,W0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(nre,"configureCluster");async function Q0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(Q0,"functionWrapper")});var J0=g((oOe,z0)=>{"use strict";var gh=require("joi"),sre=rt(),{validateSchemaExists:ire,validateTableExists:ore,validateSchemaName:are}=ws(),cre=gh.object({operation:gh.string().valid("purge_stream"),schema:gh.string().custom(ire).custom(are).required(),table:gh.string().custom(ore).required()});function lre(e){return sre.validateBySchema(e,cre)}a(lre,"purgeStreamValidator");z0.exports=lre});var AA=g((cOe,X0)=>{"use strict";var{handleHDBError:ure,hdb_errors:_re}=ie(),{HTTP_STATUS_CODES:dre}=_re,fre=J0(),Ere=pt(),hre=hi();X0.exports=pre;async function pre(e){if(e.purge_ingest!==!0){let s=fre(e);if(s)throw ure(s,s.message,dre.BAD_REQUEST,void 0,void 0,!0)}hre.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await Ere.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(pre,"purgeStream")});var Ah=g((uOe,sB)=>{"use strict";var bA=hi(),mre=pt(),tB=X(),Rh=C(),Oa=et(),Sre=K(),OA=x(),{RemotePayloadObject:Tre}=__(),{ErrorCode:Z0}=require("nats"),eB=tB.get(Rh.CONFIG_PARAMS.CLUSTERING_ENABLED),rB=tB.get(Rh.CONFIG_PARAMS.CLUSTERING_NODENAME);sB.exports={clusterStatus:gre,buildNodeStatus:nB};async function gre(){let e={node_name:rB,is_enabled:eB,connections:[]};if(!eB)return e;let t=await bA.getAllNodeRecords();if(Sre.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(nB(t[n],e.connections));return await Promise.allSettled(r),e}a(gre,"clusterStatus");async function nB(e,t){let r=e.name,n=new Tre(Rh.OPERATIONS_ENUM.CLUSTER_STATUS,rB,void 0,await bA.getSystemInfo()),s,i,o=Oa.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await mre.request(Oa.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Oa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Oa.CLUSTER_STATUS_STATUSES.CLOSED,OA.error(`Error getting node status from ${r} `,s))}catch(l){OA.warn(`Error getting node status from ${r}`,l),l.code===Z0.NoResponders?o=Oa.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===Z0.Timeout?o=Oa.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Oa.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Rre(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!==Rh.PRE_4_0_0_VERSION&&await bA.upsertNodeRecord(l)}catch(l){OA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(nB,"buildNodeStatus");function Rre(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(Rre,"NodeStatusObject")});var bh=g((dOe,iB)=>{"use strict";var{handleHDBError:Are,hdb_errors:Ore}=ie(),{HTTP_STATUS_CODES:bre}=Ore,Nre=pt(),yre=hi(),NA=K(),Oh=require("joi"),Ire=rt(),wre=2e3,Cre=Oh.object({timeout:Oh.number().min(1),connected_nodes:Oh.boolean(),routes:Oh.boolean()});iB.exports=Lre;async function Lre(e){yre.checkClusteringEnabled();let t=Ire.validateBySchema(e,Cre);if(t)throw Are(t,t.message,bre.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||NA.autoCastBoolean(n),o=s===void 0||NA.autoCastBoolean(s),c={nodes:[]},l=await Nre.getServerList(r??wre),_={};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:NA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Lre,"clusterNetwork")});var lB=g((EOe,cB)=>{"use strict";var yA=require("joi"),oB=rt(),{route_constraints:aB}=mg();cB.exports={setRoutesValidator:Dre,deleteRoutesValidator:Pre};function Dre(e){let t=yA.object({server:yA.valid("hub","leaf").required(),routes:aB.required()});return oB.validateBySchema(e,t)}a(Dre,"setRoutesValidator");function Pre(e){let t=yA.object({routes:aB.required()});return oB.validateBySchema(e,t)}a(Pre,"deleteRoutesValidator")});var yh=g((pOe,fB)=>{"use strict";var ba=ht(),IA=K(),Nh=C(),uB=lB(),{handleHDBError:_B,hdb_errors:Mre}=ie(),{HTTP_STATUS_CODES:dB}=Mre,Ure="cluster routes successfully set",vre="cluster routes successfully deleted";fB.exports={setRoutes:Bre,getRoutes:Hre,deleteRoutes:Gre};function Bre(e){let t=uB.setRoutesValidator(e);if(t)throw _B(t,t.message,dB.BAD_REQUEST,void 0,void 0,!0);let r=ba.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=IA.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"?ba.updateConfigValue(Nh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ba.updateConfigValue(Nh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Ure,set:o,skipped:i}}a(Bre,"setRoutes");function Hre(){let e=ba.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Hre,"getRoutes");function Gre(e){let t=uB.deleteRoutesValidator(e);if(t)throw _B(t,t.message,dB.BAD_REQUEST,void 0,void 0,!0);let r=ba.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=IA.isEmptyOrZeroLength(n)?null:n,ba.updateConfigValue(Nh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=IA.isEmptyOrZeroLength(s)?null:s,ba.updateConfigValue(Nh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:vre,deleted:i,skipped:o}}a(Gre,"deleteRoutes")});var hB=g((SOe,EB)=>{"use strict";var T_=require("alasql"),Na=require("recursive-iterator"),ds=x(),qre=K(),g_=C(),wA=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,Fre(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=>g_.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=>!g_.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][g_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=xre(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(_=>!g_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new T_.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 xre(e){return e.filter(t=>t[g_.PERMS_CRUD_ENUM.READ])}a(xre,"filterReadRestrictedAttrs");function Fre(e,t,r,n,s){kre(e,t,r,n,s)}a(Fre,"interpretAST");function R_(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(R_,"addSchemaTableToMap");function kre(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof T_.yy.Insert?Kre(e,t,r):e instanceof T_.yy.Select?$re(e,t,r,n,s):e instanceof T_.yy.Update?Vre(e,t,r):e instanceof T_.yy.Delete?Yre(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(kre,"getRecordAttributesAST");function $re(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(qre.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{R_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),R_(c.table,t,r,n,s)});let o=new Na(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{ds.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 Na(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{ds.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 Na(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{ds.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 Na(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{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a($re,"getSelectAttributes");function Vre(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Na(e.columns),s=e.table.databaseid;R_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&CA(e.table.tableid,s,i.columnid,t,r)}a(Vre,"getUpdateAttributes");function Yre(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Na(e.where),s=e.table.databaseid;R_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&CA(e.table.tableid,s,i.columnid,t,r)}a(Yre,"getDeleteAttributes");function Kre(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Na(e.columns),s=e.into.databaseid;R_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&CA(e.into.tableid,s,i.columnid,t,r)}a(Kre,"getInsertAttributes");function CA(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(CA,"pushAttribute");EB.exports=wA});var wh=g((gOe,TB)=>{var Ih=aa(),pB=require("chalk"),En=x(),mB=require("prompt"),{promisify:Wre}=require("util"),LA=C(),Qre=require("fs-extra"),jre=require("path"),zre=K(),Jre=$i(),SB=X();SB.initSync();var Xre=require("moment"),Zre=Wre(mB.get),ene=jre.join(SB.getHdbBasePath(),LA.LICENSE_KEY_DIR_NAME,LA.LICENSE_FILE_NAME,LA.LICENSE_FILE_NAME);TB.exports={getFingerprint:rne,setLicense:tne,parseLicense:DA,register:nne,getRegistrationInfo:ine};async function tne(e){if(e&&e.key&&e.company){try{En.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await DA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw En.error(r),En.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(tne,"setLicense");async function rne(){let e={};try{e=await Ih.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw En.error(r),En.error(t),new Error(r)}return e}a(rne,"getFingerprint");async function DA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");En.info("Validating license input...");let r=Ih.validateLicense(e,t);if(En.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(En.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(En.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{En.info("writing license to disk"),await Qre.writeFile(ene,JSON.stringify({license_key:e,company:t}))}catch(n){throw En.error("Failed to write License"),n}return"Registration successful."}a(DA,"parseLicense");async function nne(){let e=await sne();return DA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(nne,"register");async function sne(){let e=await Ih.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:pB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:pB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{mB.start()}catch(n){En.error(n)}let r;try{r=await Zre(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(sne,"promptForRegistration");async function ine(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ih.getLicense()}catch(r){throw En.error(`There was an error when searching licenses due to: ${r.message}`),r}if(zre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Jre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Xre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(ine,"getRegistrationInfo")});var RB=g((AOe,gB)=>{"use strict";var one=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+one.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,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"}};gB.exports=PA});var bB=g((bOe,OB)=>{"use strict";var AB=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+AB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+AB.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 yB=g((yOe,NB)=>{"use strict";var UA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};NB.exports=UA});var wB=g((wOe,IB)=>{"use strict";var ane=et(),vA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+ane.SERVER_SUFFIX.ADMIN,this.password=r}};IB.exports=vA});var Mh=g((LOe,DB)=>{"use strict";var xc=require("path"),Dh=require("fs-extra"),cne=RB(),lne=bB(),une=yB(),_ne=wB(),BA=Lr(),kc=K(),Gr=ht(),Lh=C(),A_=et(),{CONFIG_PARAMS:St}=Lh,O_=x(),b_=X(),CB=_i(),HA=pt(),Fc="clustering",dne=1e4,LB=5;DB.exports={generateNatsConfig:Ene,removeNatsConfig:hne,getHubConfigPath:fne};function fne(){let e=b_.get(St.ROOTPATH);return xc.join(e,Fc,A_.NATS_CONFIG_FILES.HUB_SERVER)}a(fne,"getHubConfigPath");async function Ene(e=!1,t=void 0){b_.initSync();let r=b_.get(St.ROOTPATH),n=xc.join(r,Fc,A_.PID_FILES.HUB),s=xc.join(r,Fc,A_.PID_FILES.LEAF),i=Gr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xc.join(r,Fc,A_.NATS_CONFIG_FILES.HUB_SERVER),c=xc.join(r,Fc,A_.NATS_CONFIG_FILES.LEAF_SERVER),l=Gr.getConfigFromFile(St.CLUSTERING_TLS_CERTIFICATE),_=Gr.getConfigFromFile(St.CLUSTERING_TLS_PRIVATEKEY),u=Gr.getConfigFromFile(St.CLUSTERING_TLS_CERT_AUTH),d=Gr.getConfigFromFile(St.CLUSTERING_TLS_INSECURE),f=Gr.getConfigFromFile(St.CLUSTERING_TLS_VERIFY),E=Gr.getConfigFromFile(St.CLUSTERING_NODENAME),h=Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HA.checkNATSServerInstalled()||Ph("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await BA.listUsers(),S=Gr.getConfigFromFile(St.CLUSTERING_USER),R=await BA.getClusterUser();(kc.isEmpty(R)||R.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 Ch(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ch(St.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ch(St.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ch(St.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],A=[];for(let[z,J]of m.entries())J.role.role===Lh.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(T.push(new _ne(J.username,CB.decrypt(J.hash))),A.push(new une(J.username,CB.decrypt(J.hash))));let P=[],{hub_routes:v}=Gr.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(v))for(let z of v)P.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${z.host}:${z.port}`);let U=new cne(Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NAME),Gr.getConfigFromFile(St.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),P,T,A);u==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Lh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Dh.writeJson(o,U),O_.trace(`Hub server config written to ${o}`));let F=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,H=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,j=new lne(Gr.getConfigFromFile(St.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[F],[H],T,A,l,_,u,d);u==null&&delete j.tls.ca_file,(t===void 0||t===Lh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Dh.writeJson(c,j),O_.trace(`Leaf server config written to ${c}`))}a(Ene,"generateNatsConfig");async function Ch(e){let t=b_.get(e);return kc.isEmpty(t)&&Ph(`port undefined for '${e}'`),await kc.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(Ch,"isPortAvailable");function Ph(e){let t=`Error generating clustering config: ${e}`;O_.error(t),console.error(t),process.exit(1)}a(Ph,"generateNatsConfigError");async function hne(e){let{port:t,config_file:r}=HA.getServerConfig(e),{username:n,decrypt_hash:s}=await BA.getClusterUser(),i=0,o=2e3;for(;i<LB;){try{let _=await HA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){O_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=LB)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 kc.async_set_timeout(o*(i*2))}let c="0".repeat(dne),l=xc.join(b_.get(St.ROOTPATH),Fc,r);await Dh.writeFile(l,c),await Dh.remove(l),O_.notify(e,"started.")}a(hne,"removeNatsConfig")});var HB=g((POe,BB)=>{"use strict";var hn=X(),pne=aa(),Se=C(),N_=et(),pi=require("path"),{PACKAGE_ROOT:vh}=C(),PB=X(),Uh=K(),$c="/dev/null",mne=pi.join(vh,"launchServiceScripts"),MB=pi.join(vh,"utility/scripts"),Sne=pi.join(MB,Se.HDB_RESTART_SCRIPT),UB=pi.resolve(vh,"dependencies",`${process.platform}-${process.arch}`,N_.NATS_BINARY_NAME);function vB(){let t=pne.licenseSearch().ram_allocation||Se.RAM_ALLOCATION_ENUM.DEFAULT,r=Se.MEM_SETTING_KEY+t,n={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Uh.noBootFile()&&(n[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Uh.getEnvCliRootPath()),{name:Se.PROCESS_DESCRIPTORS.HDB,script:Se.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:vh}}a(vB,"generateMainServerConfig");var Tne=9930;function gne(){hn.initSync(!0);let e=hn.get(Se.CONFIG_PARAMS.ROOTPATH),t=pi.join(e,"clustering",N_.NATS_CONFIG_FILES.HUB_SERVER),r=pi.join(hn.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=PB.get(Se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=N_.LOG_LEVEL_FLAGS[hn.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Tne?"-"+n:""),script:UB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return hn.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(gne,"generateNatsHubServerConfig");var Rne=9940;function Ane(){hn.initSync(!0);let e=hn.get(Se.CONFIG_PARAMS.ROOTPATH),t=pi.join(e,"clustering",N_.NATS_CONFIG_FILES.LEAF_SERVER),r=pi.join(hn.get(Se.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Se.LOG_NAMES.HDB),n=PB.get(Se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=N_.LOG_LEVEL_FLAGS[hn.get(Se.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Rne?"-"+n:""),script:UB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return hn.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(Ane,"generateNatsLeafServerConfig");function One(){hn.initSync();let e=pi.join(hn.get(Se.CONFIG_PARAMS.LOGGING_ROOT),Se.LOG_NAMES.HDB),t={name:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Se.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:mne,autorestart:!1};return hn.get(Se.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$c,t.error_file=$c),t}a(One,"generateClusteringUpgradeV4ServiceConfig");function bne(){let e={[Se.PROCESS_NAME_ENV_PROP]:Se.PROCESS_DESCRIPTORS.RESTART_HDB};return Uh.noBootFile()&&(e[Se.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Uh.getEnvCliRootPath()),{...{name:Se.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:MB},script:Sne}}a(bne,"generateRestart");function Nne(){return{apps:[vB()]}}a(Nne,"generateAllServiceConfigs");BB.exports={generateAllServiceConfigs:Nne,generateMainServerConfig:vB,generateRestart:bne,generateNatsHubServerConfig:gne,generateNatsLeafServerConfig:Ane,generateClusteringUpgradeV4ServiceConfig:One}});var Vc=g((vOe,zB)=>{"use strict";var He=C(),yne=K(),Si=Mh(),Bh=pt(),mi=et(),ho=HB(),Hh=X(),po=x(),Ine=hi(),{startWorker:GB,onMessageFromWorkers:wne}=tt(),Cne=Ei(),UOe=require("util"),Lne=require("child_process"),Dne=require("fs"),{execFile:Pne}=Lne,we;zB.exports={enterPM2Mode:Mne,start:mo,stop:GA,reload:xB,restart:FB,list:qA,describe:$B,connect:Ti,kill:Gne,startAllServices:qne,startService:xA,getUniqueServicesList:VB,restartAllServices:xne,isServiceRegistered:YB,reloadStopStart:KB,restartHdb:kB,deleteProcess:Bne,startClusteringProcesses:QB,startClusteringThreads:jB,isHdbRestartRunning:Hne,isClusteringRunning:kne,stopClustering:Fne,reloadClustering:$ne};var y_=!1;wne(e=>{e.type==="restart"&&Hh.initSync(!0)});function Mne(){y_=!0}a(Mne,"enterPM2Mode");function Ti(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{po.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ti,"connect");var qr,Une=10,qB;function mo(e,t=!1){if(y_)return vne(e);let r=Pne(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=qr.indexOf(r);o>-1&&qr.splice(o,1),!qB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Une&&(Dne.existsSync(Si.getHubConfigPath())?mo(e):(await Si.generateNatsConfig(!0),mo(e),await new Promise(c=>setTimeout(c,3e3)),await Si.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Si.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Hh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&mi.LOG_LEVEL_HIERARCHY[o]>=mi.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===mi.LOG_LEVELS.ERR||u===mi.LOG_LEVELS.WRN?po.OUTPUTS.STDERR:po.OUTPUTS.STDOUT;po.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=mi.LOG_LEVELS[f]}if(mi.LOG_LEVEL_HIERARCHY[o]>=mi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===mi.LOG_LEVELS.ERR||u===mi.LOG_LEVELS.WRN?po.OUTPUTS.STDERR:po.OUTPUTS.STDOUT;po.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),qr=[],!qr&&!t){let i=a(()=>{qB=!0,qr&&(qr.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)}qr.push(r)}a(mo,"start");function vne(e){return new Promise(async(t,r)=>{try{await Ti()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(vne,"startWithPM2");function GA(e){if(!y_){for(let t of qr||[])t.name===e&&(qr.splice(qr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ti()}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(GA,"stop");function xB(e){return new Promise(async(t,r)=>{try{await Ti()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(xB,"reload");function FB(e){if(!y_)for(let t of qr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ti()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(FB,"restart");function Bne(e){return new Promise(async(t,r)=>{try{await Ti()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(Bne,"deleteProcess");async function kB(){await mo(ho.generateRestart())}a(kB,"restartHdb");async function Hne(){let e=await qA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Hne,"isHdbRestartRunning");function qA(){return new Promise(async(e,t)=>{try{await Ti()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(qA,"list");function $B(e){return new Promise(async(t,r)=>{try{await Ti()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a($B,"describe");function Gne(){if(!y_){for(let e of qr||[])e.kill();qr=[];return}return new Promise(async(e,t)=>{try{await Ti()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(Gne,"kill");async function qne(){try{await QB(),await jB(),await mo(ho.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(qne,"startAllServices");async function xA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ho.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ho.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ho.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ho.generateNatsHubServerConfig(),await mo(r,t),await Si.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ho.generateNatsLeafServerConfig(),await mo(r,t),await Si.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ho.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await mo(r)}catch(r){throw we?.disconnect(),r}}a(xA,"startService");async function VB(){try{let e=await qA(),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(VB,"getUniqueServicesList");async function xne(e=[]){try{let t=!1,r=await VB();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 FB(o))}t&&await KB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(xne,"restartAllServices");async function YB(e){if(qr?.find(r=>r.name===e))return!0;let t=await Cne.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(YB,"isServiceRegistered");async function KB(e){let t=Hh.get(He.CONFIG_PARAMS.THREADS_COUNT)??Hh.get(He.CONFIG_PARAMS.THREADS),r=await $B(e),n=yne.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await GA(e),await xA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await kB():await xB(e)}a(KB,"reloadStopStart");var WB;async function QB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await xA(r,e)}}a(QB,"startClusteringProcesses");async function jB(){WB=GB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Bh.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Bh.updateLocalStreams();let e=await Ine.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){po.info("Starting clustering upgrade 4.0.0 process"),GB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(jB,"startClusteringThreads");async function Fne(){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 WB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await GA(t)}}a(Fne,"stopClustering");async function kne(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await YB(t)===!1)return!1}return!0}a(kne,"isClusteringRunning");async function $ne(){await Si.generateNatsConfig(!0),await Bh.reloadNATSHub(),await Bh.reloadNATSLeaf(),await Si.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Si.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a($ne,"reloadClustering")});var ya=g((GOe,nH)=>{"use strict";var Vne=require("minimist"),{isMainThread:kA,parentPort:ZB}=require("worker_threads"),ut=C(),{PROCESS_DESCRIPTORS_VALIDATE:I_}=ut,Hs=x(),$A=K(),qh=Mh(),Gh=pt(),HOe=et(),eH=ht(),Gs=Vc(),JB=Ei(),Yne=Ho(),{restartWorkers:xh,onMessageByType:Kne}=tt(),{handleHDBError:Wne,hdb_errors:Qne}=ie(),{HTTP_STATUS_CODES:jne}=Qne,Fh=X();Fh.initSync();var w_=`Restarting HarperDB. This may take up to ${ut.RESTART_TIMEOUT_MS/1e3} seconds.`,zne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XB="Clustering is not enabled so cannot be restarted",Jne="Invalid service",Yc,Gn;nH.exports={restart:tH,restartService:VA};kA&&Kne(ut.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?VA({service:e.workerType}):tH({operation:"restart"})});async function tH(e){Gn=Object.keys(e).length===0,Yc=await Gs.isServiceRegistered(ut.HDB_PROC_DESCRIPTOR);let t=Vne(process.argv);if(t.service){await VA(t);return}if(Gn&&!Yc){console.error(zne);return}if(Gn&&console.log(w_),Yc){Gs.enterPM2Mode(),Hs.notify(w_);let r=Yne(Object.keys(ut.CONFIG_PARAM_MAP),!0);return $A.isEmptyOrZeroLength(Object.keys(r))||eH.updateConfigValue(void 0,void 0,r,!0,!0),Xne(),w_}return kA?(Hs.notify(w_),setTimeout(()=>{xh()},50)):ZB.postMessage({type:ut.ITC_EVENT_TYPES.RESTART}),w_}a(tH,"restart");async function VA(e){let{service:t}=e;if(ut.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Wne(new Error,Jne,jne.BAD_REQUEST,void 0,void 0,!0);if(Yc=await Gs.isServiceRegistered(ut.HDB_PROC_DESCRIPTOR),!kA)return ZB.postMessage({type:ut.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case I_.clustering:if(!Fh.get(ut.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XB;break}Gn&&console.log("Restarting clustering"),Hs.notify("Restarting clustering"),await rH();break;case I_.clustering_config:case I_["clustering config"]:if(!Fh.get(ut.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XB;break}Gn&&console.log("Restarting clustering_config"),Hs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case I_.harperdb:case I_.http_workers:if(Gn&&!Yc){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}Gn&&console.log("Restarting http_workers"),Hs.notify("Restarting http_workers"),Gn?await Gs.restart(ut.HDB_PROC_DESCRIPTOR):setTimeout(()=>{xh("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Hs.error(r),Gn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(VA,"restartService");async function Xne(){await rH(),await Gs.restart(ut.HDB_PROC_DESCRIPTOR),await $A.async_set_timeout(2e3),Fh.get(ut.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await FA(),Gn&&(await Gh.closeConnection(),process.exit(0))}a(Xne,"restartPM2Mode");async function rH(){if(!eH.getConfigFromFile(ut.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JB.getHDBProcessInfo()).clustering.length===0)Hs.trace("Clustering not running, restart will start clustering services"),await qh.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await FA(),Gn&&await Gh.closeConnection();else{await qh.generateNatsConfig(!0),Yc?(Hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(ut.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(ut.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JB.getHDBProcessInfo()).clustering.forEach(s=>{Hs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await $A.async_set_timeout(3e3),await FA(),await Gh.updateLocalStreams(),Gn&&await Gh.closeConnection(),Hs.trace("Restart clustering restarting ingest and reply service threads");let t=xh(ut.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xh(ut.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(rH,"restartClustering");async function FA(){await qh.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qh.removeNatsConfig(ut.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(FA,"removeNatsConfig")});var EH=g((FOe,fH)=>{"use strict";var xOe=require("lodash"),xr=C(),{handleHDBError:sH,hdb_errors:Zne}=ie(),{HDB_ERROR_MSGS:ese,HTTP_STATUS_CODES:tse}=Zne,YA=x();fH.exports={getRolePermissions:nse};var Ia=Object.create(null),rse=a(e=>({key:e,perms:{}}),"perms_template_obj"),cH=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),lH=a((e=!1,t=!1,r=!1,n=!1)=>({[xr.PERMS_CRUD_ENUM.READ]:e,[xr.PERMS_CRUD_ENUM.INSERT]:t,[xr.PERMS_CRUD_ENUM.UPDATE]:r,[xr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),KA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...lH(t,r,n,s)}),"table_perms_template"),iH=a((e,t=lH())=>({attribute_name:e,describe:dH(t),[C_]:t[C_],[WA]:t[WA],[QA]:t[QA]}),"attr_perms_template"),oH=a((e,t=!1)=>({attribute_name:e,describe:t,[C_]:t}),"timestamp_attr_perms_template"),{READ:C_,INSERT:WA,UPDATE:QA}=xr.PERMS_CRUD_ENUM,uH=Object.values(xr.PERMS_CRUD_ENUM),_H=[C_,WA,QA];function nse(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[xr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Ia[t]&&Ia[t].key===n)return Ia[t].perms;let s=sse(e,r);return Ia[t]?Ia[t].key=n:Ia[t]=rse(n),Ia[t].perms=s,s}catch(r){if(!e[xr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[xr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<xr.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 YA.error(n),YA.debug(r),sH(new Error,ese.OUTDATED_PERMS_TRANSLATION_ERROR,tse.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
12
+ ${r.stack}`;throw YA.error(n),sH(new Error)}}}a(nse,"getRolePermissions");function sse(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[xr.SYSTEM_SCHEMA_NAME]=n[xr.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]=ise(t[i]);return}r[i]=cH(),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],_=ose(c,l);r[i].describe||uH.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=KA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=KA()})}),r}a(sse,"translateRolePermissions");function ise(e){let t=cH(!0);return Object.keys(e).forEach(r=>{t.tables[r]=KA(!0,!0,!0,!0,!0)}),t}a(ise,"createStructureUserPermissions");function ose(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 xr.TIME_STAMP_NAMES.includes(d)&&(f=oH(d,u[C_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=iH(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=dH(u),s.attribute_permissions.push(u),c||ase(u,l)}else if(_!==o){let u;xr.TIME_STAMP_NAMES.includes(_)?u=oH(_):u=iH(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=aH(s),s}else return e.describe=aH(e),e}a(ose,"getTableAttrPerms");function aH(e){return uH.filter(t=>e[t]).length>0}a(aH,"getSchemaTableDescribePerm");function dH(e){return _H.filter(t=>e[t]).length>0}a(dH,"getAttributeDescribePerm");function ase(e,t){_H.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(ase,"checkForHashPerms")});var L_={};Fe(L_,{authentication:()=>AH,bypassAuth:()=>Ese,login:()=>pse,logout:()=>mse,start:()=>hse});function Ese(){RH=!0}async function AH(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?_se?use:[]:lse?cse:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new io([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return kh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),kh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(kh){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 pH.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,m)=>{let S=new Kc.AuthAuditLog(E,h,Yt.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===Yt.AUTH_AUDIT_STATUS.SUCCESS?hH.notify(S):hH.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 ot.getUser(E,null,null),u(E,Yt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Kc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=wa.get(n),!d){let[E,h]=n.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await ot.getUser(m,S,e):null;break;case"Bearer":try{d=await(0,$h.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,$h.validateRefreshToken)(h),c({status:-1})}catch{throw R}}break}}catch(R){return fse&&(wa.get(h)||(wa.set(h,h),u(m,Yt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:So({error:R.message},e)})}wa.set(n,d),dse&&u(d.username,Yt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ot.getUser(_.user,null,e):(RH&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,SH.getSuperUser)());kh&&(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,pH.put(E)},e.login=async function(E,h){e.user=await ot.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")&&Qi.loginPath?(f.status=302,f.headers.set("Location",Qi.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 io);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function hse({server:e,port:t}){e.request(AH,{port:t||"all"}),mH||(mH=!0,setInterval(()=>{wa=new Map},qn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),gH.user.addListener(()=>{wa=new Map}))}async function pse(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 mse(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var SH,$h,TH,qn,Yt,Kc,gH,hH,cse,lse,use,_se,pH,kh,RH,dse,fse,wa,mH,Vh=Ae(()=>{SH=G(Lr());gr();Jl();$h=G(u_());Te();TH=require("uuid"),qn=G(X()),Yt=G(C()),Kc=G(x()),gH=G(Cu());Bu();Wc();hH=(0,Kc.loggerWithTag)("auth-event");qn.initSync();cse=qn.get(Yt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),lse=qn.get(Yt.CONFIG_PARAMS.HTTP_CORS),use=qn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),_se=qn.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),pH=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),kh=qn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,RH=qn.get(Yt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,dse=qn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,fse=qn.get(Yt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,wa=new Map;ot.onInvalidatedUser(()=>{wa=new Map});a(Ese,"bypassAuth");a(AH,"authentication");a(hse,"start");a(pse,"login");a(mse,"logout")});var CH=g((jOe,wH)=>{"use strict";var Ce=require("joi"),OH=require("fs-extra"),bH=require("path"),Ri=rt(),NH=X(),yH=C(),IH=x(),{hdb_errors:Sse}=ie(),{HDB_ERROR_MSGS:_r}=Sse,gi=/^[a-zA-Z0-9-_]+$/;wH.exports={getDropCustomFunctionValidator:gse,setCustomFunctionValidator:Rse,addComponentValidator:Nse,dropCustomFunctionProjectValidator:yse,packageComponentValidator:Ise,deployComponentValidator:wse,setComponentFileValidator:Ase,getComponentFileValidator:bse,dropComponentFileValidator:Ose};function Yh(e,t,r){try{let n=NH.get(yH.CONFIG_PARAMS.COMPONENTSROOT),s=bH.join(n,t);return OH.existsSync(s)?e?t:r.message(_r.PROJECT_EXISTS):e?r.message(_r.NO_PROJECT):t}catch(n){return IH.error(n),r.message(_r.VALIDATION_ERR)}}a(Yh,"checkProjectExists");function D_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(D_,"checkFilePath");function Tse(e,t,r,n){try{let s=NH.get(yH.CONFIG_PARAMS.COMPONENTSROOT),i=bH.join(s,e,t,r+".js");return OH.existsSync(i)?r:n.message(_r.NO_FILE)}catch(s){return IH.error(s),n.message(_r.VALIDATION_ERR)}}a(Tse,"checkFileExists");function gse(e){let t=Ce.object({project:Ce.string().pattern(gi).custom(Yh.bind(null,!0)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(gi).custom(Tse.bind(null,e.project,e.type)).custom(D_).required().messages({"string.pattern.base":_r.BAD_FILE_NAME})});return Ri.validateBySchema(e,t)}a(gse,"getDropCustomFunctionValidator");function Rse(e){let t=Ce.object({project:Ce.string().pattern(gi).custom(Yh.bind(null,!0)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(D_).required(),function_content:Ce.string().required()});return Ri.validateBySchema(e,t)}a(Rse,"setCustomFunctionValidator");function Ase(e){let t=Ce.object({project:Ce.string().pattern(gi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),file:Ce.string().custom(D_).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ri.validateBySchema(e,t)}a(Ase,"setComponentFileValidator");function Ose(e){let t=Ce.object({project:Ce.string().pattern(gi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),file:Ce.string().custom(D_).optional()});return Ri.validateBySchema(e,t)}a(Ose,"dropComponentFileValidator");function bse(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(D_).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ri.validateBySchema(e,t)}a(bse,"getComponentFileValidator");function Nse(e){let t=Ce.object({project:Ce.string().pattern(gi).custom(Yh.bind(null,!1)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME})});return Ri.validateBySchema(e,t)}a(Nse,"addComponentValidator");function yse(e){let t=Ce.object({project:Ce.string().pattern(gi).custom(Yh.bind(null,!0)).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME})});return Ri.validateBySchema(e,t)}a(yse,"dropCustomFunctionProjectValidator");function Ise(e){let t=Ce.object({project:Ce.string().pattern(gi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Ri.validateBySchema(e,t)}a(Ise,"packageComponentValidator");function wse(e){let t=Ce.object({project:Ce.string().pattern(gi).required().messages({"string.pattern.base":_r.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":_r.BAD_PACKAGE}),package:Ce.string().optional()});return Ri.validateBySchema(e,t)}a(wse,"deployComponentValidator")});var jh=g((JOe,BH)=>{"use strict";var Kh=require("joi"),Wh=require("path"),LH=require("fs-extra"),{exec:Cse}=require("child_process"),Lse=require("util"),DH=Lse.promisify(Cse),P_=C(),{handleHDBError:Qc,hdb_errors:Dse}=ie(),{HTTP_STATUS_CODES:jc}=Dse,M_=X(),Pse=rt(),zc=x();M_.initSync();var jA=M_.get(P_.CONFIG_PARAMS.COMPONENTSROOT),PH="npm install --omit=dev --json",Mse=`${PH} --dry-run`;BH.exports={installModules:Hse,auditModules:Gse,installAllRootModules:Use,uninstallRootModule:vse,linkHarperdb:Bse};async function Use(e=!1){await Qh(),await U_(e?"npm install --ignore-scripts":"npm install",M_.get(P_.CONFIG_PARAMS.ROOTPATH))}a(Use,"installAllRootModules");async function vse(e){await U_(`npm uninstall ${e}`,M_.get(P_.CONFIG_PARAMS.ROOTPATH))}a(vse,"uninstallRootModule");async function Bse(){await Qh(),await U_(`npm link ${P_.PACKAGE_ROOT}`,M_.get(P_.CONFIG_PARAMS.ROOTPATH))}a(Bse,"linkHarperdb");async function U_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await DH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
13
13
  `,""))}return n&&!n.includes("Debugger listening")&&zc.error("Error running NPM command:",e,n),zc.trace(r,n),r?.replace(`
14
- `,"")}a(P_,"runCommand");async function Hse(e){zc.info(`starting installModules for request: ${e}`);let t=HH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Mse:UH;await Yh(),await BH(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 _=Vh.join(WA,l),u,d=null;try{let{stdout:f,stderr:E}=await MH(s,{cwd:_});u=f?f.replace(`
14
+ `,"")}a(U_,"runCommand");async function Hse(e){zc.info(`starting installModules for request: ${e}`);let t=vH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Mse:PH;await Qh(),await UH(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 _=Wh.join(jA,l),u,d=null;try{let{stdout:f,stderr:E}=await DH(s,{cwd:_});u=f?f.replace(`
15
15
  `,""):null,d=E?E.replace(`
16
- `,""):null}catch(f){f.stderr?i[l].npm_error=vH(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 zc.info(`finished installModules with response ${i}`),i}a(Hse,"installModules");function vH(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(vH,"parseNPMStdErr");async function qse(e){zc.info(`starting auditModules for request: ${e}`);let t=HH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r}=e;await Yh(),await BH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Vh.join(WA,o);n[o]={npm_output:null,npm_error:null};try{let l=await P_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=vH(l.stderr)}}return zc.info(`finished auditModules with response ${n}`),n}a(qse,"auditModules");async function Yh(){try{return await P_("npm -v"),!0}catch{throw Qc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",jc.BAD_REQUEST,void 0,void 0,!0)}}a(Yh,"checkNPMInstalled");async function BH(e){if(!Array.isArray(e)||e.length===0)throw Qc(new Error,"projects argument must be an array with at least 1 element",jc.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=Vh.join(WA,i.toString());if(!await PH.pathExists(o)){t.push(i);continue}let l=Vh.join(o,"package.json");await PH.pathExists(l)||r.push(i)}if(t.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,jc.BAD_REQUEST,void 0,void 0,!0)}a(BH,"checkProjectPaths");function HH(e){let t=$h.object({projects:$h.array().min(1).items($h.string()).required(),dry_run:$h.boolean().default(!1)});return Pse.validateBySchema(e,t)}a(HH,"modulesValidator")});var jA=T((JOe,$H)=>{"use strict";var Jc=require("fs-extra"),QA=require("path"),Wh=x(),GH=K(),Qh=C(),kH=X(),Gse=Et();$H.exports=xse;async function xse(){let e=Fse(),t=kH.get(Qh.CONFIG_PARAMS.ROOTPATH),r=QA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Qh.PACKAGE_ROOT}},s=QA.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!==Qh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!GH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await xH(_);n.dependencies[l]=u+_}if(!o){Wh.notify("Installing components"),await FH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await xH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Wh.notify("Removing component",l),c=!0);c&&(Wh.notify("Updating components."),await FH(r,n,i))}a(xse,"installComponents");function Fse(){let e=Gse.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Fse,"getComponentsConfig");async function xH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":QA.extname(e)||await Jc.pathExists(e)?"file:":"github:"}a(xH,"getPkgPrefix");async function FH(e,t,r){Wh.trace("npm installing components package.json",t),await Jc.writeFile(e,JSON.stringify(t,null," "));try{await Kh().installAllRootModules(kH.get(Qh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Jc.writeFile(e,JSON.stringify(r,null," ")):await Jc.unlink(e),n}}a(FH,"installPackages")});var jh=T((eNe,WH)=>{"use strict";var Ye=require("fs-extra"),zA=require("fast-glob"),Te=require("path"),YH=require("tar-fs"),ZOe=require("uuid").v4,JA=require("normalize-path"),Hs=DH(),vt=x(),Je=C(),Ot=X(),M_=Et(),kse=K(),{PACKAGE_ROOT:$se}=C(),{handleHDBError:Vt,hdb_errors:Vse}=ie(),{basename:Yse}=require("path"),Kse=jA(),KH=X(),Wse=C(),{Readable:Qse}=require("stream"),{isMainThread:jse}=require("worker_threads"),{HDB_ERROR_MSGS:Ca,HTTP_STATUS_CODES:Yt}=Vse,zse=Te.join($se,"application-template"),VH=Te.join(Ot.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Jse(){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 Vt(new Error,Ca.FUNCTION_STATUS,Yt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(Jse,"customFunctionsStatus");function Xse(){vt.trace("getting custom api endpoints");let e={},t=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{zA.sync(JA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:zA.sync(JA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:zA.sync(JA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Vt(new Error,Ca.GET_FUNCTIONS,Yt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(Xse,"getCustomFunctions");function Zse(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.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=Te.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw Vt(new Error,Ca.GET_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Zse,"getCustomFunction");function eie(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.setCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.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(Te.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Vt(new Error,Ca.SET_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(eie,"setCustomFunction");function tie(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Vt(t,t.message,Yt.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(Te.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Vt(new Error,Ca.DROP_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(tie,"dropCustomFunction");function rie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.addComponentValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);vt.trace("adding component");let r=Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Te.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(zse,s),`Successfully added project: ${n}`}catch(s){throw Vt(new Error,Ca.ADD_FUNCTION,Yt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(rie,"addComponent");function nie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.dropCustomFunctionProjectValidator(e);if(t)throw Vt(t,t.message,Yt.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(!kse.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 M_.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Te.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Vt(new Error,Ca.DROP_FUNCTION_PROJECT,Yt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(nie,"dropCustomFunctionProject");async function sie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.packageComponentValidator(e);if(t)throw Vt(t,t.message,Yt.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(Te.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Te.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(VH);let i=Te.join(VH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Te.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(sie,"packageComponent");async function iie(e){e.project&&(e.project=Te.parse(e.project).name);let t=Hs.deployComponentValidator(e);if(t)throw Vt(t,t.message,Yt.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=Te.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=Qse.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(Te.join(o,"package"),o),await Ye.remove(Te.join(o,"package")))}if(await M_.addConfig(n,{package:i}),!s){await Kse();let f=KH.get(Wse.CONFIG_PARAMS.ROOTPATH);o=Te.join(f,"node_modules",n)}if(jse)return;let c=new Map;c.isWorker=!0;let l=(Jh(),oe(zh)),_;l.setErrorReporter(f=>_=f);let u=Yse(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(iie,"deployComponent");async function oie(){let e=M_.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=Te.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:Te.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(Te.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Te.join(Ot.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Jh(),oe(zh)).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(oie,"getComponents");async function aie(e){let t=Hs.getComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let n=M_.getConfigObj()[e.project]||e.project==="harperdb"?Te.join(KH.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(Te.join(n,e.project,e.file));return{message:await Ye.readFile(Te.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 '${Te.join(e.project,e.file)}'`):i}}a(aie,"getComponentFile");async function cie(e){let t=Hs.setComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Te.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(cie,"setComponentFile");async function lie(e){let t=Hs.dropComponentFileValidator(e);if(t)throw Vt(t,t.message,Yt.BAD_REQUEST);let r=e.file?Te.join(e.project,e.file):e.project,n=Te.join(Ot.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),M_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(lie,"dropComponent");WH.exports={customFunctionsStatus:Jse,getCustomFunctions:Xse,getCustomFunction:Zse,setCustomFunction:eie,dropCustomFunction:tie,addComponent:rie,dropCustomFunctionProject:nie,packageComponent:sie,deployComponent:iie,getComponents:oie,getComponentFile:aie,setComponentFile:cie,dropComponent:lie}});var XA=T((rNe,jH)=>{"use strict";var qs=require("joi"),QH=rt();jH.exports={readTransactionLogValidator:uie,deleteTransactionLogsBeforeValidator:_ie};function uie(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),from:qs.date().timestamp(),to:qs.date().timestamp(),limit:qs.number().min(1)});return QH.validateBySchema(e,t)}a(uie,"readTransactionLogValidator");function _ie(e){let t=qs.object({schema:qs.string().required(),table:qs.string().required(),timestamp:qs.date().timestamp().required()});return QH.validateBySchema(e,t)}a(_ie,"deleteTransactionLogsBeforeValidator")});var Zh=T((sNe,eq)=>{"use strict";var ZA=C(),Xh=ht(),zH=K(),JH=X(),XH=li(),{handleHDBError:Xc,hdb_errors:die}=ie(),{HTTP_STATUS_CODES:Zc}=die,{readTransactionLogValidator:fie,deleteTransactionLogsBeforeValidator:Eie}=XA(),ZH="This operation relies on clustering and cannot run with it disable.",hie="Logs successfully deleted from transaction log.",pie="All logs successfully deleted from transaction log.";eq.exports={readTransactionLog:mie,deleteTransactionLogsBefore:Sie};async function*mie(e){let t=fie(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!JH.get(ZA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,ZH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=zH.checkSchemaTableExist(r,n);if(s)throw Xc(new Error,s,Zc.NOT_FOUND,void 0,void 0,!0);let i=XH.createNatsTableStreamName(r,n),o=await Xh.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===ZA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(mie,"readTransactionLog");async function Sie(e){let t=Eie(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!JH.get(ZA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,ZH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=zH.checkSchemaTableExist(r,n);if(i)throw Xc(new Error,i,Zc.NOT_FOUND,void 0,void 0,!0);let o=XH.createNatsTableStreamName(r,n),{jsm:c}=await Xh.getNATSReferences(),l=await Xh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=hie,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=pie):d=(await Xh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Sie,"deleteTransactionLogsBefore")});var rq=T((oNe,tq)=>{"use strict";var eO=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}};tq.exports=eO});var sq=T((cNe,nq)=>{"use strict";var tO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};nq.exports=tO});var nO=T((uNe,oq)=>{"use strict";var iq=rq(),Tie=sq(),{HDB_ERROR_MSGS:gie}=Wr(),rO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=gie.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 iq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Tie(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 iq(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}};oq.exports=rO});var np=T((dNe,Aq)=>{"use strict";var sO=br(),ep=nr(),qn=jE(),B_=Ji(),iO=na(),Rie=CR(),Aie=Rv(),H_=wr(),tp=ZE(),Bt=x(),Oie=xR(),Nie=d_(),bie=SA(),yie=Eh(),Iie=ph(),wie=gA(),Cie=Th(),Lie=Rh(),oO=Oh(),gi=K(),Die=mB(),aO=bh(),lq=ya(),Hn=C(),uq=pH(),Pie=di(),_q=c_(),dq=(Fh(),oe(w_)),fq=Et(),En=jh(),Mie=require("alasql"),Eq=Zh(),hq=Kh(),pq=nO(),{handleHDBError:Gr,hdb_errors:mq}=ie(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:U_}=mq,V=new Map,Sq="delete",mo="insert",Ri="read",La="update",v_="describe",aq=B_.describeSchema.name,cq=B_.describeTable.name,Tq={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Uie="catchup",vie="handleGetJob",Bie="handleGetJobsByStartDate",rp={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Hie=[qn.createTable.name,qn.createAttribute.name,qn.dropTable.name,qn.dropAttribute.name],gq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(sO.insert.name,new Q(!1,[mo]));V.set(sO.update.name,new Q(!1,[La]));V.set(sO.upsert.name,new Q(!1,[mo,La]));V.set(ep.searchByConditions.name,new Q(!1,[Ri]));V.set(ep.searchByHash.name,new Q(!1,[Ri]));V.set(ep.searchByValue.name,new Q(!1,[Ri]));V.set(ep.search.name,new Q(!1,[Ri]));V.set(qn.createSchema.name,new Q(!0,[]));V.set(qn.createTable.name,new Q(!0,[]));V.set(qn.createAttribute.name,new Q(!1,[mo]));V.set(qn.dropSchema.name,new Q(!0,[]));V.set(qn.dropTable.name,new Q(!0,[]));V.set(qn.dropAttribute.name,new Q(!0,[]));V.set(B_.describeSchema.name,new Q(!1,[Ri]));V.set(B_.describeTable.name,new Q(!1,[Ri]));V.set(iO.deleteRecord.name,new Q(!1,[Sq]));V.set(H_.addUser.name,new Q(!0,[]));V.set(H_.alterUser.name,new Q(!0,[]));V.set(H_.dropUser.name,new Q(!0,[]));V.set(H_.listUsersExternal.name,new Q(!0,[]));V.set(tp.listRoles.name,new Q(!0,[]));V.set(tp.addRole.name,new Q(!0,[]));V.set(tp.alterRole.name,new Q(!0,[]));V.set(tp.dropRole.name,new Q(!0,[]));V.set(Oie.name,new Q(!0,[]));V.set(Nie.name,new Q(!0,[]));V.set(bie.name,new Q(!0,[]));V.set(yie.name,new Q(!0,[]));V.set(Iie.name,new Q(!0,[]));V.set(wie.name,new Q(!0,[]));V.set(oO.setRoutes.name,new Q(!0,[]));V.set(oO.getRoutes.name,new Q(!0,[]));V.set(oO.deleteRoutes.name,new Q(!0,[]));V.set(fq.setConfiguration.name,new Q(!0,[]));V.set(Cie.clusterStatus.name,new Q(!0,[]));V.set(Lie.name,new Q(!0,[]));V.set(aO.getFingerprint.name,new Q(!0,[]));V.set(aO.setLicense.name,new Q(!0,[]));V.set(iO.deleteFilesBefore.name,new Q(!0,[]));V.set(iO.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(lq.restart.name,new Q(!0,[]));V.set(lq.restartService.name,new Q(!0,[]));V.set(Rie.name,new Q(!0,[]));V.set(Aie.name,new Q(!0,[Ri]));V.set(Pie.systemInformation.name,new Q(!0,[]));V.set(fq.getConfiguration.name,new Q(!0,[]));V.set(Eq.readTransactionLog.name,new Q(!0,[]));V.set(Eq.deleteTransactionLogsBefore.name,new Q(!0,[]));V.set(hq.installModules.name,new Q(!0,[]));V.set(hq.auditModules.name,new Q(!0,[]));V.set(_q.createTokens.name,new Q(!1,[]));V.set(_q.refreshOperationToken.name,new Q(!1,[]));V.set(dq.login.name,new Q(!1,[]));V.set(dq.logout.name,new Q(!1,[]));V.set(En.customFunctionsStatus.name,new Q(!0,[]));V.set(En.getCustomFunctions.name,new Q(!0,[]));V.set(En.getComponents.name,new Q(!0,[]));V.set(En.getComponentFile.name,new Q(!0,[]));V.set(En.setComponentFile.name,new Q(!0,[]));V.set(En.dropComponent.name,new Q(!0,[]));V.set(En.getCustomFunction.name,new Q(!0,[]));V.set(En.setCustomFunction.name,new Q(!0,[]));V.set(En.dropCustomFunction.name,new Q(!0,[]));V.set(En.addComponent.name,new Q(!0,[]));V.set(En.dropCustomFunctionProject.name,new Q(!0,[]));V.set(En.packageComponent.name,new Q(!0,[]));V.set(En.deployComponent.name,new Q(!0,[]));V.set(aO.getRegistrationInfo.name,new Q(!1,[]));V.set(H_.userInfo.name,new Q(!1,[]));V.set(B_.describeAll.name,new Q(!1,[]));V.set(vie,new Q(!1,[]));V.set(Bie,new Q(!0,[]));V.set(Uie,new Q(!0,[]));V.set(rp.CSV_DATA_LOAD,new Q(!1,[mo,La]));V.set(rp.CSV_URL_LOAD,new Q(!1,[mo,La]));V.set(rp.CSV_FILE_LOAD,new Q(!1,[mo,La]));V.set(rp.IMPORT_FROM_S3,new Q(!1,[mo,La]));V.set(gq.EXPORT_TO_S3,new Q(!0,[]));V.set(gq.EXPORT_LOCAL,new Q(!0,[]));V.set(Hn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[Sq]));V.set(Hn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[Ri]));V.set(Hn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[mo]));V.set(Hn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[La]));Aq.exports={verifyPerms:Gie,verifyPermsAst:qie,verifyBulkLoadAttributePerms:Fie};function qie(e,t,r){if(gi.isEmptyOrZeroLength(e))throw Bt.info("verify_perms_ast has an empty user parameter"),Gr(new Error);if(gi.isEmptyOrZeroLength(t))throw Bt.info("verify_perms_ast has an empty user parameter"),Gr(new Error);if(gi.isEmptyOrZeroLength(r))throw Bt.info("verify_perms_ast has a null operation parameter"),Gr(new Error);try{let n=new pq,s=new Die(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."),Gr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&Tq[r])throw Gr(new Error,Xt.DROP_SYSTEM,U_.FORBIDDEN);if(c&&!l)return null;let _=uq.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Mie.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=lO(t.role.permission,f,d[E]);cO(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Gr(n)}}a(qie,"verifyPermsAst");function Gie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Bt.info("null required parameter in verifyPerms"),Gr(new Error,Xt.DEFAULT_INVALID_REQUEST,U_.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 pq;if(gi.isEmptyOrZeroLength(e.hdb_user.role)||gi.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(Hn.SYSTEM_SCHEMA_NAME)||s===Hn.SYSTEM_SCHEMA_NAME;if(u&&Tq[r])throw Gr(new Error,Xt.DROP_SYSTEM,U_.FORBIDDEN);if(l&&!u||_===!0&&(r===qn.createSchema.name||r===qn.dropSchema.name))return null;if(Hie.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=uq.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===aq||r===cq){if(s===Hn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Xt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===aq&&(!d[s]||!d[s][v_]))return c.handleInvalidItem(Xt.SCHEMA_NOT_FOUND(s));if(r===cq&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][v_]))return c.handleInvalidItem(Xt.TABLE_NOT_FOUND(s,i))}}let f=Rq(e.hdb_user,r,o,c,n);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Hn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Hn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[Hn.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=m)}let E=xie(e),h=lO(e.hdb_user.role.permission,s,i);return cO(E,h,r,i,s,c,n),c.getPermsResponse()}a(Gie,"verifyPerms");function Rq(e,t,r,n,s){if(gi.arrayHasEmptyValues([e,t,r]))throw Bt.info("hasPermissions has an invalid parameter"),Gr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Bt.info(`operation ${t} not found.`),Gr(new Error,Xt.OP_NOT_FOUND(t),U_.BAD_REQUEST);if(V.get(t)&&V.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][v_]===!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[v_]===!1)n.addInvalidItem(Xt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=V.get(t).perms;!gi.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),Gr(mq.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(Rq,"hasPermissions");function cO(e,t,r,n,s,i,o){if(!e||!t)throw Bt.info("no attributes specified in checkAttributePerms."),Gr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Bt.info(`no permissions found for ${r} in checkAttributePerms().`),Gr(new Error);if(gi.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[v_]===!1){i.addInvalidItem(Xt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Hn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ri)throw Gr(new Error,Xt.SYSTEM_TIMESTAMP_PERMS_ERR,U_.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(cO,"checkAttributePerms");function xie(e){let t=new Set;try{if(e.action)return t;if(e.operation===Hn.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(xie,"getRecordAttributes");function lO(e,t,r){let n=new Map;if(gi.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(lO,"getAttributePermissions");function Fie(e,t,r,n,s,i,o){let c=new Set(i),l=lO(e,n,s);cO(c,l,t,s,n,o,r)}a(Fie,"verifyBulkLoadAttributePerms")});var ip=T((ENe,Iq)=>{"use strict";Iq.exports={evaluateSQL:eoe,processAST:yq,convertSQLToAST:bq,checkASTPermissions:Nq};var kie=br(),Oq=require("util"),$ie=Oq.callbackify(kie.insert),Vie=nr().search,Yie=yU().update,Kie=Oq.callbackify(Yie),Wie=wU().convertDelete,So=require("alasql"),Qie=np(),sp=x(),jie=Wf(),zie=K(),q_=C(),{hdb_errors:Jie,handleHDBError:uO}=ie(),{HTTP_STATUS_CODES:_O}=Jie;jie(So);var Xie=403,Zie="There was a problem performing this insert. Please check the logs and try again.",dO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function eoe(e,t){let r=e.parsed_sql_object;if(!r){r=bq(e.sql);let n,s=r.ast.statements[0];if(s instanceof So.yy.Insert?n=s.into.databaseid:s instanceof So.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof So.yy.Update||s instanceof So.yy.Delete?n=s.table.databaseid:sp.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof So.yy.Select)&&zie.isEmptyOrZeroLength(n))return t("No schema specified",null)}yq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(eoe,"evaluateSQL");function Nq(e,t){let r;try{r=Qie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(Nq,"checkASTPermissions");function bq(e){let t=new dO;if(!e)throw uO(new Error,"The 'sql' parameter is missing from the request body",_O.BAD_REQUEST);try{let r=e.trim(),n=So.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
18
- `);throw n[1]?uO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,_O.BAD_REQUEST):uO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",_O.BAD_REQUEST)}return t}a(bq,"convertSQLToAST");function yq(e,t,r){try{let n=toe;if(!e.bypass_auth&&!t.permissions_checked){let i=Nq(e,t);if(i&&i.length>0)return r(Xie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=Vie,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=roe;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=Kie;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=Wie;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(yq,"processAST");function toe(e,t){sp.info(e),t("unknown sql statement")}a(toe,"nullFunction");function roe({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=noe(i,e.values)}catch(o){return r(o)}$ie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){sp.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(roe,"convertInsert");function noe(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]]=So.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw sp.error(r),new Error(Zie)}}a(noe,"createDataObjects")});var fO=T((pNe,Cq)=>{"use strict";var{S3:soe,GetObjectCommand:ioe}=require("@aws-sdk/client-s3");Cq.exports={getFileStreamFromS3:ooe,getS3AuthObj:wq};async function ooe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await wq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new ioe(r))).Body}a(ooe,"getFileStreamFromS3");function wq(e,t,r){return new soe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(wq,"getS3AuthObj")});var op=T((SNe,qq)=>{"use strict";var hO=nr(),aoe=ip(),coe=fO(),{AsyncParser:loe,Transform:uoe}=require("json2csv"),x_=require("stream"),hn=K(),EO=require("fs-extra"),_oe=require("path"),Gn=x(),{promisify:Pq}=require("util"),G_=K(),{handleHDBError:Nt,hdb_errors:doe}=ie(),{HDB_ERROR_MSGS:xr,HTTP_STATUS_CODES:bt}=doe,{streamAsJSON:foe}=(aR(),oe(RU)),{Upload:Eoe}=require("@aws-sdk/lib-storage"),Lq=["search_by_value","search_by_hash","sql","search_by_conditions"],Dq=["json","csv"],Mq="json",Uq="csv",hoe="Successfully exported JSON locally.",poe="Successfully exported CSV locally.",moe=1e3,Soe=hO.searchByHash,Toe=hO.searchByValue,goe=Pq(aoe.evaluateSQL),Roe=Pq(x_.finished);qq.exports={export_to_s3:boe,export_local:Aoe,toCsvStream:vq};async function Aoe(e){Gn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Bq(e);if(!hn.isEmpty(t))throw Gn.error(t),Nt(new Error,t,bt.BAD_REQUEST,void 0,void 0,!0);if(hn.isEmpty(e.path))throw Gn.error(xr.MISSING_VALUE("path")),Nt(new Error,xr.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(_oe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hn.buildFolderPath(e.path,r);await Ooe(e.path);let s=await Hq(e);return await Noe(n,e.format,s)}a(Aoe,"export_local");async function Ooe(e){if(Gn.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 EO.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,Gn.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 Gn.error(r),Nt(new Error,r,bt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Ooe,"confirmPath");async function Noe(e,t,r){if(Gn.trace("in saveToLocal"),G_.isEmptyOrZeroLength(e))throw Nt(new Error,xr.INVALID_VALUE("file_path"),bt.BAD_REQUEST,void 0,void 0,!0);if(G_.isEmptyOrZeroLength(t))throw Nt(new Error,xr.INVALID_VALUE("Source format"),bt.BAD_REQUEST,void 0,void 0,!0);if(G_.isEmpty(r))throw Nt(new Error,xr.NOT_FOUND("Data"),bt.BAD_REQUEST,void 0,void 0,!0);if(t===Mq){let n=EO.createWriteStream(e);return foe(r).pipe(n),await Roe(n),{message:hoe,path:e}}else if(t===Uq){let n=EO.createWriteStream(e),s=x_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new loe(i,c).fromInput(s).toOutput(n).promise(!1),{message:poe,path:e}}throw Nt(new Error,xr.INVALID_VALUE("format"),bt.BAD_REQUEST)}a(Noe,"saveToLocal");async function boe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Nt(new Error,xr.MISSING_VALUE("S3 object"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Nt(new Error,xr.MISSING_VALUE("aws_access_key_id"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Nt(new Error,xr.MISSING_VALUE("aws_secret_access_key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.bucket))throw Nt(new Error,xr.MISSING_VALUE("bucket"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.key))throw Nt(new Error,xr.MISSING_VALUE("key"),bt.BAD_REQUEST);if(hn.isEmptyOrZeroLength(e.s3.region))throw Nt(new Error,xr.MISSING_VALUE("region"),bt.BAD_REQUEST);let t=Bq(e);if(!hn.isEmpty(t))throw Nt(new Error,t,bt.BAD_REQUEST);Gn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Hq(e)}catch(l){throw Gn.error(l),l}let n,s=await coe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new x_.PassThrough;if(e.format===Uq){i=e.s3.key+".csv";let l=vq(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===Mq){i=e.s3.key+".json";let l=new x_.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%moe===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Nt(new Error,xr.INVALID_VALUE("format"),bt.BAD_REQUEST);return new Eoe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(boe,"export_to_s3");function vq(e,t){let r=x_.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 uoe(n,s);return r.pipe(i)}a(vq,"toCsvStream");function Bq(e){if(Gn.trace("in exportCoreValidation"),hn.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(hn.isEmpty(t))return"search_operation.operation missing";if(Lq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Lq.join(", ")}`}a(Bq,"exportCoreValidation");async function Hq(e){Gn.trace("in getRecords");let t,r;if(G_.isEmpty(e.search_operation)||G_.isEmptyOrZeroLength(e.search_operation.operation))throw Nt(new Error,xr.INVALID_VALUE("Search operation"),bt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Toe;break;case"search_by_hash":t=Soe;break;case"search_by_conditions":t=hO.searchByConditions;break;case"sql":t=goe;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Gn.error(r),Nt(new Error,r,bt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Hq,"getRecords")});var Kq={};$e(Kq,{contentTypes:()=>gO,findBestSerializer:()=>cp,getDeserializer:()=>Pa,registerContentHandlers:()=>RO,serialize:()=>lp,serializeMessage:()=>po});function yoe(e){try{return e?.[0]===123?TO(e):e}catch{return e}}function RO(e){e.register(woe,{serializers:[{regex:/^application\/json$/,serializer:ju},{regex:/^application\/cbor$/,serializer:function(t){return new Da.EncoderStream(k_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?ap.Readable.from((0,Gs.encodeIter)(t,k_)):(0,Gs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pO.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Gs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Da.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function cp(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=Kt.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(Kt.keys()).join(", "))}};n=Kt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function lp(e,t,r){let n=xq&&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=cp(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,Ai.createBrotliCompress)({params:{[Ai.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ai.constants.BROTLI_MODE_TEXT:Ai.constants.BROTLI_MODE_GENERIC,[Ai.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>xq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ai.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function po(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return F_(e);let r=t.serialize;if(r)return r(e);let n=cp(t);return r=t.serialize=n.serializer.serialize,r(e)}function Coe(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 Pa(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Kt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Kt.get(e)?.deserialize||Fq(e,n);return o=>Coe(o).then(i)}return e&&Kt.get(e)?.deserialize||Fq(e,n)}function Fq(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 TO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Loe(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 pO,Gs,Da,Ai,ap,kq,mO,SO,$q,Vq,F_,TO,k_,Kt,gO,Gq,Yq,Ioe,woe,xq,Wc=Ne(()=>{aR();pO=q(op()),Gs=require("msgpackr"),Da=require("cbor-x"),Ai=require("zlib"),ap=require("stream");mr();kq=require("../index"),mO=q(X()),SO=q(C()),$q=q(require("yaml")),Vq=mO.default.get(SO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,F_=Vq?ha:JSON.stringify,TO=Vq?oR:JSON.parse,k_={useRecords:!1,useToJSON:!0},Kt=new Map,gO=Kt;it.contentTypes=gO;(0,kq._assignPackageExport)("contentTypes",gO);Kt.set("application/json",{serializeStream:ju,serialize:F_,deserialize:TO,q:.8});Gq=new Da.Encoder(k_);Kt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Da.EncoderStream(k_).end(e)},serialize:Gq.encode,deserialize:Gq.decode,q:1});Kt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?ap.Readable.from((0,Gs.encodeIter)(e,k_)):(0,Gs.pack)(e)},serialize:Gs.pack,deserialize:Gs.unpack,q:.9});Kt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,pO.toCsvStream)(e,e?.getColumns?.())},q:.1});Kt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Kt.set("text/yaml",{serialize(e){return $q.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Kt.set("text/event-stream",{serializeStream:function(e){return ap.Readable.from(Loe(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
- `),e.data){let r=e.data;typeof r=="object"&&(r=F_(r)),t+="data: "+r+`
16
+ `,""):null}catch(f){f.stderr?i[l].npm_error=MH(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 zc.info(`finished installModules with response ${i}`),i}a(Hse,"installModules");function MH(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(MH,"parseNPMStdErr");async function Gse(e){zc.info(`starting auditModules for request: ${e}`);let t=vH(e);if(t)throw Qc(t,t.message,jc.BAD_REQUEST);let{projects:r}=e;await Qh(),await UH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Wh.join(jA,o);n[o]={npm_output:null,npm_error:null};try{let l=await U_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=MH(l.stderr)}}return zc.info(`finished auditModules with response ${n}`),n}a(Gse,"auditModules");async function Qh(){try{return await U_("npm -v"),!0}catch{throw Qc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",jc.BAD_REQUEST,void 0,void 0,!0)}}a(Qh,"checkNPMInstalled");async function UH(e){if(!Array.isArray(e)||e.length===0)throw Qc(new Error,"projects argument must be an array with at least 1 element",jc.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=Wh.join(jA,i.toString());if(!await LH.pathExists(o)){t.push(i);continue}let l=Wh.join(o,"package.json");await LH.pathExists(l)||r.push(i)}if(t.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,jc.BAD_REQUEST,void 0,void 0,!0)}a(UH,"checkProjectPaths");function vH(e){let t=Kh.object({projects:Kh.array().min(1).items(Kh.string()).required(),dry_run:Kh.boolean().default(!1)});return Pse.validateBySchema(e,t)}a(vH,"modulesValidator")});var JA=g((ZOe,FH)=>{"use strict";var Jc=require("fs-extra"),zA=require("path"),zh=x(),HH=K(),Jh=C(),xH=X(),qse=ht();FH.exports=xse;async function xse(){let e=Fse(),t=xH.get(Jh.CONFIG_PARAMS.ROOTPATH),r=zA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Jh.PACKAGE_ROOT}},s=zA.join(t,"node_modules");await Jc.ensureDir(s);let i,o=!0,c=!1;try{i=await Jc.readJson(r)}catch(l){if(HH.isEmptyOrZeroLength(e))return;if(l.code!==Jh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!HH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await GH(_);n.dependencies[l]=u+_}if(!o){zh.notify("Installing components"),await qH(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&&(zh.notify("Removing component",l),c=!0);c&&(zh.notify("Updating components."),await qH(r,n,i))}a(xse,"installComponents");function Fse(){let e=qse.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Fse,"getComponentsConfig");async function GH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":zA.extname(e)||await Jc.pathExists(e)?"file:":"github:"}a(GH,"getPkgPrefix");async function qH(e,t,r){zh.trace("npm installing components package.json",t),await Jc.writeFile(e,JSON.stringify(t,null," "));try{await jh().installAllRootModules(xH.get(Jh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Jc.writeFile(e,JSON.stringify(r,null," ")):await Jc.unlink(e),n}}a(qH,"installPackages")});var Xh=g((rbe,YH)=>{"use strict";var Ye=require("fs-extra"),XA=require("fast-glob"),Re=require("path"),$H=require("tar-fs"),tbe=require("uuid").v4,ZA=require("normalize-path"),qs=CH(),Bt=x(),Je=C(),yt=X(),v_=ht(),kse=K(),{PACKAGE_ROOT:$se}=C(),{handleHDBError:Kt,hdb_errors:Vse}=ie(),{basename:Yse}=require("path"),Kse=JA(),VH=X(),Wse=C(),{Readable:Qse}=require("stream"),{isMainThread:jse}=require("worker_threads"),{HDB_ERROR_MSGS:Ca,HTTP_STATUS_CODES:Wt}=Vse,zse=Re.join($se,"application-template"),kH=Re.join(yt.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Jse(){Bt.trace("getting custom api status");let e={};try{e={port:yt.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Kt(new Error,Ca.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,t)}return e}a(Jse,"customFunctionsStatus");function Xse(){Bt.trace("getting custom api endpoints");let e={},t=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{XA.sync(ZA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:XA.sync(ZA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:XA.sync(ZA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Kt(new Error,Ca.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,r)}return e}a(Xse,"getCustomFunctions");function Zse(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("getting custom api endpoint file content");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Re.join(r,n,s,i+".js");try{return Ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw Kt(new Error,Ca.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(Zse,"getCustomFunction");function eie(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=qs.setCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("setting custom function file content");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ye.outputFileSync(Re.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Kt(new Error,Ca.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(eie,"setCustomFunction");function tie(e){e.project&&(e.project=Re.parse(e.project).name),e.file&&(e.file=Re.parse(e.file).name);let t=qs.getDropCustomFunctionValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("dropping custom function file");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ye.unlinkSync(Re.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Kt(new Error,Ca.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,o)}}a(tie,"dropCustomFunction");function rie(e){e.project&&(e.project=Re.parse(e.project).name);let t=qs.addComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("adding component");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Re.join(r,n);return Ye.mkdirSync(s,{recursive:!0}),Ye.copySync(zse,s),`Successfully added project: ${n}`}catch(s){throw Kt(new Error,Ca.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,s)}}a(rie,"addComponent");function nie(e){e.project&&(e.project=Re.parse(e.project).name);let t=qs.dropCustomFunctionProjectValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);Bt.trace("dropping custom function project");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=yt.get(Je.CONFIG_PARAMS.APPS);if(!kse.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 v_.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Re.join(r,n);return Ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Kt(new Error,Ca.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Bt.ERR,i)}}a(nie,"dropCustomFunctionProject");async function sie(e){e.project&&(e.project=Re.parse(e.project).name);let t=qs.packageComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Bt.trace("packaging component",n);let s;try{s=await Ye.realpath(Re.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ye.realpath(Re.join(yt.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(kH);let i=Re.join(kH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Re.join(s,"node_modules"))}),$H.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(sie,"packageComponent");async function iie(e){e.project&&(e.project=Re.parse(e.project).name);let t=qs.deployComponentValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Bt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Re.join(r,n),i="file:"+o,await Ye.ensureDir(o);let f=Qse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{f.pipe($H.extract(o,{finish:h})).on("error",m)});let E=await Ye.readdir(o);E.length===1&&E[0]==="package"&&(await Ye.copy(Re.join(o,"package"),o),await Ye.remove(Re.join(o,"package")))}if(await v_.addConfig(n,{package:i}),!s){await Kse();let f=VH.get(Wse.CONFIG_PARAMS.ROOTPATH);o=Re.join(f,"node_modules",n)}if(jse)return;let c=new Map;c.isWorker=!0;let l=(ep(),oe(Zh)),_;l.setErrorReporter(f=>_=f);let u=Yse(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Bt.info("Installed component"),`Successfully deployed: ${n}`}a(iie,"deployComponent");async function oie(){let e=v_.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=Re.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:Re.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return Bt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(Re.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Re.join(yt.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(ep(),oe(Zh)).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(oie,"getComponents");async function aie(e){let t=qs.getComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let n=v_.getConfigObj()[e.project]||e.project==="harperdb"?Re.join(VH.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ye.stat(Re.join(n,e.project,e.file));return{message:await Ye.readFile(Re.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 '${Re.join(e.project,e.file)}'`):i}}a(aie,"getComponentFile");async function cie(e){let t=qs.setComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Re.join(yt.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(cie,"setComponentFile");async function lie(e){let t=qs.dropComponentFileValidator(e);if(t)throw Kt(t,t.message,Wt.BAD_REQUEST);let r=e.file?Re.join(e.project,e.file):e.project,n=Re.join(yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ye.pathExists(n)&&await Ye.remove(n),v_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(lie,"dropComponent");YH.exports={customFunctionsStatus:Jse,getCustomFunctions:Xse,getCustomFunction:Zse,setCustomFunction:eie,dropCustomFunction:tie,addComponent:rie,dropCustomFunctionProject:nie,packageComponent:sie,deployComponent:iie,getComponents:oie,getComponentFile:aie,setComponentFile:cie,dropComponent:lie}});var eO=g((sbe,WH)=>{"use strict";var xs=require("joi"),KH=rt();WH.exports={readTransactionLogValidator:uie,deleteTransactionLogsBeforeValidator:_ie};function uie(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),from:xs.date().timestamp(),to:xs.date().timestamp(),limit:xs.number().min(1)});return KH.validateBySchema(e,t)}a(uie,"readTransactionLogValidator");function _ie(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),timestamp:xs.date().timestamp().required()});return KH.validateBySchema(e,t)}a(_ie,"deleteTransactionLogsBeforeValidator")});var rp=g((obe,XH)=>{"use strict";var tO=C(),tp=pt(),QH=K(),jH=X(),zH=_i(),{handleHDBError:Xc,hdb_errors:die}=ie(),{HTTP_STATUS_CODES:Zc}=die,{readTransactionLogValidator:fie,deleteTransactionLogsBeforeValidator:Eie}=eO(),JH="This operation relies on clustering and cannot run with it disable.",hie="Logs successfully deleted from transaction log.",pie="All logs successfully deleted from transaction log.";XH.exports={readTransactionLog:mie,deleteTransactionLogsBefore:Sie};async function*mie(e){let t=fie(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!jH.get(tO.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,JH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=QH.checkSchemaTableExist(r,n);if(s)throw Xc(new Error,s,Zc.NOT_FOUND,void 0,void 0,!0);let i=zH.createNatsTableStreamName(r,n),o=await tp.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===tO.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(mie,"readTransactionLog");async function Sie(e){let t=Eie(e);if(t)throw Xc(t,t.message,Zc.BAD_REQUEST,void 0,void 0,!0);if(!jH.get(tO.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xc(new Error,JH,Zc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=QH.checkSchemaTableExist(r,n);if(i)throw Xc(new Error,i,Zc.NOT_FOUND,void 0,void 0,!0);let o=zH.createNatsTableStreamName(r,n),{jsm:c}=await tp.getNATSReferences(),l=await tp.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=hie,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=pie):d=(await tp.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Sie,"deleteTransactionLogsBefore")});var eG=g((cbe,ZH)=>{"use strict";var rO=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}};ZH.exports=rO});var rG=g((ube,tG)=>{"use strict";var nO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};tG.exports=nO});var iO=g((dbe,sG)=>{"use strict";var nG=eG(),Tie=rG(),{HDB_ERROR_MSGS:gie}=Qr(),sO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=gie.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 nG(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Tie(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 nG(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}};sG.exports=sO});var op=g((Ebe,gG)=>{"use strict";var oO=wr(),np=ir(),Fn=XE(),G_=Zi(),aO=na(),Rie=DR(),Aie=Tv(),q_=Lr(),sp=rh(),Ht=x(),Oie=kR(),bie=E_(),Nie=gA(),yie=mh(),Iie=Th(),wie=AA(),Cie=Ah(),Lie=bh(),cO=yh(),Ai=K(),Die=hB(),lO=wh(),aG=ya(),xn=C(),cG=EH(),Pie=Ei(),lG=u_(),uG=(Vh(),oe(L_)),_G=ht(),pn=Xh(),Mie=require("alasql"),dG=rp(),fG=jh(),EG=iO(),{handleHDBError:Fr,hdb_errors:hG}=ie(),{HDB_ERROR_MSGS:er,HTTP_STATUS_CODES:B_}=hG,V=new Map,pG="delete",To="insert",Oi="read",La="update",H_="describe",iG=G_.describeSchema.name,oG=G_.describeTable.name,mG={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Uie="catchup",vie="handleGetJob",Bie="handleGetJobsByStartDate",ip={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Hie=[Fn.createTable.name,Fn.createAttribute.name,Fn.dropTable.name,Fn.dropAttribute.name],SG={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(oO.insert.name,new Q(!1,[To]));V.set(oO.update.name,new Q(!1,[La]));V.set(oO.upsert.name,new Q(!1,[To,La]));V.set(np.searchByConditions.name,new Q(!1,[Oi]));V.set(np.searchByHash.name,new Q(!1,[Oi]));V.set(np.searchByValue.name,new Q(!1,[Oi]));V.set(np.search.name,new Q(!1,[Oi]));V.set(Fn.createSchema.name,new Q(!0,[]));V.set(Fn.createTable.name,new Q(!0,[]));V.set(Fn.createAttribute.name,new Q(!1,[To]));V.set(Fn.dropSchema.name,new Q(!0,[]));V.set(Fn.dropTable.name,new Q(!0,[]));V.set(Fn.dropAttribute.name,new Q(!0,[]));V.set(G_.describeSchema.name,new Q(!1,[Oi]));V.set(G_.describeTable.name,new Q(!1,[Oi]));V.set(aO.deleteRecord.name,new Q(!1,[pG]));V.set(q_.addUser.name,new Q(!0,[]));V.set(q_.alterUser.name,new Q(!0,[]));V.set(q_.dropUser.name,new Q(!0,[]));V.set(q_.listUsersExternal.name,new Q(!0,[]));V.set(sp.listRoles.name,new Q(!0,[]));V.set(sp.addRole.name,new Q(!0,[]));V.set(sp.alterRole.name,new Q(!0,[]));V.set(sp.dropRole.name,new Q(!0,[]));V.set(Oie.name,new Q(!0,[]));V.set(bie.name,new Q(!0,[]));V.set(Nie.name,new Q(!0,[]));V.set(yie.name,new Q(!0,[]));V.set(Iie.name,new Q(!0,[]));V.set(wie.name,new Q(!0,[]));V.set(cO.setRoutes.name,new Q(!0,[]));V.set(cO.getRoutes.name,new Q(!0,[]));V.set(cO.deleteRoutes.name,new Q(!0,[]));V.set(_G.setConfiguration.name,new Q(!0,[]));V.set(Cie.clusterStatus.name,new Q(!0,[]));V.set(Lie.name,new Q(!0,[]));V.set(lO.getFingerprint.name,new Q(!0,[]));V.set(lO.setLicense.name,new Q(!0,[]));V.set(aO.deleteFilesBefore.name,new Q(!0,[]));V.set(aO.deleteAuditLogsBefore.name,new Q(!0,[]));V.set(aG.restart.name,new Q(!0,[]));V.set(aG.restartService.name,new Q(!0,[]));V.set(Rie.name,new Q(!0,[]));V.set(Aie.name,new Q(!0,[Oi]));V.set(Pie.systemInformation.name,new Q(!0,[]));V.set(_G.getConfiguration.name,new Q(!0,[]));V.set(dG.readTransactionLog.name,new Q(!0,[]));V.set(dG.deleteTransactionLogsBefore.name,new Q(!0,[]));V.set(fG.installModules.name,new Q(!0,[]));V.set(fG.auditModules.name,new Q(!0,[]));V.set(lG.createTokens.name,new Q(!1,[]));V.set(lG.refreshOperationToken.name,new Q(!1,[]));V.set(uG.login.name,new Q(!1,[]));V.set(uG.logout.name,new Q(!1,[]));V.set(pn.customFunctionsStatus.name,new Q(!0,[]));V.set(pn.getCustomFunctions.name,new Q(!0,[]));V.set(pn.getComponents.name,new Q(!0,[]));V.set(pn.getComponentFile.name,new Q(!0,[]));V.set(pn.setComponentFile.name,new Q(!0,[]));V.set(pn.dropComponent.name,new Q(!0,[]));V.set(pn.getCustomFunction.name,new Q(!0,[]));V.set(pn.setCustomFunction.name,new Q(!0,[]));V.set(pn.dropCustomFunction.name,new Q(!0,[]));V.set(pn.addComponent.name,new Q(!0,[]));V.set(pn.dropCustomFunctionProject.name,new Q(!0,[]));V.set(pn.packageComponent.name,new Q(!0,[]));V.set(pn.deployComponent.name,new Q(!0,[]));V.set(lO.getRegistrationInfo.name,new Q(!1,[]));V.set(q_.userInfo.name,new Q(!1,[]));V.set(G_.describeAll.name,new Q(!1,[]));V.set(vie,new Q(!1,[]));V.set(Bie,new Q(!0,[]));V.set(Uie,new Q(!0,[]));V.set(ip.CSV_DATA_LOAD,new Q(!1,[To,La]));V.set(ip.CSV_URL_LOAD,new Q(!1,[To,La]));V.set(ip.CSV_FILE_LOAD,new Q(!1,[To,La]));V.set(ip.IMPORT_FROM_S3,new Q(!1,[To,La]));V.set(SG.EXPORT_TO_S3,new Q(!0,[]));V.set(SG.EXPORT_LOCAL,new Q(!0,[]));V.set(xn.VALID_SQL_OPS_ENUM.DELETE,new Q(!1,[pG]));V.set(xn.VALID_SQL_OPS_ENUM.SELECT,new Q(!1,[Oi]));V.set(xn.VALID_SQL_OPS_ENUM.INSERT,new Q(!1,[To]));V.set(xn.VALID_SQL_OPS_ENUM.UPDATE,new Q(!1,[La]));gG.exports={verifyPerms:qie,verifyPermsAst:Gie,verifyBulkLoadAttributePerms:Fie};function Gie(e,t,r){if(Ai.isEmptyOrZeroLength(e))throw Ht.info("verify_perms_ast has an empty user parameter"),Fr(new Error);if(Ai.isEmptyOrZeroLength(t))throw Ht.info("verify_perms_ast has an empty user parameter"),Fr(new Error);if(Ai.isEmptyOrZeroLength(r))throw Ht.info("verify_perms_ast has a null operation parameter"),Fr(new Error);try{let n=new EG,s=new Die(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ht.info("No schemas defined in verifyPermsAst(), will not continue."),Fr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&mG[r])throw Fr(new Error,er.DROP_SYSTEM,B_.FORBIDDEN);if(c&&!l)return null;let _=cG.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Mie.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=TG(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=_O(t.role.permission,f,d[E]);uO(h,m,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Fr(n)}}a(Gie,"verifyPermsAst");function qie(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ht.info("null required parameter in verifyPerms"),Fr(new Error,er.DEFAULT_INVALID_REQUEST,B_.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 EG;if(Ai.isEmptyOrZeroLength(e.hdb_user.role)||Ai.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ht.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(er.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(xn.SYSTEM_SCHEMA_NAME)||s===xn.SYSTEM_SCHEMA_NAME;if(u&&mG[r])throw Fr(new Error,er.DROP_SYSTEM,B_.FORBIDDEN);if(l&&!u||_===!0&&(r===Fn.createSchema.name||r===Fn.dropSchema.name))return null;if(Hie.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=cG.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===iG||r===oG){if(s===xn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(er.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===iG&&(!d[s]||!d[s][H_]))return c.handleInvalidItem(er.SCHEMA_NOT_FOUND(s));if(r===oG&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][H_]))return c.handleInvalidItem(er.TABLE_NOT_FOUND(s,i))}}let f=TG(e.hdb_user,r,o,c,n);if(f)return f;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&xn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[xn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[xn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=m)}let E=xie(e),h=_O(e.hdb_user.role.permission,s,i);return uO(E,h,r,i,s,c,n),c.getPermsResponse()}a(qie,"verifyPerms");function TG(e,t,r,n,s){if(Ai.arrayHasEmptyValues([e,t,r]))throw Ht.info("hasPermissions has an invalid parameter"),Fr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw Ht.info(`operation ${t} not found.`),Fr(new Error,er.OP_NOT_FOUND(t),B_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return Ht.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(er.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][H_]===!1){n.addInvalidItem(er.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(er.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[H_]===!1)n.addInvalidItem(er.TABLE_NOT_FOUND(l,u));else try{let f=[],E=V.get(t).perms;!Ai.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)&&(Ht.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=er.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Ht.error(E),Ht.error(f),Fr(hG.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(TG,"hasPermissions");function uO(e,t,r,n,s,i,o){if(!e||!t)throw Ht.info("no attributes specified in checkAttributePerms."),Fr(new Error);let c=V.get(r).perms;if(!c||c==="")throw Ht.info(`no permissions found for ${r} in checkAttributePerms().`),Fr(new Error);if(Ai.isEmptyOrZeroLength(t))return Ht.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[H_]===!1){i.addInvalidItem(er.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(xn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Oi)throw Fr(new Error,er.SYSTEM_TIMESTAMP_PERMS_ERR,B_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(er.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(uO,"checkAttributePerms");function xie(e){let t=new Set;try{if(e.action)return t;if(e.operation===xn.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){Ht.info(r)}return t}a(xie,"getRecordAttributes");function _O(e,t,r){let n=new Map;if(Ai.isEmpty(e))return Ht.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{Ht.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(_O,"getAttributePermissions");function Fie(e,t,r,n,s,i,o){let c=new Set(i),l=_O(e,n,s);uO(c,l,t,s,n,o,r)}a(Fie,"verifyBulkLoadAttributePerms")});var cp=g((pbe,NG)=>{"use strict";NG.exports={evaluateSQL:eoe,processAST:bG,convertSQLToAST:OG,checkASTPermissions:AG};var kie=wr(),RG=require("util"),$ie=RG.callbackify(kie.insert),Vie=ir().search,Yie=bU().update,Kie=RG.callbackify(Yie),Wie=yU().convertDelete,go=require("alasql"),Qie=op(),ap=x(),jie=Qf(),zie=K(),x_=C(),{hdb_errors:Jie,handleHDBError:dO}=ie(),{HTTP_STATUS_CODES:fO}=Jie;jie(go);var Xie=403,Zie="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 eoe(e,t){let r=e.parsed_sql_object;if(!r){r=OG(e.sql);let n,s=r.ast.statements[0];if(s instanceof go.yy.Insert?n=s.into.databaseid:s instanceof go.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof go.yy.Update||s instanceof go.yy.Delete?n=s.table.databaseid:ap.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof go.yy.Select)&&zie.isEmptyOrZeroLength(n))return t("No schema specified",null)}bG(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(eoe,"evaluateSQL");function AG(e,t){let r;try{r=Qie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(AG,"checkASTPermissions");function OG(e){let t=new EO;if(!e)throw dO(new Error,"The 'sql' parameter is missing from the request body",fO.BAD_REQUEST);try{let r=e.trim(),n=go.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
18
+ `);throw n[1]?dO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,fO.BAD_REQUEST):dO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",fO.BAD_REQUEST)}return t}a(OG,"convertSQLToAST");function bG(e,t,r){try{let n=toe;if(!e.bypass_auth&&!t.permissions_checked){let i=AG(e,t);if(i&&i.length>0)return r(Xie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case x_.VALID_SQL_OPS_ENUM.SELECT:n=Vie,s=t.ast.statements[0];break;case x_.VALID_SQL_OPS_ENUM.INSERT:n=roe;break;case x_.VALID_SQL_OPS_ENUM.UPDATE:n=Kie;break;case x_.VALID_SQL_OPS_ENUM.DELETE:n=Wie;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(bG,"processAST");function toe(e,t){ap.info(e),t("unknown sql statement")}a(toe,"nullFunction");function roe({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=noe(i,e.values)}catch(o){return r(o)}$ie(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){ap.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(roe,"convertInsert");function noe(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]]=go.compile(`SELECT ${s.toString()} AS [${x_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw ap.error(r),new Error(Zie)}}a(noe,"createDataObjects")});var hO=g((Sbe,IG)=>{"use strict";var{S3:soe,GetObjectCommand:ioe}=require("@aws-sdk/client-s3");IG.exports={getFileStreamFromS3:ooe,getS3AuthObj:yG};async function ooe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await yG(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new ioe(r))).Body}a(ooe,"getFileStreamFromS3");function yG(e,t,r){return new soe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(yG,"getS3AuthObj")});var lp=g((gbe,BG)=>{"use strict";var mO=ir(),aoe=cp(),coe=hO(),{AsyncParser:loe,Transform:uoe}=require("json2csv"),k_=require("stream"),mn=K(),pO=require("fs-extra"),_oe=require("path"),kn=x(),{promisify:LG}=require("util"),F_=K(),{handleHDBError:It,hdb_errors:doe}=ie(),{HDB_ERROR_MSGS:kr,HTTP_STATUS_CODES:wt}=doe,{streamAsJSON:foe}=(lR(),oe(TU)),{Upload:Eoe}=require("@aws-sdk/lib-storage"),wG=["search_by_value","search_by_hash","sql","search_by_conditions"],CG=["json","csv"],DG="json",PG="csv",hoe="Successfully exported JSON locally.",poe="Successfully exported CSV locally.",moe=1e3,Soe=mO.searchByHash,Toe=mO.searchByValue,goe=LG(aoe.evaluateSQL),Roe=LG(k_.finished);BG.exports={export_to_s3:Noe,export_local:Aoe,toCsvStream:MG};async function Aoe(e){kn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=UG(e);if(!mn.isEmpty(t))throw kn.error(t),It(new Error,t,wt.BAD_REQUEST,void 0,void 0,!0);if(mn.isEmpty(e.path))throw kn.error(kr.MISSING_VALUE("path")),It(new Error,kr.MISSING_VALUE("path"),wt.BAD_REQUEST,void 0,void 0,!0);let r=(mn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(_oe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=mn.buildFolderPath(e.path,r);await Ooe(e.path);let s=await vG(e);return await boe(n,e.format,s)}a(Aoe,"export_local");async function Ooe(e){if(kn.trace("in confirmPath"),mn.isEmptyOrZeroLength(e))throw It(new Error,`Invalid path: ${e}`,wt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await pO.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,kn.error(n),It(new Error,n,wt.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 kn.error(r),It(new Error,r,wt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Ooe,"confirmPath");async function boe(e,t,r){if(kn.trace("in saveToLocal"),F_.isEmptyOrZeroLength(e))throw It(new Error,kr.INVALID_VALUE("file_path"),wt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmptyOrZeroLength(t))throw It(new Error,kr.INVALID_VALUE("Source format"),wt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmpty(r))throw It(new Error,kr.NOT_FOUND("Data"),wt.BAD_REQUEST,void 0,void 0,!0);if(t===DG){let n=pO.createWriteStream(e);return foe(r).pipe(n),await Roe(n),{message:hoe,path:e}}else if(t===PG){let n=pO.createWriteStream(e),s=k_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new loe(i,c).fromInput(s).toOutput(n).promise(!1),{message:poe,path:e}}throw It(new Error,kr.INVALID_VALUE("format"),wt.BAD_REQUEST)}a(boe,"saveToLocal");async function Noe(e){if(!e.s3||Object.keys(e.s3).length===0)throw It(new Error,kr.MISSING_VALUE("S3 object"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw It(new Error,kr.MISSING_VALUE("aws_access_key_id"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw It(new Error,kr.MISSING_VALUE("aws_secret_access_key"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.bucket))throw It(new Error,kr.MISSING_VALUE("bucket"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.key))throw It(new Error,kr.MISSING_VALUE("key"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.region))throw It(new Error,kr.MISSING_VALUE("region"),wt.BAD_REQUEST);let t=UG(e);if(!mn.isEmpty(t))throw It(new Error,t,wt.BAD_REQUEST);kn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vG(e)}catch(l){throw kn.error(l),l}let n,s=await coe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new k_.PassThrough;if(e.format===PG){i=e.s3.key+".csv";let l=MG(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===DG){i=e.s3.key+".json";let l=new k_.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%moe===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw It(new Error,kr.INVALID_VALUE("format"),wt.BAD_REQUEST);return new Eoe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Noe,"export_to_s3");function MG(e,t){let r=k_.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 uoe(n,s);return r.pipe(i)}a(MG,"toCsvStream");function UG(e){if(kn.trace("in exportCoreValidation"),mn.isEmpty(e.format))return"format missing";if(CG.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${CG.join(", ")}`;let t=e.search_operation.operation;if(mn.isEmpty(t))return"search_operation.operation missing";if(wG.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${wG.join(", ")}`}a(UG,"exportCoreValidation");async function vG(e){kn.trace("in getRecords");let t,r;if(F_.isEmpty(e.search_operation)||F_.isEmptyOrZeroLength(e.search_operation.operation))throw It(new Error,kr.INVALID_VALUE("Search operation"),wt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Toe;break;case"search_by_hash":t=Soe;break;case"search_by_conditions":t=mO.searchByConditions;break;case"sql":t=goe;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,kn.error(r),It(new Error,r,wt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(vG,"getRecords")});var VG={};Fe(VG,{contentTypes:()=>AO,findBestSerializer:()=>_p,getDeserializer:()=>Pa,registerContentHandlers:()=>OO,serialize:()=>dp,serializeMessage:()=>So});function yoe(e){try{return e?.[0]===123?RO(e):e}catch{return e}}function OO(e){e.register(woe,{serializers:[{regex:/^application\/json$/,serializer:Ju},{regex:/^application\/cbor$/,serializer:function(t){return new Da.EncoderStream(V_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?up.Readable.from((0,Fs.encodeIter)(t,V_)):(0,Fs.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,Fs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Da.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function _p(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=Qt.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(Qt.keys()).join(", "))}};n=Qt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function dp(e,t,r){let n=GG&&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=_p(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,bi.createBrotliCompress)({params:{[bi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?bi.constants.BROTLI_MODE_TEXT:bi.constants.BROTLI_MODE_GENERIC,[bi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>GG?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,bi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function So(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return $_(e);let r=t.serialize;if(r)return r(e);let n=_p(t);return r=t.serialize=n.serializer.serialize,r(e)}function Coe(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 Pa(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Qt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Qt.get(e)?.deserialize||qG(e,n);return o=>Coe(o).then(i)}return e&&Qt.get(e)?.deserialize||qG(e,n)}function qG(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 RO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Loe(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,Fs,Da,bi,up,xG,TO,gO,FG,kG,$_,RO,V_,Qt,AO,HG,$G,Ioe,woe,GG,Wc=Ae(()=>{lR();SO=G(lp()),Fs=require("msgpackr"),Da=require("cbor-x"),bi=require("zlib"),up=require("stream");gr();xG=require("../index"),TO=G(X()),gO=G(C()),FG=G(require("yaml")),kG=TO.default.get(gO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,$_=kG?ha:JSON.stringify,RO=kG?cR:JSON.parse,V_={useRecords:!1,useToJSON:!0},Qt=new Map,AO=Qt;ot.contentTypes=AO;(0,xG._assignPackageExport)("contentTypes",AO);Qt.set("application/json",{serializeStream:Ju,serialize:$_,deserialize:RO,q:.8});HG=new Da.Encoder(V_);Qt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Da.EncoderStream(V_).end(e)},serialize:HG.encode,deserialize:HG.decode,q:1});Qt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?up.Readable.from((0,Fs.encodeIter)(e,V_)):(0,Fs.pack)(e)},serialize:Fs.pack,deserialize:Fs.unpack,q:.9});Qt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,SO.toCsvStream)(e,e?.getColumns?.())},q:.1});Qt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Qt.set("text/yaml",{serialize(e){return FG.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Qt.set("text/event-stream",{serializeStream:function(e){return up.Readable.from(Loe(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
+ `),e.data){let r=e.data;typeof r=="object"&&(r=$_(r)),t+="data: "+r+`
20
20
  `}return e.id&&(t+="id: "+e.id+`
21
21
  `),e.retry&&(t+="retry: "+e.retry+`
22
22
  `),t+`
23
- `}else return typeof e=="object"?`data: ${F_(e)}
23
+ `}else return typeof e=="object"?`data: ${$_(e)}
24
24
 
25
25
  `:`data: ${e}
26
26
 
27
- `},compressible:!1,q:.8});Kt.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:ju,serialize:F_,deserialize:yoe,q:.8};Kt.set("*/*",Yq);Kt.set("",Yq);a(yoe,"tryJSONParse");a(RO,"registerContentHandlers");Ioe=require("fastify-plugin"),woe=Ioe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=cp(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(cp,"findBestSerializer");xq=mO.default.get(SO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(lp,"serialize");a(po,"serializeMessage");a(Coe,"streamToBuffer");a(Pa,"getDeserializer");a(Fq,"deserializerUnknownType");a(Loe,"transformIterable")});function Jq(e){let t={openapi:Doe,info:{title:"HarperDB HTTP REST interface",version:(0,zq.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:A,name:P,elements:v,relationship:U,definition:F}of o){if(U)A==="array"?_[P]={type:"array",items:{$ref:To+v.type}}:_[P]={$ref:To+A};else{let H=F??v?.definition;if(H){if(!t.components.schemas[H.type]){let j={};H.properties.forEach(z=>{j[z.name]=new bO(AO[z.type],z.type)}),t.components.schemas[H.type]=new jq(j)}A==="array"?_[P]={type:"array",items:{$ref:To+H.type}}:_[P]={$ref:To+H.type}}else A==="array"?v.type==="Any"||v.type=="ID"?_[P]={type:"array",items:{format:v.type}}:_[P]={type:"array",items:new bO(AO[v.type],v.type)}:A==="Any"||A=="ID"?_[P]={format:A}:_[P]=new bO(AO[A],A)}u.push(new yO(P,"query",_[P]))}let d=Object.keys(_),f=new yO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new yO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new jq(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",R=typeof l.delete=="function",g="/"+s+"/";h&&(t.paths[g]={},t.paths[g].post=new Poe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new OO(u,r,{200:new NO({$ref:To+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new Qq(u,r,"delete all the records that match the provided query",{204:new Wq})),g="/"+s+"/{"+c+"}",S&&(t.paths[g]={},t.paths[g].get=new OO([f],r,{200:new NO({$ref:To+i})},"retrieve a record by its primary key")),m&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new Moe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new Qq([f],r,"delete a record with the given primary key",{204:new Wq})),S&&E.schema.enum.length>0&&(g="/"+s+"/{"+c+"}.{property}",t.paths[g]={},t.paths[g].get=new OO([f,E],r,{200:new NO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Poe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:To+e}}}},this.security=t,this.responses={200:{description:IO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function OO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function NO(e){this.description=IO,this.content={"application/json":{schema:e}}}function Wq(){this.description="successfully processed request, no content returned to client"}function Moe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:To+r}}}},this.responses={200:{description:IO}}}function Qq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function jq(e){this.type="object",this.properties=e}function bO(e,t){this.type=e,this.format=t}function yO(e,t,r){this.name=e,this.in=t,this.schema=r}var zq,Doe,AO,To,IO,Xq=Ne(()=>{zq=q(Fi()),Doe="3.0.3",AO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},To="#/components/schemas/",IO="successful operation";a(Jq,"generateJsonApi");a(Poe,"Post");a(OO,"Get");a(NO,"Response200");a(Wq,"Response204");a(Moe,"Put");a(Qq,"Delete");a(jq,"ResourceSchema");a(bO,"Type");a(yO,"Parameter")});var _p={};$e(_p,{start:()=>Boe});async function voe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&df(e);let s=new no;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==Zq){let h=up.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=Pa(r["content-type"],!0)(e.body)}catch(h){throw new el.ClientError(h,400)}if(e.authorize=!0,i===Zq&&n==="GET"){if(e?.user?.role?.permission?.super_user)return Jq(up);throw new el.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 el.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new el.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,wO.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),wO.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=lp(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Ma.warn(i):Ma.info(i):Ma.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=lp(i.contentType?i:i.toString(),e,o),o}}function Boe(e){wO=e,!eG&&(eG=!0,up=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return voe(t,r)}),e.server.ws(async(t,r,n)=>{$_++;let s=new Wn;tG||(tG=!0,Pu(u=>{$_>0&&u.push({metric:"ws-connections",connections:$_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Ma.warn(u)});let o;t.on("message",a(function(d){o||(o=Pa(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{$_--,Dn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=up.getMatch(l);if(Dn(!!_,"connection","ws","connect"),!_)t.send(po(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,on(h=>({count:h.count,total:$_}),"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=po(E.value,r);t.send(h),on(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Ma,el,Zt,Uoe,wO,Zq,eG,up,tG,$_,rG=Ne(()=>{Wc();ui();Ma=q(x()),el=q(ie());ff();kl();Vo();Uu();Xq();Zt=new Uint8Array(8),Uoe=new Float64Array(Zt.buffer,0,1),wO={},Zq="openapi";a(voe,"http");$_=0;a(Boe,"start")});var CO=T((MNe,nG)=>{var{recordAction:dp,recordActionBinary:Hoe}=(ui(),oe(Mu)),qoe=require("fastify-plugin"),Goe=200;nG.exports=qoe(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),dp(o,"duration",_,d,u),Hoe(s.raw.statusCode<400,"success",_,d,u);let f=Goe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{dp(performance.now()-c,"transfer",_,d,u),dp(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,dp(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var vO=T((BNe,aG)=>{var pp=require("clone"),mp=rt(),xoe=K(),Ep=C(),UNe=x(),LO=require("fs"),PO=require("joi"),{string:hp}=PO.types(),{hdb_errors:Foe,handleHDBError:fp}=ie(),{HDB_ERROR_MSGS:vNe,HTTP_STATUS_CODES:DO}=Foe,{common_validators:tl}=ys(),sG=" is required",koe=["insert","update","upsert"],MO={database:{presence:!1,format:tl.schema_format,length:tl.schema_length},schema:{presence:!1,format:tl.schema_format,length:tl.schema_length},table:{presence:!0,format:tl.schema_format,length:tl.schema_length},action:{inclusion:{within:koe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},$oe={schema:hp.required(),table:hp.required(),action:hp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Voe,AWS_SECRET:Yoe,AWS_BUCKET:Koe,AWS_FILE_KEY:Woe,REGION:Qoe}=Ep.S3_BUCKET_AUTH_KEYS,joe={s3:{presence:!0},[`s3.${Voe}`]:{presence:!0,type:"String"},[`s3.${Yoe}`]:{presence:!0,type:"String"},[`s3.${Koe}`]:{presence:!0,type:"String"},[`s3.${Woe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Qoe}`]:{presence:!0,type:"String"}},iG=pp(MO);iG.data.presence={message:sG};var oG=pp(MO);oG.file_path.presence={message:sG};var zoe=Object.assign(pp(MO),joe),UO=pp($oe);UO.csv_url=hp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();UO.passthrough_headers=PO.object();function Joe(e){let t=mp.validateObject(e,iG);return Sp(e,t)}a(Joe,"dataObject");function Xoe(e){let t=mp.validateBySchema(e,PO.object(UO));return Sp(e,t)}a(Xoe,"urlObject");function Zoe(e){let t=mp.validateObject(e,oG);return Sp(e,t)}a(Zoe,"fileObject");function eae(e){let t=mp.validateObject(e,zoe);return Sp(e,t)}a(eae,"s3FileObject");function Sp(e,t){if(!t){let r=xoe.checkGlobalSchemaTable(e.schema,e.table);if(r)return fp(new Error,r,DO.BAD_REQUEST);if(e.operation===Ep.OPERATIONS_ENUM.CSV_FILE_LOAD)try{LO.accessSync(e.file_path,LO.constants.R_OK|LO.constants.F_OK)}catch(n){return n.code===Ep.NODE_ERROR_CODES.ENOENT?fp(n,`No such file or directory ${n.path}`,DO.BAD_REQUEST):n.code===Ep.NODE_ERROR_CODES.EACCES?fp(n,`Permission denied ${n.path}`,DO.BAD_REQUEST):fp(n)}}return t}a(Sp,"postValidateChecks");aG.exports={dataObject:Joe,urlObject:Xoe,fileObject:Zoe,s3FileObject:eae}});var BO=T((qNe,cG)=>{"use strict";var V_=x(),Tp=C();async function tae(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===Tp.OPERATIONS_ENUM.INSERT||t.operation===Tp.OPERATIONS_ENUM.UPDATE||t.operation===Tp.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Tp.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(V_.info(i.message),i):i.http_resp_msg?(V_.error(`Error calling operation: ${e.name}`),V_.error(i.http_resp_msg),i):(V_.error(`Error calling operation: ${e.name}`),V_.error(i),i)}}a(tae,"callOperationFunctionAsAwait");cG.exports={callOperationFunctionAsAwait:tae}});var uG=T((xNe,lG)=>{"use strict";var HO=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}},qO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};lG.exports={BulkLoadFileObject:HO,BulkLoadDataObject:qO}});var dG=T((kNe,_G)=>{"use strict";var GO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};_G.exports=GO});var YO=T((QNe,CG)=>{"use strict";var gp=br(),Ap=vO(),rae=require("needle"),_s=C(),VNe=et(),rl=K(),{handleHDBError:lt,hdb_errors:RG}=ie(),{HTTP_STATUS_CODES:er,HDB_ERROR_MSGS:Ht,CHECK_LOGS_WRAPPER:va}=RG,nl=x(),xO=require("papaparse");rl.promisifyPapaParse();var ds=require("fs-extra"),nae=require("path"),{chain:fG}=require("stream-chain"),EG=require("stream-json/streamers/StreamArray"),hG=require("stream-json/utils/Batch"),pG=require("stream-chain/utils/comp"),{finished:mG}=require("stream"),sae=X(),AG=BO(),iae=fO(),{BulkLoadFileObject:kO,BulkLoadDataObject:oae}=uG(),$O=nO(),{verifyBulkLoadAttributePerms:OG}=np(),YNe=dG(),KNe=ht(),WNe=li(),{databases:aae}=(ge(),oe(Fe)),{coerceType:cae}=(OE(),oe(Fg)),SG="No records parsed from csv file.",Ua=`${sae.get("HDB_ROOT")}/tmp`,{schema_regex:lae}=ys(),TG=1024*1024*2,gG=5e3,uae={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};CG.exports={csvDataLoad:_ae,csvURLLoad:dae,csvFileLoad:fae,importFromS3:Eae};async function _ae(e,t){let r=Ap.dataObject(e);if(r)throw lt(r,r.message,er.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=yG(e.schema,e.table),i=xO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:FO.bind(null,s),dynamicTyping:!1}),o=new $O;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&OG(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 oae(e.action,e.schema,e.table,i.data);return n=await AG.callOperationFunctionAsAwait(IG,l,null),n.message===SG?SG:wG(n.records,n.number_written)}catch(s){throw Ba(s)}}a(_ae,"csvDataLoad");async function dae(e){let t=Ap.urlObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ua}/${r}`;try{await hae(e,r)}catch(s){throw nl.error(Ht.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,va(Ht.DOWNLOAD_FILE_ERR(r)))}try{let s=new kO(this.job_operation_function.name,e.action,e.schema,e.table,n,_s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await VO(s);return await Rp(n),i}catch(s){throw await Rp(n),Ba(s)}}a(dae,"csvURLLoad");async function fae(e){let t=Ap.fileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r=new kO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,_s.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await VO(r)}catch(n){throw Ba(n)}}a(fae,"csvFileLoad");async function Eae(e){let t=Ap.s3FileObject(e);if(t)throw lt(t,t.message,er.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=nae.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ua}/${s}`;let i=new kO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await pae(s,e);let o=await VO(i);return await Rp(r),o}catch(n){throw await Rp(r),Ba(n)}}a(Eae,"importFromS3");async function hae(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await rae("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,_s.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Sae(r,e.csv_url),await mae(t,r.raw)}a(hae,"downloadCSVFile");async function pae(e,t){try{let r=`${Ua}/${e}`;await ds.mkdirp(Ua),await ds.writeFile(`${Ua}/${e}`,"",{flag:"a+"});let n=await ds.createWriteStream(r),s=await iae.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(){nl.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw nl.error(Ht.S3_DOWNLOAD_ERR+" - "+r),lt(r,va(Ht.S3_DOWNLOAD_ERR))}}a(pae,"downloadFileFromS3");async function mae(e,t){try{await ds.mkdirp(Ua),await ds.writeFile(`${Ua}/${e}`,t)}catch(r){throw nl.error(Ht.WRITE_TEMP_FILE_ERR),lt(r,va(Ht.DEFAULT_BULK_LOAD_ERR))}}a(mae,"writeFileToTempFolder");async function Rp(e){if(e)try{await ds.access(e),await ds.unlink(e)}catch{nl.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Rp,"deleteTempFile");function Sae(e,t){if(e.statusCode!==RG.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(!uae[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(Sae,"validateURLResponse");async function VO(e){try{let t;switch(e.file_type){case _s.VALID_S3_FILE_TYPES.CSV:t=await Tae(e);break;case _s.VALID_S3_FILE_TYPES.JSON:t=await gae(e);break;default:throw lt(new Error,Ht.DEFAULT_BULK_LOAD_ERR,er.BAD_REQUEST,_s.LOG_LEVELS.ERROR,Ht.INVALID_FILE_EXT_ERR(e))}return wG(t.records,t.number_written)}catch(t){throw Ba(t)}}a(VO,"fileLoad");async function NG(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 gp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&OG(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(NG,"validateChunk");async function bG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;rl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!rl.isEmpty(c)&&!rl.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 AG.callOperationFunctionAsAwait(IG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=lt(c,va(Ht.INSERT_CSV_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.INSERT_CSV_ERR+" - "+c);r(l)}}a(bG,"insertChunk");async function Tae(e){let t={records:0,number_written:0},r=yG(e.schema,e.table);try{let n=new $O,s=ds.createReadStream(e.file_path,{highWaterMark:TG});s.setEncoding("utf8"),await xO.parsePromise(s,NG.bind(null,e,n),FO.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);return s=ds.createReadStream(e.file_path,{highWaterMark:TG}),s.setEncoding("utf8"),await xO.parsePromise(s,bG.bind(null,e,t),FO.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,va(Ht.PAPA_PARSE_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.PAPA_PARSE_ERR+n)}}a(Tae,"callPapaParse");function yG(e,t){let r=aae[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>cae(i,s));return n}a(yG,"createTransformMap");function FO(e,t,r){let n=e.get(r);return n?n(t):rl.autoCast(t)}a(FO,"typeFunction");async function gae(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new $O,s=fG([ds.createReadStream(e.file_path,{encoding:"utf-8"}),EG.withParser(),c=>c.value,new hG({batchSize:gG}),pG(async c=>{await NG(e,n,r,c)})]);await new Promise((c,l)=>{mG(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,er.BAD_REQUEST);let o=fG([ds.createReadStream(e.file_path,{encoding:"utf-8"}),EG.withParser(),c=>c.value,new hG({batchSize:gG}),pG(async c=>{await bG(e,t,r,c)})]);return await new Promise((c,l)=>{mG(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw lt(n,va(Ht.INSERT_JSON_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.INSERT_JSON_ERR+n)}}a(gae,"insertJson");async function IG(e){let t={};try{e.data&&e.data.length>0&&Rae(e.data[0])?t=await Aae(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",nl.info(t.message))}catch(r){throw Ba(r)}return t}a(IG,"callBulkFileLoad");function Rae(e){let t=Object.keys(e);for(let r of t)if(!lae.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Rae,"validateColumnNames");async function Aae(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=gp.insert;break;case"update":i=gp.update;break;case"upsert":i=gp.upsert;break;default:throw lt(new Error,Ht.INVALID_ACTION_PARAM_ERR(n),er.BAD_REQUEST,_s.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=rl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ba(o)}}a(Aae,"bulkFileLoad");function wG(e,t){return`successfully loaded ${t} of ${e} records`}a(wG,"buildResponseMsg");function Ba(e){return lt(e,va(Ht.DEFAULT_BULK_LOAD_ERR),er.INTERNAL_SERVER_ERROR,_s.LOG_LEVELS.ERROR,Ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ba,"buildTopLevelErrMsg")});var DG=T((zNe,LG)=>{"use strict";var KO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};LG.exports=KO});var UG=T((XNe,MG)=>{"use strict";var Oae=C(),PG=require("moment"),Nae=require("uuid").v4,WO=class{static{a(this,"JobObject")}constructor(){this.id=Nae(),this.type=void 0,this.start_datetime=PG().valueOf(),this.created_datetime=PG().valueOf(),this.end_datetime=void 0,this.status=Oae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};MG.exports=WO});var QO=T((ebe,xG)=>{"use strict";var bae=require("uuid").v4,HG=br(),qG=nr(),yae=Zn(),Iae=pc(),wae=DG(),ut=C(),Cae=UG(),Lae=rh(),xn=x(),Dae=iu(),sl=K(),{promisify:Pae}=require("util"),Ha=require("moment"),Mae=ip(),Op=vO(),vG=ng(),{deleteTransactionLogsBeforeValidator:Uae}=XA(),{handleHDBError:vae,hdb_errors:Bae}=ie(),{HTTP_STATUS_CODES:Hae}=Bae,BG=qG.searchByValue,qae=qG.searchByHash,Gae=HG.insert,xae=Pae(Mae.evaluateSQL),Fae=HG.update;xG.exports={addJob:Vae,updateJob:Kae,handleGetJob:kae,handleGetJobsByStartDate:$ae,getJobById:GG};async function kae(e){try{let t=await GG(e.id);return sl.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(kae,"handleGetJob");async function $ae(e){try{let t=await Yae(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=Ha(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ha(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($ae,"handleGetJobsByStartDate");async function Vae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||sl.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=Op.fileObject(e);break;case ut.OPERATIONS_ENUM.CSV_URL_LOAD:n=Op.urlObject(e);break;case ut.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Op.dataObject(e);break;case ut.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Op.s3FileObject(e);break;case ut.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ut.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=vG(e,"date");break;case ut.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=vG(e,"timestamp");break;case ut.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Uae(e);break;default:break}if(n)throw vae(n,n.message,Hae.BAD_REQUEST,void 0,void 0,!0);let s=new Cae;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 yae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await BG(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=bae();try{o=await BG(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 Dae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Gae(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(Vae,"addJob");async function Yae(e){let t=Ha(e.from_date,Ha.ISO_8601),r=Ha(e.to_date,Ha.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 wae(n,e.hdb_user);try{return await xae(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(Yae,"getJobsInDateRange");async function GG(e){if(sl.isEmptyOrZeroLength(e))return sl.errorizeMessage("Invalid job ID specified.");let t=new Iae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await qae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return xn.error(n),sl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(GG,"getJobById");async function Kae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(sl.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=Ha().valueOf());let t=new Lae(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Fae(t),r}a(Kae,"updateJob")});var KG=T((rbe,YG)=>{"use strict";var FG=K(),Fr=C(),Wae=require("moment"),Np=YO(),bp=x(),kG=QO(),$G=op(),VG=na(),Qae=tt(),jae=Zh(),jO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function zae(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(FG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(FG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Fr.JOB_TYPE_ENUM.csv_file_load:await Oi(e,Np.csvFileLoad);break;case Fr.JOB_TYPE_ENUM.csv_url_load:await Oi(e,Np.csvURLLoad);break;case Fr.JOB_TYPE_ENUM.csv_data_load:await Oi(e,Np.csvDataLoad);break;case Fr.JOB_TYPE_ENUM.import_from_s3:await Oi(e,Np.importFromS3);break;case Fr.JOB_TYPE_ENUM.empty_trash:break;case Fr.JOB_TYPE_ENUM.export_local:await Oi(e,$G.export_local);break;case Fr.JOB_TYPE_ENUM.export_to_s3:await Oi(e,$G.export_to_s3);break;case Fr.JOB_TYPE_ENUM.delete_files_before:case Fr.JOB_TYPE_ENUM.delete_records_before:await Oi(e,VG.deleteFilesBefore);break;case Fr.JOB_TYPE_ENUM.delete_audit_logs_before:await Oi(e,VG.deleteAuditLogsBefore);break;case Fr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Oi(e,jae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(zae,"parseMessage");async function Oi(e,t){try{e.job.status=Fr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Wae().valueOf(),await kG.updateJob(e.job),await Jae(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):bp.error(`There was an error running ${t.name} job with id ${e.job.id}`),bp.error(n),e.job.message=n,e.job.status=Fr.JOB_STATUS_ENUM.ERROR;try{await kG.updateJob(e.job)}catch(s){throw bp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Oi,"runJob");async function Jae(e){bp.trace("launching job thread:",e),Qae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Fr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Jae,"launchJobThread");YG.exports={parseMessage:zae,RunnerMessage:jO}});var QG=T((sbe,WG)=>{"use strict";var zO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};WG.exports=zO});var _x=T((obe,rN)=>{"use strict";var Lp=nr(),ZO=ip(),yp=YO(),Ni=jE(),Ip=Ji(),K_=na(),Xae=CR(),Y_=wr(),wp=ZE(),tr=jh(),Cp=x(),Zae=xR(),ece=d_(),jG=SA(),tce=Eh(),rce=ph(),nce=gA(),sce=Th(),ice=Rh(),JO=Oh(),zG=op(),oce=np(),eN=QO(),G=C(),{hdb_errors:Q_,handleHDBError:W_}=ie(),{HTTP_STATUS_CODES:JG}=Q_,XO=bh(),XG=ya(),ax=require("util"),il=br(),ace=Ln(),cce=di(),ZG=KG(),ex=c_(),tx=(Fh(),oe(w_)),rx=Et(),nx=Zh(),sx=Kh(),{setServerUtilities:lce}=(OE(),oe(Fg)),{CONTEXT:uce}=(Qn(),oe(NS)),{_assignPackageExport:_ce}=require("../index"),{transformReq:dce}=K(),{server:fce}=(mr(),oe(qo)),ur=Cp.loggerWithTag("operation"),Ece=BO(),ix=Lp.searchByHash,hce=Lp.searchByValue,pce=ax.promisify(Lp.search),mce=ax.promisify(ZO.evaluateSQL),Sce={[G.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.CREATE_TABLE]:!0,[G.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[G.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[G.OPERATIONS_ENUM.DROP_TABLE]:!0,[G.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=QG();async function cx(e,t){try{if(e.body.operation!=="read_log"&&(Cp.log_level===G.LOG_LEVELS.INFO||Cp.log_level===G.LOG_LEVELS.DEBUG||Cp.log_level===G.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;ur.info(o)}}catch(n){ur.error(n)}let r=await Ece.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Sce[e.body.operation]&&ace.setSchemaDataToGlobal(n=>{n&&ur.error(n)}),r}a(cx,"processLocalTransaction");var ox=gce();rN.exports={chooseOperation:lx,getOperationFunction:ux,operation:tN,processLocalTransaction:cx};lce(rN.exports);fce.operation=tN;function lx(e){let t;try{t=ux(e)}catch(s){throw ur.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=ZO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=ZO.checkASTPermissions(e,i);if(o)throw ur.error(`${JG.FORBIDDEN} from operation ${e.operation}`),ur.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==G.OPERATIONS_ENUM.LOGIN&&e.operation!==G.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=oce.verifyPerms(i,s);if(o)throw ur.error(`${JG.FORBIDDEN} from operation ${e.operation}`),ur.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),W_(new Error,o,Q_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw W_(s,"There was an error when trying to choose an operation path")}return r}a(lx,"chooseOperation");function ux(e){if(ur.trace(`getOperationFunction with operation: ${e.operation}`),ox.has(e.operation))return ox.get(e.operation);throw W_(new Error,Q_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Q_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(ux,"getOperationFunction");_ce("operation",tN);function tN(e,t){e.hdb_user=this[uce]?.user,e.bypass_auth=!t;let r=lx(e);return cx({body:e},r)}a(tN,"operation");async function Tce(e){ur.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[G.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case G.OPERATIONS_ENUM.INSERT:o=await il.insert(i);break;case G.OPERATIONS_ENUM.UPDATE:o=await il.update(i);break;case G.OPERATIONS_ENUM.UPSERT:o=await il.upsert(i);break;case G.OPERATIONS_ENUM.DELETE:o=await K_.deleteRecord(i);break;default:ur.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ur.info("Invalid operation in transaction"),ur.error(o)}}a(Tce,"catchup");async function xs(e){dce(e);let t,r;try{r=await eN.addJob(e),t=r.createdJob,ur.info("addJob result",r);let n=new ZG.RunnerMessage(t,e);return await ZG.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 ur.error(s),W_(n,s)}}a(xs,"executeJob");function gce(){let e=new Map;return e.set(G.OPERATIONS_ENUM.INSERT,new Y(il.insert)),e.set(G.OPERATIONS_ENUM.UPDATE,new Y(il.update)),e.set(G.OPERATIONS_ENUM.UPSERT,new Y(il.upsert)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(Lp.searchByConditions)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(ix)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(ix)),e.set(G.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(hce)),e.set(G.OPERATIONS_ENUM.SEARCH,new Y(pce)),e.set(G.OPERATIONS_ENUM.SQL,new Y(mce)),e.set(G.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(xs,yp.csvDataLoad)),e.set(G.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(xs,yp.csvFileLoad)),e.set(G.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(xs,yp.csvURLLoad)),e.set(G.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(xs,yp.importFromS3)),e.set(G.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(Ni.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_DATABASE,new Y(Ni.createSchema)),e.set(G.OPERATIONS_ENUM.CREATE_TABLE,new Y(Ni.createTable)),e.set(G.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(Ni.createAttribute)),e.set(G.OPERATIONS_ENUM.DROP_SCHEMA,new Y(Ni.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_DATABASE,new Y(Ni.dropSchema)),e.set(G.OPERATIONS_ENUM.DROP_TABLE,new Y(Ni.dropTable)),e.set(G.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(Ni.dropAttribute)),e.set(G.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(Ip.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(Ip.describeSchema)),e.set(G.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(Ip.describeTable)),e.set(G.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(Ip.describeAll)),e.set(G.OPERATIONS_ENUM.DELETE,new Y(K_.deleteRecord)),e.set(G.OPERATIONS_ENUM.ADD_USER,new Y(Y_.addUser)),e.set(G.OPERATIONS_ENUM.ALTER_USER,new Y(Y_.alterUser)),e.set(G.OPERATIONS_ENUM.DROP_USER,new Y(Y_.dropUser)),e.set(G.OPERATIONS_ENUM.LIST_USERS,new Y(Y_.listUsersExternal)),e.set(G.OPERATIONS_ENUM.LIST_ROLES,new Y(wp.listRoles)),e.set(G.OPERATIONS_ENUM.ADD_ROLE,new Y(wp.addRole)),e.set(G.OPERATIONS_ENUM.ALTER_ROLE,new Y(wp.alterRole)),e.set(G.OPERATIONS_ENUM.DROP_ROLE,new Y(wp.dropRole)),e.set(G.OPERATIONS_ENUM.USER_INFO,new Y(Y_.userInfo)),e.set(G.OPERATIONS_ENUM.READ_LOG,new Y(Zae)),e.set(G.OPERATIONS_ENUM.ADD_NODE,new Y(ece)),e.set(G.OPERATIONS_ENUM.UPDATE_NODE,new Y(jG)),e.set(G.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(jG)),e.set(G.OPERATIONS_ENUM.REMOVE_NODE,new Y(tce)),e.set(G.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(rce)),e.set(G.OPERATIONS_ENUM.PURGE_STREAM,new Y(nce)),e.set(G.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(rx.setConfiguration)),e.set(G.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(sce.clusterStatus)),e.set(G.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(ice)),e.set(G.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(JO.setRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(JO.getRoutes)),e.set(G.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(JO.deleteRoutes)),e.set(G.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(xs,zG.export_to_s3)),e.set(G.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(xs,K_.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(xs,K_.deleteFilesBefore)),e.set(G.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(xs,zG.export_local)),e.set(G.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(eN.handleGetJobsByStartDate)),e.set(G.OPERATIONS_ENUM.GET_JOB,new Y(eN.handleGetJob)),e.set(G.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(XO.getFingerprint)),e.set(G.OPERATIONS_ENUM.SET_LICENSE,new Y(XO.setLicense)),e.set(G.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(XO.getRegistrationInfo)),e.set(G.OPERATIONS_ENUM.RESTART,new Y(XG.restart)),e.set(G.OPERATIONS_ENUM.RESTART_SERVICE,new Y(XG.restartService)),e.set(G.OPERATIONS_ENUM.CATCHUP,new Y(Tce)),e.set(G.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(cce.systemInformation)),e.set(G.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(xs,K_.deleteAuditLogsBefore)),e.set(G.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(Xae)),e.set(G.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(ex.createTokens)),e.set(G.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(ex.refreshOperationToken)),e.set(G.OPERATIONS_ENUM.LOGIN,new Y(tx.login)),e.set(G.OPERATIONS_ENUM.LOGOUT,new Y(tx.logout)),e.set(G.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(rx.getConfiguration)),e.set(G.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(tr.customFunctionsStatus)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(tr.getCustomFunctions)),e.set(G.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(tr.getComponentFile)),e.set(G.OPERATIONS_ENUM.GET_COMPONENTS,new Y(tr.getComponents)),e.set(G.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(tr.setComponentFile)),e.set(G.OPERATIONS_ENUM.DROP_COMPONENT,new Y(tr.dropComponent)),e.set(G.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(tr.getCustomFunction)),e.set(G.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(tr.setCustomFunction)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(tr.dropCustomFunction)),e.set(G.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(tr.addComponent)),e.set(G.OPERATIONS_ENUM.ADD_COMPONENT,new Y(tr.addComponent)),e.set(G.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(tr.dropCustomFunctionProject)),e.set(G.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(tr.packageComponent)),e.set(G.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(tr.packageComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(tr.deployComponent)),e.set(G.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(tr.deployComponent)),e.set(G.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(nx.readTransactionLog)),e.set(G.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(xs,nx.deleteTransactionLogsBefore)),e.set(G.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(sx.installModules)),e.set(G.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(sx.auditModules)),e.set(G.OPERATIONS_ENUM.GET_BACKUP,new Y(Ni.getBackup)),e}a(gce,"initializeOperationFunctionMap")});var Pp=T((cbe,Ex)=>{"use strict";var nN=C(),Rce=K(),j_=x(),{handleHDBError:sN,hdb_errors:Dp}=ie(),{isMainThread:Ace}=require("worker_threads"),{Readable:Oce}=require("stream"),dx=require("os"),Nce=require("util"),bce=zR(),yce=Nce.promisify(bce.authorize),fx=_x(),{createGzip:Ice,constants:wce}=require("zlib");function Cce(e){let t=`Found an uncaught exception with message: ${e.message}. ${dx.EOL}Stack: ${e.stack} ${dx.EOL}Terminating ${Ace?"HDB":"thread"}.`;console.error(t),j_.fatal(t),process.exit(1)}a(Cce,"handleServerUncaughtException");function Lce(e,t,r){if(j_[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:Dp.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(Lce,"serverErrorHandler");function Dce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=sN(new Error,"Invalid JSON.",Dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Rce.isEmpty(e.body.operation)){let n=sN(new Error,"Request body must include an 'operation' property.",Dp.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Dce,"reqBodyValidationHandler");function Pce(e,t,r){let n;e.body.operation!==nN.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==nN.OPERATIONS_ENUM.LOGIN&&e.body.operation!==nN.OPERATIONS_ENUM.LOGOUT?yce(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{j_.warn(s),j_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(sN(s,i,Dp.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(Pce,"authHandler");async function Mce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=fx.chooseOperation(e.body);let s=await fx.processLocalTransaction(e,n);if(s instanceof Oce&&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(Ice({level:wce.Z_BEST_SPEED})))}return s}catch(s){throw j_.error(s),s}}a(Mce,"handlePostRequest");Ex.exports={authHandler:Pce,handlePostRequest:Mce,handleServerUncaughtException:Cce,serverErrorHandler:Lce,reqBodyValidationHandler:Dce}});var Sx=T((ube,mx)=>{"use strict";var Uce=require("fastify-plugin"),{handlePostRequest:hx,authHandler:vce,reqBodyValidationHandler:Bce}=Pp();async function Hce(e){e.decorate("hdbCore",{preValidation:[Bce,vce],request:t=>px(hx(t,response)),requestWithoutAuthentication:(t,r)=>px(hx(t,r,!0))})}a(Hce,"hdbCore");async function px(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(px,"convertAsyncIterators");mx.exports=Uce(Hce)});var Rx=T((fbe,gx)=>{"use strict";var dbe=require("fs"),iN=X();iN.initSync();var{CONFIG_PARAMS:Tx}=C(),qce=1024*1024*1024;function Gce(e){let t=iN.get(Tx.HTTP_TIMEOUT),r=iN.get(Tx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:qce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Gce,"getServerOptions");gx.exports=Gce});var Nx=T((hbe,Ox)=>{"use strict";var oN=X();oN.initSync();var{CONFIG_PARAMS:Ax}=C();function xce(){let e=oN.get(Ax.HTTP_CORSACCESSLIST),t=oN.get(Ax.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(xce,"getCORSOptions");Ox.exports=xce});var Ix=T((mbe,yx)=>{"use strict";var bx=X();bx.initSync();var Fce=C();function kce(){return bx.get(Fce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(kce,"getHeaderTimeoutConfig");yx.exports=kce});var cN={};$e(cN,{customFunctionsServer:()=>Yce,ready:()=>kx,start:()=>Vce});function Vce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){bi||(bi=Fx(t),it.http((await bi).server));let o=await bi,c=(0,aN.dirname)(s),l=(0,aN.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!wx.has(c)){wx.add(c);try{o.register(Wce(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:kx}}async function Yce(){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 Kce();let e=Ux.get(vx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=bi=await Fx(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 Kce(){try{Ke.info("Custom Functions starting configuration."),await Bx.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Wce(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,Cx.existsSync)(e)&&r.register(Mx.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 Fx(e){Ke.info("Custom Functions starting buildServer.");let t=(0,Hx.default)(e),r=(0,Lx.default)(t);r.server.headersTimeout=(0,Gx.default)(),r.setErrorHandler(xx.serverErrorHandler);let n=(0,qx.default)();return n&&r.register(Dx.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(Px.default),await r.register($ce),await r.after(),RO(r),Ke.info("Custom Functions completed buildServer."),r}function kx(){if(bi)return bi.then?bi.then(e=>e.ready()):bi.ready()}var aN,Cx,Lx,Dx,Px,Mx,Ux,vx,Ke,$ce,Bx,Hx,qx,Gx,xx,bi,wx,$x=Ne(()=>{aN=require("path"),Cx=require("fs"),Lx=q(require("fastify")),Dx=q(require("@fastify/cors")),Px=q(CO()),Mx=q(require("@fastify/autoload")),Ux=q(X()),vx=q(C()),Ke=q(x()),$ce=q(Sx()),Bx=q(wr()),Hx=q(Rx()),qx=q(Nx()),Gx=q(Ix()),xx=q(Pp());Wc();mr();wx=new Set;a(Vce,"start");a(Yce,"customFunctionsServer");a(Kce,"setUp");a(Wce,"buildRouteFolder");a(Fx,"buildServer");a(kx,"ready")});var lN={};$e(lN,{start:()=>Qce});function Qce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Qx.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){Yx||(Yx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Vx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Kx.default)(s,(0,Wx.realpathSync)(o))}}return i(s)},{runFirst:!0})),Vx.set(r,n)}}}var Kx,Wx,Qx,Vx,Yx,jx=Ne(()=>{Kx=q(require("send")),Wx=require("fs"),Qx=q(require("serve-static")),Vx=new Map;a(Qce,"start")});var fN={};$e(fN,{Request:()=>uN,createReuseportFd:()=>Mp});var zx,uN,_N,dN,Mp,Up=Ne(()=>{zx=require("os"),uN=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 dN(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 _N(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},_N=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},dN=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,zx.platform)()!="win32"&&(Mp=require("node-unix-socket").createReuseportFd)});var eF=T((Cbe,Zx)=>{"use strict";var jce=require("cluster"),qa=X();qa.initSync();var Xx=C(),Nbe=require("util"),yi=x(),bbe=require("fs"),zce=require("fastify"),ybe=Ho(),Jce=require("@fastify/cors"),Xce=require("@fastify/compress"),Zce=require("@fastify/static"),ele=CO(),tle=require("path"),{PACKAGE_ROOT:rle}=C(),nle=Ln(),sle=K(),ile=wr(),ole=aa(),{server:ale}=(mr(),oe(qo)),{node_request_key:Ibe}=(Up(),oe(fN)),{authHandler:cle,handlePostRequest:lle,serverErrorHandler:ule,reqBodyValidationHandler:_le}=Pp(),wbe=require("net"),{registerContentHandlers:dle}=(Wc(),oe(Kq)),fle=6e4,Ele=1024*1024*1024,hle="TRUE",{CONFIG_PARAMS:z_}=Xx,ol;Zx.exports={hdbServer:Jx,start:Jx};async function Jx(e){try{yi.info("In Fastify server"+process.cwd()),yi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),yi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=jce.isMaster,await ple();let t=e.securePort>0;ol=mle(t),await ol.ready(),e||(e={}),e.isOperationsServer=!0;try{ale.http(ol.server,e),ol.server.closeIdleConnections||await ol.listen({port:0,host:"::"})}catch(r){throw ol.close(),yi.error(r),yi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),yi.fatal(t),process.exit(1)}}a(Jx,"operationsServer");async function ple(){yi.trace("Configuring HarperDB process."),nle.setSchemaDataToGlobal(),await ile.setUsersToGlobal(),await ole.getLicense()}a(ple,"setUp");function mle(e){yi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Sle(e),r=zce(t);r.server.headersTimeout=gle(),r.setErrorHandler(ule);let n=Tle();n&&r.register(Jce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(ele),r.register(Xce),r.register(Zce,{root:tle.join(rle,"studio/build-local")}),dle(r);let s=qa.get(Xx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!sle.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[_le,cle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),lle(i,o)}),r.get("/health",()=>"HarperDB is running."),yi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(mle,"buildServer");function Sle(e){let t=qa.get(z_.OPERATIONSAPI_NETWORK_TIMEOUT),r=qa.get(z_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Ele,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Sle,"getServerOptions");function Tle(){let e=qa.get(z_.OPERATIONSAPI_NETWORK_CORS),t=qa.get(z_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===hle)&&(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(Tle,"getCORSOpts");function gle(){return qa.get(z_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??fle}a(gle,"getHeaderTimeoutConfig")});var TN={};$e(TN,{disableNATS:()=>Ale,publishToStream:()=>Hp,setNATSReplicator:()=>EN,setPublishToStream:()=>Ole,setSubscription:()=>SN,start:()=>Rle});function Rle(){J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ble()}function Ale(e=!0){iF=e}function Ole(e,t){Hp=e,SN=t}function ble(){if(iF||process.env._DISABLE_NATS)return;let e=ts(),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];EN(s,r,i)}}Kg((r,n)=>{EN(r.tableName,r.databaseName,r),n&&aF(r)}),!tF&&(tF=!0)}function EN(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 jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){aF(i)}static subscribe(){let i=new Wn;return SN(t,e,i),i}static subscribeOnThisThread(i){return i<(J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Nle)}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 vp(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=oF;return i}a(n,"getNATSTransaction")}function aF(e){let t=J_.default.get(X_.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Hp(`${pN.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,mN.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 rF,pN,mN,nF,sF,J_,X_,Bp,iF,Hp,SN,Nle,oF,tF,vp,hN,cF=Ne(()=>{ge();Qn();rF=q(ht()),pN=q(et()),mN=q(li());kl();nF=q(mR()),sF=q(Tr()),J_=q(X()),X_=q(C()),Bp=q(x());a(Rle,"start");a(Ale,"disableNATS");Hp=rF.publishToStream,SN=nF.setSubscription;a(Ole,"setPublishToStream");Nle=2;a(ble,"assignReplicationSource");a(EN,"setNATSReplicator");a(aF,"publishSchema");vp=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=J_.default.get(X_.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(Hp(`${pN.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,mN.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)}},hN=class extends vp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,sF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};oF=new hN});var yN=T(Ga=>{"use strict";var{isMainThread:EF,parentPort:ed,threadId:qp}=require("worker_threads"),{Socket:yle,createServer:Ile}=require("net"),{createServer:wle,IncomingMessage:Cle}=require("http"),{createServer:Lle}=require("https"),{readFileSync:al,unlinkSync:lF,existsSync:Dle}=require("fs"),_r=x(),Pe=X(),yt=C(),{server:kp}=(mr(),oe(qo)),{WebSocketServer:Ple}=require("ws"),{createServer:Mle}=require("tls"),{getTicketKeys:Ule,restartNumber:vle,getWorkerIndex:xp}=tt(),{Headers:hF,appendHeader:Ble}=(Uu(),oe(LM)),{recordAction:Z_,recordActionBinary:Hle}=(ui(),oe(Mu)),{Request:pF,createReuseportFd:uF}=(Up(),oe(fN)),{checkMemoryLimit:qle}=aa(),mF=require("tls"),_F=mF.createSecureContext;mF.createSecureContext=function(e){if(!e.cert||!e.key)return _F(e);let t={...e};delete t.key,delete t.cert;let r=_F(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var SF=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG);if(SF){let e;if(EF)e=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){_r.info("Could not close debugger",t)}});else{let t=Pe.get(yt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&xp()>=0&&(e=t+xp())}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){_r.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){vle<=1&&_r.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:Bbe,CONFIG_PARAMS:Gle}=yt;Pe.initSync();var xle=Pe.get(Gle.HTTP_SESSIONAFFINITY),Fs={};Ga.registerServer=NN;Ga.httpServer=bN;Ga.deliverSocket=ON;Ga.startServers=TF;Ga.when_components_loaded=null;kp.http=bN;kp.request=Vle;kp.socket=Yle;kp.ws=Kle;var gN={},Gp={},Fle,go={},Fp={},kle=[],RN=[];function TF(){return Ga.when_components_loaded=$p().loadRootComponents(!0).then(()=>{ed?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)ON(n,r,s);else if(t.requestId)$le(t);else if(t.type===yt.ITC_EVENT_TYPES.SHUTDOWN){_r.trace("received shutdown request",qp);for(let i in Fs){let o=Fs[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?_r.info(`Closing ${E.length} idle connections`):f&&_r.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});Qt.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()}});$G={type:"application/json",serializeStream:Ju,serialize:$_,deserialize:yoe,q:.8};Qt.set("*/*",$G);Qt.set("",$G);a(yoe,"tryJSONParse");a(OO,"registerContentHandlers");Ioe=require("fastify-plugin"),woe=Ioe(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=_p(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(_p,"findBestSerializer");GG=TO.default.get(gO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(dp,"serialize");a(So,"serializeMessage");a(Coe,"streamToBuffer");a(Pa,"getDeserializer");a(qG,"deserializerUnknownType");a(Loe,"transformIterable")});function jG(e){let t={openapi:Doe,info:{title:"HarperDB HTTP REST interface",version:(0,QG.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:A,name:P,elements:v,relationship:U,definition:F}of o){if(U)A==="array"?_[P]={type:"array",items:{$ref:Ro+v.type}}:_[P]={$ref:Ro+A};else{let H=F??v?.definition;if(H){if(!t.components.schemas[H.type]){let j={};H.properties.forEach(z=>{j[z.name]=new IO(bO[z.type],z.type)}),t.components.schemas[H.type]=new WG(j)}A==="array"?_[P]={type:"array",items:{$ref:Ro+H.type}}:_[P]={$ref:Ro+H.type}}else A==="array"?v.type==="Any"||v.type=="ID"?_[P]={type:"array",items:{format:v.type}}:_[P]={type:"array",items:new IO(bO[v.type],v.type)}:A==="Any"||A=="ID"?_[P]={format:A}:_[P]=new IO(bO[A],A)}u.push(new wO(P,"query",_[P]))}let d=Object.keys(_),f=new wO(c,"path",{format:"ID"});f.required=!0,f.description="primary key of record";let E=new wO("property","path",{enum:d});E.required=!0,t.components.schemas[i]=new WG(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",R=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new Poe(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new NO(u,r,{200:new yO({$ref:Ro+i})},"search for records by the specified property name and value pairs")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new KG(u,r,"delete all the records that match the provided query",{204:new YG})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new NO([f],r,{200:new yO({$ref:Ro+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Moe([f],r,i,"create or update the record with the URL path that maps to the record's primary key")),R&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new KG([f],r,"delete a record with the given primary key",{204:new YG})),S&&E.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new NO([f,E],r,{200:new yO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Poe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ro+e}}}},this.security=t,this.responses={200:{description:CO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function NO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function yO(e){this.description=CO,this.content={"application/json":{schema:e}}}function YG(){this.description="successfully processed request, no content returned to client"}function Moe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ro+r}}}},this.responses={200:{description:CO}}}function KG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function WG(e){this.type="object",this.properties=e}function IO(e,t){this.type=e,this.format=t}function wO(e,t,r){this.name=e,this.in=t,this.schema=r}var QG,Doe,bO,Ro,CO,zG=Ae(()=>{QG=G($i()),Doe="3.0.3",bO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ro="#/components/schemas/",CO="successful operation";a(jG,"generateJsonApi");a(Poe,"Post");a(NO,"Get");a(yO,"Response200");a(YG,"Response204");a(Moe,"Put");a(KG,"Delete");a(WG,"ResourceSchema");a(IO,"Type");a(wO,"Parameter")});var Ep={};Fe(Ep,{start:()=>Boe});async function voe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hf(e);let s=new io;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==JG){let h=fp.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=Pa(r["content-type"],!0)(e.body)}catch(h){throw new el.ClientError(h,400)}if(e.authorize=!0,i===JG&&n==="GET"){if(e?.user?.role?.permission?.super_user)return jG(fp);throw new el.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 el.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new el.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,LO.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,(tr[0]&63)+62,(tr[0]>>6)+(tr[1]<<2&63)+62,(tr[1]>>4)+(tr[2]<<4&63)+62,(tr[2]>>2)+62,(tr[3]&63)+62,(tr[3]>>6)+(tr[4]<<2&63)+62,(tr[4]>>4)+(tr[5]<<4&63)+62,(tr[5]>>2)+62,(tr[6]&63)+62,(tr[6]>>6)+(tr[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),LO.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=dp(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?Ma.warn(i):Ma.info(i):Ma.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=dp(i.contentType?i:i.toString(),e,o),o}}function Boe(e){LO=e,!XG&&(XG=!0,fp=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return voe(t,r)}),e.server.ws(async(t,r,n)=>{Y_++;let s=new zn;ZG||(ZG=!0,Uu(u=>{Y_>0&&u.push({metric:"ws-connections",connections:Y_,byThread:!0})}));let i;t.on("error",u=>{i=!0,Ma.warn(u)});let o;t.on("message",a(function(d){o||(o=Pa(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Y_--,Un(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=fp.getMatch(l);if(Un(!!_,"connection","ws","connect"),!_)t.send(So(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,ln(h=>({count:h.count,total:Y_}),"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=So(E.value,r);t.send(h),ln(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Ma,el,tr,Uoe,LO,JG,XG,fp,ZG,Y_,eq=Ae(()=>{Wc();di();Ma=G(x()),el=G(ie());pf();kl();Yo();Bu();zG();tr=new Uint8Array(8),Uoe=new Float64Array(tr.buffer,0,1),LO={},JG="openapi";a(voe,"http");Y_=0;a(Boe,"start")});var DO=g((vbe,tq)=>{var{recordAction:hp,recordActionBinary:Hoe}=(di(),oe(vu)),Goe=require("fastify-plugin"),qoe=200;tq.exports=Goe(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),hp(o,"duration",_,d,u),Hoe(s.raw.statusCode<400,"success",_,d,u);let f=qoe;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{hp(performance.now()-c,"transfer",_,d,u),hp(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,hp(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var HO=g((Gbe,iq)=>{var Tp=require("clone"),gp=rt(),xoe=K(),mp=C(),Bbe=x(),PO=require("fs"),UO=require("joi"),{string:Sp}=UO.types(),{hdb_errors:Foe,handleHDBError:pp}=ie(),{HDB_ERROR_MSGS:Hbe,HTTP_STATUS_CODES:MO}=Foe,{common_validators:tl}=ws(),rq=" is required",koe=["insert","update","upsert"],vO={database:{presence:!1,format:tl.schema_format,length:tl.schema_length},schema:{presence:!1,format:tl.schema_format,length:tl.schema_length},table:{presence:!0,format:tl.schema_format,length:tl.schema_length},action:{inclusion:{within:koe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},$oe={schema:Sp.required(),table:Sp.required(),action:Sp.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Voe,AWS_SECRET:Yoe,AWS_BUCKET:Koe,AWS_FILE_KEY:Woe,REGION:Qoe}=mp.S3_BUCKET_AUTH_KEYS,joe={s3:{presence:!0},[`s3.${Voe}`]:{presence:!0,type:"String"},[`s3.${Yoe}`]:{presence:!0,type:"String"},[`s3.${Koe}`]:{presence:!0,type:"String"},[`s3.${Woe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Qoe}`]:{presence:!0,type:"String"}},nq=Tp(vO);nq.data.presence={message:rq};var sq=Tp(vO);sq.file_path.presence={message:rq};var zoe=Object.assign(Tp(vO),joe),BO=Tp($oe);BO.csv_url=Sp.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();BO.passthrough_headers=UO.object();function Joe(e){let t=gp.validateObject(e,nq);return Rp(e,t)}a(Joe,"dataObject");function Xoe(e){let t=gp.validateBySchema(e,UO.object(BO));return Rp(e,t)}a(Xoe,"urlObject");function Zoe(e){let t=gp.validateObject(e,sq);return Rp(e,t)}a(Zoe,"fileObject");function eae(e){let t=gp.validateObject(e,zoe);return Rp(e,t)}a(eae,"s3FileObject");function Rp(e,t){if(!t){let r=xoe.checkGlobalSchemaTable(e.schema,e.table);if(r)return pp(new Error,r,MO.BAD_REQUEST);if(e.operation===mp.OPERATIONS_ENUM.CSV_FILE_LOAD)try{PO.accessSync(e.file_path,PO.constants.R_OK|PO.constants.F_OK)}catch(n){return n.code===mp.NODE_ERROR_CODES.ENOENT?pp(n,`No such file or directory ${n.path}`,MO.BAD_REQUEST):n.code===mp.NODE_ERROR_CODES.EACCES?pp(n,`Permission denied ${n.path}`,MO.BAD_REQUEST):pp(n)}}return t}a(Rp,"postValidateChecks");iq.exports={dataObject:Joe,urlObject:Xoe,fileObject:Zoe,s3FileObject:eae}});var GO=g((xbe,oq)=>{"use strict";var K_=x(),Ap=C();async function tae(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===Ap.OPERATIONS_ENUM.INSERT||t.operation===Ap.OPERATIONS_ENUM.UPDATE||t.operation===Ap.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Ap.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(tae,"callOperationFunctionAsAwait");oq.exports={callOperationFunctionAsAwait:tae}});var cq=g((kbe,aq)=>{"use strict";var qO=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}},xO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};aq.exports={BulkLoadFileObject:qO,BulkLoadDataObject:xO}});var uq=g((Vbe,lq)=>{"use strict";var FO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};lq.exports=FO});var WO=g((zbe,Iq)=>{"use strict";var Op=wr(),Np=HO(),rae=require("needle"),Es=C(),Kbe=et(),rl=K(),{handleHDBError:_t,hdb_errors:Tq}=ie(),{HTTP_STATUS_CODES:rr,HDB_ERROR_MSGS:Gt,CHECK_LOGS_WRAPPER:va}=Tq,nl=x(),kO=require("papaparse");rl.promisifyPapaParse();var hs=require("fs-extra"),nae=require("path"),{chain:_q}=require("stream-chain"),dq=require("stream-json/streamers/StreamArray"),fq=require("stream-json/utils/Batch"),Eq=require("stream-chain/utils/comp"),{finished:hq}=require("stream"),sae=X(),gq=GO(),iae=hO(),{BulkLoadFileObject:VO,BulkLoadDataObject:oae}=cq(),YO=iO(),{verifyBulkLoadAttributePerms:Rq}=op(),Wbe=uq(),Qbe=pt(),jbe=_i(),{databases:aae}=(Te(),oe(ke)),{coerceType:cae}=(bE(),oe($g)),pq="No records parsed from csv file.",Ua=`${sae.get("HDB_ROOT")}/tmp`,{schema_regex:lae}=ws(),mq=1024*1024*2,Sq=5e3,uae={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Iq.exports={csvDataLoad:_ae,csvURLLoad:dae,csvFileLoad:fae,importFromS3:Eae};async function _ae(e,t){let r=Np.dataObject(e);if(r)throw _t(r,r.message,rr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=bq(e.schema,e.table),i=kO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:$O.bind(null,s),dynamicTyping:!1}),o=new YO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Rq(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 _t(new Error,c,rr.BAD_REQUEST,void 0,void 0,!0);let l=new oae(e.action,e.schema,e.table,i.data);return n=await gq.callOperationFunctionAsAwait(Nq,l,null),n.message===pq?pq:yq(n.records,n.number_written)}catch(s){throw Ba(s)}}a(_ae,"csvDataLoad");async function dae(e){let t=Np.urlObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ua}/${r}`;try{await hae(e,r)}catch(s){throw nl.error(Gt.DOWNLOAD_FILE_ERR(r)+" - "+s),_t(s,va(Gt.DOWNLOAD_FILE_ERR(r)))}try{let s=new VO(this.job_operation_function.name,e.action,e.schema,e.table,n,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await KO(s);return await bp(n),i}catch(s){throw await bp(n),Ba(s)}}a(dae,"csvURLLoad");async function fae(e){let t=Np.fileObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=new VO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await KO(r)}catch(n){throw Ba(n)}}a(fae,"csvFileLoad");async function Eae(e){let t=Np.s3FileObject(e);if(t)throw _t(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=nae.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ua}/${s}`;let i=new VO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await pae(s,e);let o=await KO(i);return await bp(r),o}catch(n){throw await bp(r),Ba(n)}}a(Eae,"importFromS3");async function hae(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await rae("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 _t(n,s,n.statusCode,Es.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Sae(r,e.csv_url),await mae(t,r.raw)}a(hae,"downloadCSVFile");async function pae(e,t){try{let r=`${Ua}/${e}`;await hs.mkdirp(Ua),await hs.writeFile(`${Ua}/${e}`,"",{flag:"a+"});let n=await hs.createWriteStream(r),s=await iae.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(){nl.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw nl.error(Gt.S3_DOWNLOAD_ERR+" - "+r),_t(r,va(Gt.S3_DOWNLOAD_ERR))}}a(pae,"downloadFileFromS3");async function mae(e,t){try{await hs.mkdirp(Ua),await hs.writeFile(`${Ua}/${e}`,t)}catch(r){throw nl.error(Gt.WRITE_TEMP_FILE_ERR),_t(r,va(Gt.DEFAULT_BULK_LOAD_ERR))}}a(mae,"writeFileToTempFolder");async function bp(e){if(e)try{await hs.access(e),await hs.unlink(e)}catch{nl.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(bp,"deleteTempFile");function Sae(e,t){if(e.statusCode!==Tq.HTTP_STATUS_CODES.OK)throw _t(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rr.BAD_REQUEST);if(!uae[e.headers["content-type"]])throw _t(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rr.BAD_REQUEST);if(!e.raw)throw _t(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rr.BAD_REQUEST)}a(Sae,"validateURLResponse");async function KO(e){try{let t;switch(e.file_type){case Es.VALID_S3_FILE_TYPES.CSV:t=await Tae(e);break;case Es.VALID_S3_FILE_TYPES.JSON:t=await gae(e);break;default:throw _t(new Error,Gt.DEFAULT_BULK_LOAD_ERR,rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,Gt.INVALID_FILE_EXT_ERR(e))}return yq(t.records,t.number_written)}catch(t){throw Ba(t)}}a(KO,"fileLoad");async function Aq(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&&Rq(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=_t(c);r(l)}}a(Aq,"validateChunk");async function Oq(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;rl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!rl.isEmpty(c)&&!rl.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 gq.callOperationFunctionAsAwait(Nq,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=_t(c,va(Gt.INSERT_CSV_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Gt.INSERT_CSV_ERR+" - "+c);r(l)}}a(Oq,"insertChunk");async function Tae(e){let t={records:0,number_written:0},r=bq(e.schema,e.table);try{let n=new YO,s=hs.createReadStream(e.file_path,{highWaterMark:mq});s.setEncoding("utf8"),await kO.parsePromise(s,Aq.bind(null,e,n),$O.bind(null,r));let i=n.getPermsResponse();if(i)throw _t(new Error,i,rr.BAD_REQUEST);return s=hs.createReadStream(e.file_path,{highWaterMark:mq}),s.setEncoding("utf8"),await kO.parsePromise(s,Oq.bind(null,e,t),$O.bind(null,r)),s.destroy(),t}catch(n){throw _t(n,va(Gt.PAPA_PARSE_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Gt.PAPA_PARSE_ERR+n)}}a(Tae,"callPapaParse");function bq(e,t){let r=aae[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>cae(i,s));return n}a(bq,"createTransformMap");function $O(e,t,r){let n=e.get(r);return n?n(t):rl.autoCast(t)}a($O,"typeFunction");async function gae(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new YO,s=_q([hs.createReadStream(e.file_path,{encoding:"utf-8"}),dq.withParser(),c=>c.value,new fq({batchSize:Sq}),Eq(async c=>{await Aq(e,n,r,c)})]);await new Promise((c,l)=>{hq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw _t(new Error,i,rr.BAD_REQUEST);let o=_q([hs.createReadStream(e.file_path,{encoding:"utf-8"}),dq.withParser(),c=>c.value,new fq({batchSize:Sq}),Eq(async c=>{await Oq(e,t,r,c)})]);return await new Promise((c,l)=>{hq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw _t(n,va(Gt.INSERT_JSON_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Gt.INSERT_JSON_ERR+n)}}a(gae,"insertJson");async function Nq(e){let t={};try{e.data&&e.data.length>0&&Rae(e.data[0])?t=await Aae(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",nl.info(t.message))}catch(r){throw Ba(r)}return t}a(Nq,"callBulkFileLoad");function Rae(e){let t=Object.keys(e);for(let r of t)if(!lae.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Rae,"validateColumnNames");async function Aae(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 _t(new Error,Gt.INVALID_ACTION_PARAM_ERR(n),rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,Gt.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=rl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Ba(o)}}a(Aae,"bulkFileLoad");function yq(e,t){return`successfully loaded ${t} of ${e} records`}a(yq,"buildResponseMsg");function Ba(e){return _t(e,va(Gt.DEFAULT_BULK_LOAD_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,Gt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ba,"buildTopLevelErrMsg")});var Cq=g((Xbe,wq)=>{"use strict";var QO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};wq.exports=QO});var Pq=g((eNe,Dq)=>{"use strict";var Oae=C(),Lq=require("moment"),bae=require("uuid").v4,jO=class{static{a(this,"JobObject")}constructor(){this.id=bae(),this.type=void 0,this.start_datetime=Lq().valueOf(),this.created_datetime=Lq().valueOf(),this.end_datetime=void 0,this.status=Oae.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Dq.exports=jO});var zO=g((rNe,Gq)=>{"use strict";var Nae=require("uuid").v4,vq=wr(),Bq=ir(),yae=rs(),Iae=pc(),wae=Cq(),dt=C(),Cae=Pq(),Lae=ih(),$n=x(),Dae=au(),sl=K(),{promisify:Pae}=require("util"),Ha=require("moment"),Mae=cp(),yp=HO(),Mq=ig(),{deleteTransactionLogsBeforeValidator:Uae}=eO(),{handleHDBError:vae,hdb_errors:Bae}=ie(),{HTTP_STATUS_CODES:Hae}=Bae,Uq=Bq.searchByValue,Gae=Bq.searchByHash,qae=vq.insert,xae=Pae(Mae.evaluateSQL),Fae=vq.update;Gq.exports={addJob:Vae,updateJob:Kae,handleGetJob:kae,handleGetJobsByStartDate:$ae,getJobById:Hq};async function kae(e){try{let t=await Hq(e.id);return sl.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 $n.error("There was an error getting job",t),new Error(r)}}a(kae,"handleGetJob");async function $ae(e){try{let t=await Yae(e);if($n.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=Ha(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ha(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 $n.error(r),new Error(r)}}a($ae,"handleGetJobsByStartDate");async function Vae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||sl.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return $n.info(u),t.error=u,t}if(!dt.JOB_TYPE_ENUM[e.operation])return $n.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=yp.fileObject(e);break;case dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=yp.urlObject(e);break;case dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=yp.dataObject(e);break;case dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=yp.s3FileObject(e);break;case dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Mq(e,"date");break;case dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Mq(e,"timestamp");break;case dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Uae(e);break;default:break}if(n)throw vae(n,n.message,Hae.BAD_REQUEST,void 0,void 0,!0);let s=new Cae;s.type=e.operation===dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new yae(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Uq(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return $n.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Nae();try{o=await Uq(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return $n.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return $n.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Dae(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await qae(l)}catch(u){return $n.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,$n.trace(u)}return t}a(Vae,"addJob");async function Yae(e){let t=Ha(e.from_date,Ha.ISO_8601),r=Ha(e.to_date,Ha.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 wae(n,e.hdb_user);try{return await xae(s)}catch(i){throw $n.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(Yae,"getJobsInDateRange");async function Hq(e){if(sl.isEmptyOrZeroLength(e))return sl.errorizeMessage("Invalid job ID specified.");let t=new Iae(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Gae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return $n.error(n),sl.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Hq,"getJobById");async function Kae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(sl.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===dt.JOB_STATUS_ENUM.COMPLETE||e.status===dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ha().valueOf());let t=new Lae(dt.SYSTEM_SCHEMA_NAME,dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Fae(t),r}a(Kae,"updateJob")});var Vq=g((sNe,$q)=>{"use strict";var qq=K(),$r=C(),Wae=require("moment"),Ip=WO(),wp=x(),xq=zO(),Fq=lp(),kq=na(),Qae=tt(),jae=rp(),JO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function zae(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(qq.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(qq.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case $r.JOB_TYPE_ENUM.csv_file_load:await Ni(e,Ip.csvFileLoad);break;case $r.JOB_TYPE_ENUM.csv_url_load:await Ni(e,Ip.csvURLLoad);break;case $r.JOB_TYPE_ENUM.csv_data_load:await Ni(e,Ip.csvDataLoad);break;case $r.JOB_TYPE_ENUM.import_from_s3:await Ni(e,Ip.importFromS3);break;case $r.JOB_TYPE_ENUM.empty_trash:break;case $r.JOB_TYPE_ENUM.export_local:await Ni(e,Fq.export_local);break;case $r.JOB_TYPE_ENUM.export_to_s3:await Ni(e,Fq.export_to_s3);break;case $r.JOB_TYPE_ENUM.delete_files_before:case $r.JOB_TYPE_ENUM.delete_records_before:await Ni(e,kq.deleteFilesBefore);break;case $r.JOB_TYPE_ENUM.delete_audit_logs_before:await Ni(e,kq.deleteAuditLogsBefore);break;case $r.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ni(e,jae.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(zae,"parseMessage");async function Ni(e,t){try{e.job.status=$r.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Wae().valueOf(),await xq.updateJob(e.job),await Jae(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):wp.error(`There was an error running ${t.name} job with id ${e.job.id}`),wp.error(n),e.job.message=n,e.job.status=$r.JOB_STATUS_ENUM.ERROR;try{await xq.updateJob(e.job)}catch(s){throw wp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ni,"runJob");async function Jae(e){wp.trace("launching job thread:",e),Qae.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[$r.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Jae,"launchJobThread");$q.exports={parseMessage:zae,RunnerMessage:JO}});var Kq=g((oNe,Yq)=>{"use strict";var XO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Yq.exports=XO});var lx=g((cNe,sb)=>{"use strict";var Mp=ir(),tb=cp(),Cp=WO(),yi=XE(),Lp=Zi(),Q_=na(),Xae=DR(),W_=Lr(),Dp=rh(),nr=Xh(),Pp=x(),Zae=kR(),ece=E_(),Wq=gA(),tce=mh(),rce=Th(),nce=AA(),sce=Ah(),ice=bh(),ZO=yh(),Qq=lp(),oce=op(),rb=zO(),q=C(),{hdb_errors:z_,handleHDBError:j_}=ie(),{HTTP_STATUS_CODES:jq}=z_,eb=wh(),zq=ya(),ix=require("util"),il=wr(),ace=Mn(),cce=Ei(),Jq=Vq(),Xq=u_(),Zq=(Vh(),oe(L_)),ex=ht(),tx=rp(),rx=jh(),{setServerUtilities:lce}=(bE(),oe($g)),{CONTEXT:uce}=(Jn(),oe(wS)),{_assignPackageExport:_ce}=require("../index"),{transformReq:dce}=K(),{server:fce}=(gr(),oe(xo)),dr=Pp.loggerWithTag("operation"),Ece=GO(),nx=Mp.searchByHash,hce=Mp.searchByValue,pce=ix.promisify(Mp.search),mce=ix.promisify(tb.evaluateSQL),Sce={[q.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.CREATE_TABLE]:!0,[q.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[q.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[q.OPERATIONS_ENUM.DROP_TABLE]:!0,[q.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=Kq();async function ox(e,t){try{if(e.body.operation!=="read_log"&&(Pp.log_level===q.LOG_LEVELS.INFO||Pp.log_level===q.LOG_LEVELS.DEBUG||Pp.log_level===q.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;dr.info(o)}}catch(n){dr.error(n)}let r=await Ece.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Sce[e.body.operation]&&ace.setSchemaDataToGlobal(n=>{n&&dr.error(n)}),r}a(ox,"processLocalTransaction");var sx=gce();sb.exports={chooseOperation:ax,getOperationFunction:cx,operation:nb,processLocalTransaction:ox};lce(sb.exports);fce.operation=nb;function ax(e){let t;try{t=cx(e)}catch(s){throw dr.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=tb.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=tb.checkASTPermissions(e,i);if(o)throw dr.error(`${jq.FORBIDDEN} from operation ${e.operation}`),dr.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),j_(new Error,o,z_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==q.OPERATIONS_ENUM.LOGIN&&e.operation!==q.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=oce.verifyPerms(i,s);if(o)throw dr.error(`${jq.FORBIDDEN} from operation ${e.operation}`),dr.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),j_(new Error,o,z_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw j_(s,"There was an error when trying to choose an operation path")}return r}a(ax,"chooseOperation");function cx(e){if(dr.trace(`getOperationFunction with operation: ${e.operation}`),sx.has(e.operation))return sx.get(e.operation);throw j_(new Error,z_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),z_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(cx,"getOperationFunction");_ce("operation",nb);function nb(e,t){e.hdb_user=this[uce]?.user,e.bypass_auth=!t;let r=ax(e);return ox({body:e},r)}a(nb,"operation");async function Tce(e){dr.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[q.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case q.OPERATIONS_ENUM.INSERT:o=await il.insert(i);break;case q.OPERATIONS_ENUM.UPDATE:o=await il.update(i);break;case q.OPERATIONS_ENUM.UPSERT:o=await il.upsert(i);break;case q.OPERATIONS_ENUM.DELETE:o=await Q_.deleteRecord(i);break;default:dr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){dr.info("Invalid operation in transaction"),dr.error(o)}}a(Tce,"catchup");async function ks(e){dce(e);let t,r;try{r=await rb.addJob(e),t=r.createdJob,dr.info("addJob result",r);let n=new Jq.RunnerMessage(t,e);return await Jq.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 dr.error(s),j_(n,s)}}a(ks,"executeJob");function gce(){let e=new Map;return e.set(q.OPERATIONS_ENUM.INSERT,new Y(il.insert)),e.set(q.OPERATIONS_ENUM.UPDATE,new Y(il.update)),e.set(q.OPERATIONS_ENUM.UPSERT,new Y(il.upsert)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(Mp.searchByConditions)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(nx)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(nx)),e.set(q.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(hce)),e.set(q.OPERATIONS_ENUM.SEARCH,new Y(pce)),e.set(q.OPERATIONS_ENUM.SQL,new Y(mce)),e.set(q.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(ks,Cp.csvDataLoad)),e.set(q.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(ks,Cp.csvFileLoad)),e.set(q.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(ks,Cp.csvURLLoad)),e.set(q.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(ks,Cp.importFromS3)),e.set(q.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(yi.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_DATABASE,new Y(yi.createSchema)),e.set(q.OPERATIONS_ENUM.CREATE_TABLE,new Y(yi.createTable)),e.set(q.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(yi.createAttribute)),e.set(q.OPERATIONS_ENUM.DROP_SCHEMA,new Y(yi.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_DATABASE,new Y(yi.dropSchema)),e.set(q.OPERATIONS_ENUM.DROP_TABLE,new Y(yi.dropTable)),e.set(q.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(yi.dropAttribute)),e.set(q.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(Lp.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(Lp.describeSchema)),e.set(q.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(Lp.describeTable)),e.set(q.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(Lp.describeAll)),e.set(q.OPERATIONS_ENUM.DELETE,new Y(Q_.deleteRecord)),e.set(q.OPERATIONS_ENUM.ADD_USER,new Y(W_.addUser)),e.set(q.OPERATIONS_ENUM.ALTER_USER,new Y(W_.alterUser)),e.set(q.OPERATIONS_ENUM.DROP_USER,new Y(W_.dropUser)),e.set(q.OPERATIONS_ENUM.LIST_USERS,new Y(W_.listUsersExternal)),e.set(q.OPERATIONS_ENUM.LIST_ROLES,new Y(Dp.listRoles)),e.set(q.OPERATIONS_ENUM.ADD_ROLE,new Y(Dp.addRole)),e.set(q.OPERATIONS_ENUM.ALTER_ROLE,new Y(Dp.alterRole)),e.set(q.OPERATIONS_ENUM.DROP_ROLE,new Y(Dp.dropRole)),e.set(q.OPERATIONS_ENUM.USER_INFO,new Y(W_.userInfo)),e.set(q.OPERATIONS_ENUM.READ_LOG,new Y(Zae)),e.set(q.OPERATIONS_ENUM.ADD_NODE,new Y(ece)),e.set(q.OPERATIONS_ENUM.UPDATE_NODE,new Y(Wq)),e.set(q.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(Wq)),e.set(q.OPERATIONS_ENUM.REMOVE_NODE,new Y(tce)),e.set(q.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y(rce)),e.set(q.OPERATIONS_ENUM.PURGE_STREAM,new Y(nce)),e.set(q.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(ex.setConfiguration)),e.set(q.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(sce.clusterStatus)),e.set(q.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(ice)),e.set(q.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(ZO.setRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(ZO.getRoutes)),e.set(q.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(ZO.deleteRoutes)),e.set(q.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(ks,Qq.export_to_s3)),e.set(q.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(ks,Q_.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(ks,Q_.deleteFilesBefore)),e.set(q.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(ks,Qq.export_local)),e.set(q.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(rb.handleGetJobsByStartDate)),e.set(q.OPERATIONS_ENUM.GET_JOB,new Y(rb.handleGetJob)),e.set(q.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(eb.getFingerprint)),e.set(q.OPERATIONS_ENUM.SET_LICENSE,new Y(eb.setLicense)),e.set(q.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(eb.getRegistrationInfo)),e.set(q.OPERATIONS_ENUM.RESTART,new Y(zq.restart)),e.set(q.OPERATIONS_ENUM.RESTART_SERVICE,new Y(zq.restartService)),e.set(q.OPERATIONS_ENUM.CATCHUP,new Y(Tce)),e.set(q.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(cce.systemInformation)),e.set(q.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(ks,Q_.deleteAuditLogsBefore)),e.set(q.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(Xae)),e.set(q.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(Xq.createTokens)),e.set(q.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(Xq.refreshOperationToken)),e.set(q.OPERATIONS_ENUM.LOGIN,new Y(Zq.login)),e.set(q.OPERATIONS_ENUM.LOGOUT,new Y(Zq.logout)),e.set(q.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(ex.getConfiguration)),e.set(q.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(nr.customFunctionsStatus)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(nr.getCustomFunctions)),e.set(q.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(nr.getComponentFile)),e.set(q.OPERATIONS_ENUM.GET_COMPONENTS,new Y(nr.getComponents)),e.set(q.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(nr.setComponentFile)),e.set(q.OPERATIONS_ENUM.DROP_COMPONENT,new Y(nr.dropComponent)),e.set(q.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(nr.getCustomFunction)),e.set(q.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(nr.setCustomFunction)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(nr.dropCustomFunction)),e.set(q.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(nr.addComponent)),e.set(q.OPERATIONS_ENUM.ADD_COMPONENT,new Y(nr.addComponent)),e.set(q.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(nr.dropCustomFunctionProject)),e.set(q.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(nr.packageComponent)),e.set(q.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(nr.packageComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(nr.deployComponent)),e.set(q.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(nr.deployComponent)),e.set(q.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(tx.readTransactionLog)),e.set(q.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(ks,tx.deleteTransactionLogsBefore)),e.set(q.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y(rx.installModules)),e.set(q.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y(rx.auditModules)),e.set(q.OPERATIONS_ENUM.GET_BACKUP,new Y(yi.getBackup)),e}a(gce,"initializeOperationFunctionMap")});var vp=g((uNe,dx)=>{"use strict";var ib=C(),Rce=K(),J_=x(),{handleHDBError:ob,hdb_errors:Up}=ie(),{isMainThread:Ace}=require("worker_threads"),{Readable:Oce}=require("stream"),ux=require("os"),bce=require("util"),Nce=XR(),yce=bce.promisify(Nce.authorize),_x=lx(),{createGzip:Ice,constants:wce}=require("zlib");function Cce(e){let t=`Found an uncaught exception with message: ${e.message}. ${ux.EOL}Stack: ${e.stack} ${ux.EOL}Terminating ${Ace?"HDB":"thread"}.`;console.error(t),J_.fatal(t),process.exit(1)}a(Cce,"handleServerUncaughtException");function Lce(e,t,r){if(J_[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:Up.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(Lce,"serverErrorHandler");function Dce(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=ob(new Error,"Invalid JSON.",Up.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Rce.isEmpty(e.body.operation)){let n=ob(new Error,"Request body must include an 'operation' property.",Up.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Dce,"reqBodyValidationHandler");function Pce(e,t,r){let n;e.body.operation!==ib.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==ib.OPERATIONS_ENUM.LOGIN&&e.body.operation!==ib.OPERATIONS_ENUM.LOGOUT?yce(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{J_.warn(s),J_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(ob(s,i,Up.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(Pce,"authHandler");async function Mce(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=_x.chooseOperation(e.body);let s=await _x.processLocalTransaction(e,n);if(s instanceof Oce&&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(Ice({level:wce.Z_BEST_SPEED})))}return s}catch(s){throw J_.error(s),s}}a(Mce,"handlePostRequest");dx.exports={authHandler:Pce,handlePostRequest:Mce,handleServerUncaughtException:Cce,serverErrorHandler:Lce,reqBodyValidationHandler:Dce}});var px=g((dNe,hx)=>{"use strict";var Uce=require("fastify-plugin"),{handlePostRequest:fx,authHandler:vce,reqBodyValidationHandler:Bce}=vp();async function Hce(e){e.decorate("hdbCore",{preValidation:[Bce,vce],request:t=>Ex(fx(t,response)),requestWithoutAuthentication:(t,r)=>Ex(fx(t,r,!0))})}a(Hce,"hdbCore");async function Ex(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(Ex,"convertAsyncIterators");hx.exports=Uce(Hce)});var Tx=g((hNe,Sx)=>{"use strict";var ENe=require("fs"),ab=X();ab.initSync();var{CONFIG_PARAMS:mx}=C(),Gce=1024*1024*1024;function qce(e){let t=ab.get(mx.HTTP_TIMEOUT),r=ab.get(mx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Gce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(qce,"getServerOptions");Sx.exports=qce});var Ax=g((mNe,Rx)=>{"use strict";var cb=X();cb.initSync();var{CONFIG_PARAMS:gx}=C();function xce(){let e=cb.get(gx.HTTP_CORSACCESSLIST),t=cb.get(gx.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(xce,"getCORSOptions");Rx.exports=xce});var Nx=g((TNe,bx)=>{"use strict";var Ox=X();Ox.initSync();var Fce=C();function kce(){return Ox.get(Fce.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(kce,"getHeaderTimeoutConfig");bx.exports=kce});var ub={};Fe(ub,{customFunctionsServer:()=>Yce,ready:()=>xx,start:()=>Vce});function Vce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Ii||(Ii=qx(t),ot.http((await Ii).server));let o=await Ii,c=(0,lb.dirname)(s),l=(0,lb.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!yx.has(c)){yx.add(c);try{o.register(Wce(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:xx}}async function Yce(){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 Kce();let e=Px.get(Mx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Ii=await qx(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 Kce(){try{Ke.info("Custom Functions starting configuration."),await Ux.setUsersToGlobal(),Ke.info("Custom Functions completed configuration.")}catch(e){Ke.error(e)}}function Wce(e,t){return async function(r){try{Ke.info("Custom Functions starting buildRoutes"),Ke.trace("Loading fastify routes folder "+e),(0,Ix.existsSync)(e)&&r.register(Dx.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 qx(e){Ke.info("Custom Functions starting buildServer.");let t=(0,vx.default)(e),r=(0,wx.default)(t);r.server.headersTimeout=(0,Hx.default)(),r.setErrorHandler(Gx.serverErrorHandler);let n=(0,Bx.default)();return n&&r.register(Cx.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(Lx.default),await r.register($ce),await r.after(),OO(r),Ke.info("Custom Functions completed buildServer."),r}function xx(){if(Ii)return Ii.then?Ii.then(e=>e.ready()):Ii.ready()}var lb,Ix,wx,Cx,Lx,Dx,Px,Mx,Ke,$ce,Ux,vx,Bx,Hx,Gx,Ii,yx,Fx=Ae(()=>{lb=require("path"),Ix=require("fs"),wx=G(require("fastify")),Cx=G(require("@fastify/cors")),Lx=G(DO()),Dx=G(require("@fastify/autoload")),Px=G(X()),Mx=G(C()),Ke=G(x()),$ce=G(px()),Ux=G(Lr()),vx=G(Tx()),Bx=G(Ax()),Hx=G(Nx()),Gx=G(vp());Wc();gr();yx=new Set;a(Vce,"start");a(Yce,"customFunctionsServer");a(Kce,"setUp");a(Wce,"buildRouteFolder");a(qx,"buildServer");a(xx,"ready")});var _b={};Fe(_b,{start:()=>Qce});function Qce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Kx.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){$x||($x=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=kx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Vx.default)(s,(0,Yx.realpathSync)(o))}}return i(s)},{runFirst:!0})),kx.set(r,n)}}}var Vx,Yx,Kx,kx,$x,Wx=Ae(()=>{Vx=G(require("send")),Yx=require("fs"),Kx=G(require("serve-static")),kx=new Map;a(Qce,"start")});var hb={};Fe(hb,{Request:()=>db,createReuseportFd:()=>Bp});var Qx,db,fb,Eb,Bp,Hp=Ae(()=>{Qx=require("os"),db=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 Eb(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 fb(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},fb=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Eb=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,Qx.platform)()!="win32"&&(Bp=require("node-unix-socket").createReuseportFd)});var Xx=g((DNe,Jx)=>{"use strict";var jce=require("cluster"),Ga=X();Ga.initSync();var zx=C(),yNe=require("util"),wi=x(),INe=require("fs"),zce=require("fastify"),wNe=qo(),Jce=require("@fastify/cors"),Xce=require("@fastify/compress"),Zce=require("@fastify/static"),ele=DO(),tle=require("path"),{PACKAGE_ROOT:rle}=C(),nle=Mn(),sle=K(),ile=Lr(),ole=aa(),{server:ale}=(gr(),oe(xo)),{node_request_key:CNe}=(Hp(),oe(hb)),{authHandler:cle,handlePostRequest:lle,serverErrorHandler:ule,reqBodyValidationHandler:_le}=vp(),LNe=require("net"),{registerContentHandlers:dle}=(Wc(),oe(VG)),fle=6e4,Ele=1024*1024*1024,hle="TRUE",{CONFIG_PARAMS:X_}=zx,ol;Jx.exports={hdbServer:jx,start:jx};async function jx(e){try{wi.info("In Fastify server"+process.cwd()),wi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),wi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=jce.isMaster,await ple();let t=e.securePort>0;ol=mle(t),await ol.ready(),e||(e={}),e.isOperationsServer=!0;try{ale.http(ol.server,e),ol.server.closeIdleConnections||await ol.listen({port:0,host:"::"})}catch(r){throw ol.close(),wi.error(r),wi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),wi.fatal(t),process.exit(1)}}a(jx,"operationsServer");async function ple(){wi.trace("Configuring HarperDB process."),nle.setSchemaDataToGlobal(),await ile.setUsersToGlobal(),await ole.getLicense()}a(ple,"setUp");function mle(e){wi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Sle(e),r=zce(t);r.server.headersTimeout=gle(),r.setErrorHandler(ule);let n=Tle();n&&r.register(Jce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(ele),r.register(Xce),r.register(Zce,{root:tle.join(rle,"studio/build-local")}),dle(r);let s=Ga.get(zx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!sle.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[_le,cle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),lle(i,o)}),r.get("/health",()=>"HarperDB is running."),wi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(mle,"buildServer");function Sle(e){let t=Ga.get(X_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ga.get(X_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Ele,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Sle,"getServerOptions");function Tle(){let e=Ga.get(X_.OPERATIONSAPI_NETWORK_CORS),t=Ga.get(X_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===hle)&&(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(Tle,"getCORSOpts");function gle(){return Ga.get(X_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??fle}a(gle,"getHeaderTimeoutConfig")});var Rb={};Fe(Rb,{disableNATS:()=>Ale,publishToStream:()=>xp,setNATSReplicator:()=>pb,setPublishToStream:()=>Ole,setSubscription:()=>gb,start:()=>Rle});function Rle(){Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Nle()}function Ale(e=!0){nF=e}function Ole(e,t){xp=e,gb=t}function Nle(){if(nF||process.env._DISABLE_NATS)return;let e=rn(),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];pb(s,r,i)}}Qg((r,n)=>{pb(r.tableName,r.databaseName,r),n&&iF(r)}),!Zx&&(Zx=!0)}function pb(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 Jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){iF(i)}static subscribe(){let i=new zn;return gb(t,e,i),i}static subscribeOnThisThread(i){return i<(Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??ble)}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 Gp(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=sF;return i}a(n,"getNATSTransaction")}function iF(e){let t=Z_.default.get(ed.default.CONFIG_PARAMS.CLUSTERING_NODENAME);xp(`${Sb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Tb.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 eF,Sb,Tb,tF,rF,Z_,ed,qp,nF,xp,gb,ble,sF,Zx,Gp,mb,oF=Ae(()=>{Te();Jn();eF=G(pt()),Sb=G(et()),Tb=G(_i());kl();tF=G(TR()),rF=G(Ar()),Z_=G(X()),ed=G(C()),qp=G(x());a(Rle,"start");a(Ale,"disableNATS");xp=eF.publishToStream,gb=tF.setSubscription;a(Ole,"setPublishToStream");ble=2;a(Nle,"assignReplicationSource");a(pb,"setNATSReplicator");a(iF,"publishSchema");Gp=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=Z_.default.get(ed.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||(qp.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(xp(`${Sb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Tb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw qp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},mb=class extends Gp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,rF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};sF=new mb});var wb=g(qa=>{"use strict";var{isMainThread:dF,parentPort:rd,threadId:Fp}=require("worker_threads"),{Socket:yle,createServer:Ile}=require("net"),{createServer:wle,IncomingMessage:Cle}=require("http"),{createServer:Lle}=require("https"),{readFileSync:al,unlinkSync:aF,existsSync:Dle}=require("fs"),fr=x(),Le=X(),Tt=C(),{server:Yp}=(gr(),oe(xo)),{WebSocketServer:Ple}=require("ws"),{createServer:Mle}=require("tls"),{getTicketKeys:Ule,restartNumber:vle,getWorkerIndex:$p}=tt(),{Headers:fF,appendHeader:Ble}=(Bu(),oe(CM)),{recordAction:td,recordActionBinary:Hle}=(di(),oe(vu)),{Request:EF,createReuseportFd:cF}=(Hp(),oe(hb)),{checkMemoryLimit:Gle}=aa(),hF=require("tls"),lF=hF.createSecureContext;hF.createSecureContext=function(e){if(!e.cert||!e.key)return lF(e);let t={...e};delete t.key,delete t.cert;let r=lF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var pF=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG);if(pF){let e;if(dF)e=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){fr.info("Could not close debugger",t)}});else{let t=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&$p()>=0&&(e=t+$p())}if(e){let t=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Le.get(Tt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){fr.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){vle<=1&&fr.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:GNe,CONFIG_PARAMS:qle}=Tt;Le.initSync();var xle=Le.get(qle.HTTP_SESSIONAFFINITY),$s={};qa.registerServer=yb;qa.httpServer=Ib;qa.deliverSocket=Nb;qa.startServers=mF;qa.when_components_loaded=null;Yp.http=Ib;Yp.request=Vle;Yp.socket=Yle;Yp.ws=Kle;var Ab={},kp={},Fle,Ao={},Vp={},kle=[],Ob=[];function mF(){return qa.when_components_loaded=Kp().loadRootComponents(!0).then(()=>{rd?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)Nb(n,r,s);else if(t.requestId)$le(t);else if(t.type===Tt.ITC_EVENT_TYPES.SHUTDOWN){fr.trace("received shutdown request",Fp);for(let i in $s){let o=$s[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?fr.info(`Closing ${E.length} idle connections`):f&&fr.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(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&xp()==0)try{lF(Pe.get(yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,qp),o.cantCleanupProperly||_r.warn("Had to forcefully exit the thread",qp),process.exit(0)},5e3).unref()})}if(SF||process.env.DEV_MODE)try{require("inspector").close()}catch(i){_r.info("Could not close debugger",i)}}}).ref();let e=[];if(uF&&!xle)for(let t in Fs){let r=Fs[t];if(isNaN(t)&&xp()==0){Dle(t)&&lF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),_r.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=uF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),_r.trace("Listening on port "+t,qp)}).on("error",i)}))}Promise.all(e).then(()=>{ed?.postMessage({type:yt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(TF,"startServers");EF||TF();function ON(e,t,r){let n=e?.read?e:new yle({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Fs[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=Fs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(_r.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(ON,"deliverSocket");var dF=new Map;function $le(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=dF.get(s),r){case"connection":i=ON(void 0,t),dF.set(s,i),i.write=(c,l,_)=>(ed.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(ed.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),ed.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($le,"proxyRequest");function NN(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=Fs[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",fF),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Fs[t]=e;e.on("unhandled",fF)}a(NN,"registerServer");function gF(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(gF,"getPorts");function bN(e,t){for(let{port:r,secure:n}of gF(t))RF(r,n,t?.isOperationsServer),typeof e=="function"?RN[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,NN(e,r,!1)),Fp[r]=AN(RN,r),Fle=AN(kle,r)}a(bN,"httpServer");function RF(e,t,r){if(!go[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:al(l),ciphers:Pe.get("tls_ciphers"),cert:al(_),ca:u&&al(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Ule()})}let c=qle();go[e]=(t?Lle:wle)(s,async(l,_)=>{try{let d=performance.now(),f=new pF(l,_);r&&(f.isOperationsServer=!0);let E=await Fp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=AF(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 v of E.headers||[])_.setHeader(v[0],v[1]);return l.baseRequest=f,_.baseResponse=E,go[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,R=E.body,g;if(!E.handlesHeaders){let v=E.headers||new hF;R?R.length>=0&&(typeof R=="string"?v.set("Content-Length",Buffer.byteLength(R)):v.set("Content-Length",R.length),g=!0):(v.set("Content-Length","0"),g=!0);let U=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(U+=", miss"),Ble(v,"Server-Timing",U,!0),_.writeHead(h,v&&(v[Symbol.iterator]?Array.from(v):v)),g&&_.end(R)}let A=f.handlerPath,P=f.method;if(Z_(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Hle(h<400,"success",A,P),!g)if(R?.pipe){R.pipe(_),R.destroy&&_.on("close",()=>{R.destroy()});let v=0;R.on("data",U=>{v+=U.length}),R.on("end",()=>{Z_(performance.now()-m,"transfer",A,P),Z_(v,"bytes-sent",A,P)})}else R?.then?R.then(v=>{_.end(v)},u):_.end(R)}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?_r.warn(d):_r.info(d):_r.error(d)}a(u,"onError")}),i&&(go[e].mtlsConfig=i),t&&(go[e].on("secureConnection",l=>{l._parent.startTime&&Z_(performance.now()-l._parent.startTime,"tls-handshake",e),Z_(l.isSessionReused(),"tls-reused",e)}),go[e].isSecure=!0),NN(go[e],e)}return go[e]}a(RF,"getHTTPServer");function AN(e,t){let r=AF;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(AN,"makeCallbackChain");function AF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new hF}}a(AF,"unhandled");function Vle(e,t){bN(e,{requestOnly:!0,...t})}a(Vle,"onRequest");function Yle(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=Mle({ciphers:Pe.get("tls_ciphers"),key:al(n),cert:al(s),ca:i&&al(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),Fs[t.securePort]=r}return t.port&&(r=Ile(e),Fs[t.port]=r),r}a(Yle,"onSocket");Object.defineProperty(Cle.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 Kle(e,t){let r;for(let{port:n,secure:s}of gF(t)){Gp[n]||(Gp[n]=new Ple({server:r=RF(n,s)}),Gp[n].on("connection",async(c,l)=>{try{let _=new pF(l);_.isWebSocket=!0;let u=Fp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=gN[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(_){_r.warn("Error handling WebSocket connection",_)}}),Gp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=gN[n];o||(o=gN[n]=[]),o.push({listener:e,protocol:i}),Fp[n]=AN(RN,n)}return r}a(Kle,"onWebSocket");function fF(e,t){t.writeHead(404),t.end(`Not found
31
- `)}a(fF,"defaultNotFound")});async function yF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await IN.get(e,{returnNonexistent:!0});s=new LN(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await IN.get(e);i&&i.delete()}s=new Yp(e,t)}return n&&(n.id=e,n.user={username:t?.username},td.put(n)),s}function wN(){return Vp++,Vp>65500&&(Vp=1),Vp}function CN(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Yi.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 OF,Ro,NF,bF,IN,td,Vp,Yp,LN,IF=Ne(()=>{ge();Jl();OF=q(Tr()),Ro=q(x());Vo();NF=q(tt()),bF=q(yN());mr();IN=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"}]}}]}),td=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,NF.getWorkerIndex)()===0&&(async()=>{await bF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of td.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await it.getUser(r.user.username)),Ze(r,()=>{try{CN(r,t)}catch{(0,Ro.warn)("Failed to publish will",t)}td.delete(e.id,r)})}})();a(yF,"getSession");Vp=1;a(wN,"getNextMessageId");Yp=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(R=>R.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,Ro.trace)("Resuming subscription from",s,"from",o);let E=Yi.getMatch(_);if(!E){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let R=f.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,R.indexOf("+")===R.length-1)f.onlyChildren=!0,f.url="/"+R.slice(0,R.length-1);else{let g=R.split("/"),A;for(let U=0;U<g.length;U++)if(g[U].indexOf("+")>-1)if(g[U]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let P=!0;g[g.length-1]==="#"&&(g.length--,P=!1),A&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||P&&F.length!==g.length)return!1;for(let H=0;H<g.length;H++)if(g[H]!=="+"&&g[H]!==F[H])return!1;return!0},"filter"));let v=g.indexOf("+");f.url="/"+(v>-1?g.slice(0,v):g).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let R=await m.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let g of R)try{let A;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"&&g.type!=="patch"||n&&!n(g))continue;r?(g.topic=s,A=this.needsAcknowledge(g)):(g.acknowledge?.(),A=wN());let P=g.id;Array.isArray(P)&&(P=cc(P)),P==null&&(P=""),this.listener(h+"/"+P,g.value,A,t)}catch(A){(0,Ro.warn)(A)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=wN();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,CN(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ze(r,async()=>{if(!t){let n=await td.get(this.sessionId,r);n?.doesExist()&&await CN(n,n.data,r)}await td.delete(this.sessionId,r)}).catch(n=>{(0,Ro.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(CN,"publish");LN=class extends Yp{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=wN(),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,Ro.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,OF.getNextMonotonicTime)()),(0,Ro.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),IN.put(this.sessionRecord)),t.qos}}});var MN={};$e(MN,{bypassAuth:()=>Wle,start:()=>Qle});function Wle(){DF=!0}function Qle({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"){pn.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=CF(_,(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=>{pn.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(pn.debug("Received connection for MQTT from",_.remoteAddress),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),(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DN.notify({username:u.username,status:mn.AUTH_AUDIT_STATUS.SUCCESS,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):pn.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){pn.error(E)}else if(l.required)return pn.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&DF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,LF.getSuperUser)(),pn.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=CF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{pn.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function CF(e,t,r,n,s){wF||(wF=!0,Pu(d=>{Kp>0&&d.push({metric:"mqtt-connections",connections:Kp,byThread:!0})}));let i;Kp++;let o,c={protocolVersion:4},l=(0,Wp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Kp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Dn(!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,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DN.notify({username:n.username,status:mn.AUTH_AUDIT_STATUS.SUCCESS,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,rd.get)(mn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DN.error({username:n.username,status:mn.AUTH_AUDIT_STATUS.FAILURE,type:mn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=Pa(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=yF({user:n,...d}),o=await o,s.sessions.add(o)}catch(A){return pn.error(A),Dn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Dn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,v,U)=>{try{let F=A.indexOf("/",1),H=F>0?A.slice(0,F):A;f({cmd:"publish",topic:A,payload:E(P),messageId:v||Math.floor(Math.random()*1e8),qos:U.qos},H)}catch(F){pn.error(F),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let P;try{P=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(v){pn.error(v),P=c.protocolVersion<5?128:v.statusCode===403?135:v.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let P of d.unsubscriptions)A.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:A,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=Pa(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,R)}catch(A){pn.warn(A),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:g===!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),Dn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){pn.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Wp.generate)(h,c);t(S),on(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return po(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Wp,LF,rd,mn,PN,DN,pn,DF,wF,Kp,PF=Ne(()=>{Wp=require("mqtt-packet");IF();LF=q(wr());Wc();ui();mr();rd=q(X()),mn=q(C()),PN=q(x()),DN=(0,PN.loggerWithTag)("auth-event"),pn=(0,PN.loggerWithTag)("mqtt"),DF=(0,rd.get)(mn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Wle,"bypassAuth");a(Qle,"start");Kp=0;a(CF,"onSocket")});var zh={};$e(zh,{component_errors:()=>ll,loadComponent:()=>Qp,loadComponentDirectories:()=>FF,setErrorReporter:()=>Xle});function FF(e,t){t&&(vN=t),e&&(BN=e);let r=[];if((0,Es.existsSync)(UN)){let s=(0,Es.readdirSync)(UN,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,It.join)(UN,o);r.push(Qp(c,vN,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Qp(n,vN,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{xF=!0})}function Xle(e){sd=e}async function Qp(e,t,r,n,s,i){if(!UF.has(e)){UF.set(e,!0),s&&(BN=s);try{let o;n&&(ll=new Map);let c=(0,It.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Es.existsSync)(c)?o=n?(0,GF.getConfigObj)():(0,vF.parseDocument)((0,Es.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=HN;let l=[],_=n;for(let u in o){let d=o[u];if(ll.set(n?u:(0,It.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,A;for(;!(0,Es.existsSync)(A=(0,It.join)(g,"node_modules",u));)if(g=(0,It.dirname)(g),g.length<(0,qF.getHdbBasePath)().length){A=null;break}if(A)f=await Qp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=Jle[u];if(!f)continue;l.push(f);let h=a(g=>(g.origin=r,ft(g)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,R=!m?.https&&m?.port;if(cl.isMainThread&&(f=await f.startOnMainThread?.({server:it,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&m))for(let g of[R,S])try{if(+g&&!MF.includes(g)){let A=qN.get(GN.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&nd.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!Mp)&&(MF.push(g),xN(g,A))}}catch(A){console.error("Error listening on socket",g,A,u)}if(t.isWorker&&(f=await f.start?.({server:it,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),BN.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,HF.handleHDBError)("Can not reference parent directories");let g=(0,It.join)(e,d.files).replace(/\\/g,"/"),A=g.indexOf("/*");if(A>-1&&d.files!==HN[u]?.files&&!(0,Es.existsSync)(g.slice(0,A)))throw new Error(`The path '${g.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,It.basename)(e),v=d.path||"/";v=v.startsWith("/")?v:v.startsWith("./")?"/"+P+v.slice(2):v==="."?"/"+P:"/"+P+"/"+v;let U,F,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",F=(0,It.join)(e,z)}else(H=g.indexOf("/*"))>-1&&(F=g.slice(0,H+1),U=(0,It.relative)(e,F));let j=!1;if(cl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(v,F,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(v,F,t)),j)continue;for(let z of await(0,BF.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Ae}=z;_=!0;let ue=(0,It.relative)(e,J).replace(/\\/g,"/");if(U)if(ue.startsWith(U))ue=ue.slice(U.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 Ee=v+(v.endsWith("/")?"":"/")+ue;try{if(Ae.isFile()){let Me=await zle(J);cl.isMainThread&&await f.setupFile?.(Me,Ee,J,t),t.isWorker&&await f.handleFile?.(Me,Ee,J,t)}else cl.isMainThread&&await f.setupDirectory?.(Ee,J,t),t.isWorker&&await f.handleDirectory?.(Ee,J,t)}catch(Me){Me.message=`Could not load ${Ae.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,sd?.(Me),((0,ul.getWorkerIndex)()===0?console:nd.default).error(Me),t.set(d.path||"/",new id(Me)),ll.set(n?u:(0,It.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,It.basename)(e)}' due to: ${h.message}`,sd?.(h),((0,ul.getWorkerIndex)()===0?console:nd.default).error(h),t.set(d.path||"/",new id(h),null,!0),ll.set(n?u:(0,It.basename)(e),h.message)}}if(cl.isMainThread&&!xF&&i&&(0,ul.watchDir)(e,async()=>FF()),o.extensionModule)return await vE((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?`;sd?.(new Error(u)),((0,ul.getWorkerIndex)()===0?console:nd.default).error(u),ll.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}`,sd?.(o),t.set("",new id(o))}}}var Es,It,cl,vF,qN,GN,BF,ul,nd,HF,qF,jle,GF,zle,UN,BN,xF,vN,ll,Jle,HN,MF,UF,sd,id,Jh=Ne(()=>{Es=require("fs"),It=require("path"),cl=require("worker_threads"),vF=require("yaml"),qN=q(X()),GN=q(C());lU();fU();EU();rG();$x();jx();BF=q(require("fast-glob")),ul=q(tt()),nd=q(x());eR();mr();HF=q(ie());Qn();ge();jp();qF=q(X()),jle=q(eF());Fh();cF();PF();GF=q(Et());Up();({readFile:zle}=Es.promises),UN=qN.get(GN.CONFIG_PARAMS.COMPONENTSROOT),BN=new Map,ll=new Map;a(FF,"loadComponentDirectories");Jle={REST:_p,rest:_p,graphqlSchema:Zg,jsResource:rR,fastifyRoutes:cN,login:sR,static:lN,operationsApi:jle,customFunctions:{},http:{},clustering:TN,authentication:w_,mqtt:MN},HN={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(HN,"static",{value:{files:"web/**"}});MF=[],UF=new Map;a(Xle,"setErrorReporter");a(Qp,"loadComponent");id=class extends jt{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 $p=T((cye,$F)=>{var{isMainThread:kF}=require("worker_threads"),{getTables:Zle}=(ge(),oe(Fe)),{loadComponentDirectories:eue,loadComponent:tue}=(Jh(),oe(zh)),{resetResources:rue}=(Jl(),oe(HI)),nue=jA(),sue=Et(),{dirname:iue}=require("path"),{getConnection:oue}=ht(),aue=X(),cue=C(),FN=new Map;async function lue(e=!1){!kF&&aue.get(cue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&oue();try{kF&&await nue()}catch(n){console.error(n)}let t=rue();Zle(),t.isWorker=e,await tue(iue(sue.getConfigFilePath()),t,"hdb",!0,FN),await eue(FN,t);let r=[];for(let[n]of FN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(lue,"loadRootComponents");$F.exports.loadRootComponents=lue});var tt=T((uye,Oo)=>{"use strict";var{Worker:uue,MessageChannel:_ue,parentPort:ks,isMainThread:KN,threadId:due,workerData:Ii}=require("worker_threads"),{PACKAGE_ROOT:fue}=C(),{join:WF,isAbsolute:Eue,extname:hue}=require("path"),{server:QF}=(mr(),oe(qo)),{watch:pue,readdir:mue}=require("fs/promises"),{totalmem:VF}=require("os"),od=C(),jF=X(),wi=x(),{randomBytes:Sue}=require("crypto"),{_assignPackageExport:Tue}=require("../index"),gue=C(),YF=1024*1024,Ao=[],Fn=[],Rue=50,WN=1e4,Aue="restart",zF="request_thread_info",JF="resource_report",XF="thread_info",ZF="added-port",Oue="ack",kN;Tue("threads",Fn);Oo.exports={startWorker:$N,restartWorkers:jN,shutdownWorkers:wue,workers:Ao,setMonitorListener:Bue,onMessageFromWorkers:Cue,onMessageByType:ok,broadcast:Due,broadcastWithAcknowledgement:Mue,setChildListenerByType:Iue,getWorkerIndex:ek,getWorkerCount:tk,getTicketKeys:nk,setMainIsWorker:bue,setTerminateTimeout:Nue,restartNumber:Ii?.restartNumber||1};Fn.onMessageByType=ok;Fn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Fn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var QN;function Nue(e){WN=e}a(Nue,"setTerminateTimeout");function ek(){return Ii?Ii.workerIndex:QN?0:void 0}a(ek,"getWorkerIndex");function tk(){return Ii?Ii.workerCount:QN?1:void 0}a(tk,"getWorkerCount");function bue(e){QN=e}a(bue,"setMainIsWorker");var rk=1,zp;function nk(){return zp||(zp=KN?Sue(48):Ii.ticketKeys,zp)}a(nk,"getTicketKeys");Object.defineProperty(QF,"workerIndex",{get(){return ek()}});Object.defineProperty(QF,"workerCount",{get(){return tk()}});var sk={[zF](e,t){Uue(t)},[JF](e,t){vue(t,e)}};function $N(e,t={}){let r=process.constrainedMemory?.()||VF();r=Math.min(r,VF(),2e4*YF);let n=jF.get(od.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/YF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Fn){let _=new _ue;_.existingPort=l,i.push(_),o.push(_.port2)}hue(e)||(e+=".js");let c=new uue(Eue(e)?e:WF(fue,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:rk=t.threadCount,name:t.name,restartNumber:Oo.exports.restartNumber,ticketKeys:nk()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:ZF,port:l,threadId:c.threadId},[l]);return Xp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>$N(e,t),c.on("error",l=>{console.error("Worker error:",l),wi.error("Worker error:",l)}),c.on("exit",l=>{Ao.splice(Ao.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rue?(t.unexpectedRestarts=c.unexpectedRestarts+1,$N(e,t)):wi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{sk[l.type]?.(l,c)}),Ao.push(c),que(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a($N,"startWorker");var yue=[od.THREAD_TYPES.HTTP];async function jN(e=null,t=Math.max(rk>3,1),r=!0){if(KN){if(r){let{loadRootComponents:o}=$p();await o()}Oo.exports.restartNumber++,t<1&&(t=t*Ao.length);let n=[],s=[];for(let o of Ao.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Oo.exports.restartNumber,type:od.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=yue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),WN*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===gue.ITC_EVENT_TYPES.CHILD_STARTED&&(wi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");wi.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}=ya();r&&(e==="http"||!e)&&jF.get(od.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ks.postMessage({type:Aue,workerType:e})}a(jN,"restartWorkers");function Iue(e,t){sk[e]=t}a(Iue,"setChildListenerByType");function wue(e){return jN(e,1/0,!1)}a(wue,"shutdownWorkers");var ik=[];function Cue(e){ik.push(e)}a(Cue,"onMessageFromWorkers");var VN=new Map;function ok(e,t){let r=VN.get(e);r||VN.set(e,r=[]),r.push(t)}a(ok,"onMessageByType");var Lue=10;async function Due(e){let t=0;for(let r of Fn)try{r.postMessage(e),t++>Lue&&(t=0,await new Promise(setImmediate))}catch(n){wi.error("Unable to send message to worker",n)}}a(Due,"broadcast");var Jp=new Map,Pue=1;function Mue(e){return new Promise(t=>{let r=0;for(let n of Fn)try{let s=Pue++,i=a(()=>{Jp.delete(s),--r===0&&t(),n!==ks&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Jp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Jp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){wi.error("Unable to send message to worker",s)}r===0&&t()})}a(Mue,"broadcastWithAcknowledgement");function Uue(e){e.postMessage({type:XF,workers:ak()})}a(Uue,"sendThreadInfo");function ak(){let e=Date.now();return Ao.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(ak,"getChildWorkerInfo");function vue(e,t){e.resources=t,e.resources.updated=Date.now()}a(vue,"recordResourceReport");var YN;function Bue(e){YN=e}a(Bue,"setMonitorListener");var Hue=1e3,KF=!1;function que(){KF||(KF=!0,setInterval(()=>{for(let e of Ao){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}YN&&YN()},Hue).unref())}a(que,"startMonitoring");var Gue=1e3;if(ks){Xp(ks);for(let e=0,t=Ii.addPorts.length;e<t;e++){let r=Ii.addPorts[e];r.threadId=Ii.addThreadIds[e],Xp(r)}setInterval(()=>{let e=process.memoryUsage();ks.postMessage({type:JF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Gue).unref(),kN=a(()=>new Promise((e,t)=>{ks.on("message",r),ks.postMessage({type:zF});function r(n){n.type===XF&&(ks.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else kN=ak;Oo.exports.getThreadInfo=kN;function Xp(e,t){Fn.push(e),e.on("message",r=>{if(r.type===ZF)r.port.threadId=r.threadId,Xp(r.port);else if(r.type===Oue){let n=Jp.get(r.id);n&&n()}else{for(let s of ik)s(r,e);let n=VN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){wi.error(i)}}}).on("close",()=>{Fn.splice(Fn.indexOf(e),1)}).on("exit",()=>{Fn.splice(Fn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Xp,"addPort");if(KN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await mue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(WF(n,i.name));try{for await(let{filename:i}of pue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await jN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Oo.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ks.on("message",async e=>{let{type:t}=e;t===od.ITC_EVENT_TYPES.SHUTDOWN&&(Oo.exports.restartNumber=e.restartNumber,ks.unref(),setTimeout(()=>{wi.warn("Thread did not voluntarily terminate",due),process.exit(0)},WN).unref())})});var eb={};$e(eb,{startHTTPThreads:()=>Fue,startSocketServer:()=>xN,updateWorkerIdleness:()=>Ek});async function Fue(e=2,t){if(t)JN(0,1,!0);else{let{loadRootComponents:n}=$p();if(e===0)return(0,No.setMainIsWorker)(!0),await yN().startServers(),Promise.resolve([]);await n()}let r=(0,_k.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{rm.notify(r)},xue).unref());for(let n=0;n<e;n++)JN(n,e);return Promise.all(fk)}function JN(e,t=1,r){if(zN++,(0,No.startWorker)("server/threads/threadServer.js",{name:tm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===tm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});fk.push(s),await s,_l.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=em.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=_l.indexOf(n);o>-1&&_l.splice(o,1)}if(a(i,"removeWorker"),dl){let o=dl;dl=[];for(let c of o)dk[c.localPort](null,c)}}}),r){let n=setInterval(()=>{XN?XN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,No.shutdownWorkers)(),zN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function xN(e=0,t){if(typeof e=="string")try{(0,nm.existsSync)(e)&&(0,nm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=kue:r=$ue(t):r=ZN;let n=(0,fl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=dk[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),XN=!0,r(o,(c,l)=>{if(!c){if(ck){let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});ck.deliverSocket(u,e,l),u.resume()}else zN>0?(dl.length===0&&setTimeout(()=>{dl.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,dl.push(o)):(console.log("start up a dynamic thread to handle request"),JN(0));on(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});Kue(u,c,e)}on(!0,"socket-routed")})};let s=Ho();rm.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 ZN(e,t){let r,n=0;for(let s of _l){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Zp)return Zp=i,t(r);n=i}Zp=0,t(r)}function kue(e,t){let r={};e.getpeername(r);let n=r.address,s=El.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ZN(e,o=>{El.set(n,{worker:o,lastUsed:i}),t(o)})}function $ue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new fl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=El.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);ZN(n,d=>{El.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Ek(){Zp=0;for(let e of _l)e.expectedIdle=e.recentELU.idle+Vue,e.requests=1;_l.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Kue(e,t,r){let n=Yue++;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(),em.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")),em.delete(n)),s.event=="destroy"&&(e.destroy(),em.delete(n))})}var No,fl,tm,rm,nm,uk,_k,_l,dl,dk,ck,zN,fk,xue,XN,Zp,lk,El,Vue,em,Yue,jp=Ne(()=>{No=q(tt()),fl=require("net"),tm=q(C()),rm=q(x()),nm=require("fs");ui();uk=require("worker_threads"),_k=q(aa()),_l=[],dl=[],dk=[],zN=0,fk=[];uk.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});xue=6e5;a(Fue,"startHTTPThreads");a(JN,"startHTTPWorker");a(xN,"startSocketServer");Zp=0;a(ZN,"findMostIdleWorker");lk=36e5,El=new Map;a(kue,"findByRemoteAddressAffinity");a($ue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of El)r.lastUsed+lk<e&&El.delete(t)},lk).unref();Vue=1e3;a(Ek,"updateWorkerIdleness");(0,No.setMonitorListener)(Ek);em=new Map,Yue=1;a(Kue,"proxySocket")});var mk=T((Eye,pk)=>{"use strict";var im=X();im.initSync();var sm=C(),{httpRequest:Wue}=K(),Que=require("path"),hk=require("fs-extra"),jue=require("yaml"),zue={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};pk.exports={cliOperations:Xue,buildRequest:Jue};function Jue(){let e={};for(let t of process.argv){if(zue[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(Jue,"buildRequest");async function Xue(e){await hk.exists(Que.join(im.get(sm.CONFIG_PARAMS.ROOTPATH),sm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await hk.exists(im.get(sm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await Wue({method:"POST",protocol:"http:",socketPath:im.get(sm.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(jue.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(Xue,"cliOperations")});var rb=T((pye,Sk)=>{"use strict";var ad=X();ad.initSync();var hl=require("fs-extra"),tb=require("path"),pl=C(),Zue=require("crypto"),e_e=require("uuid").v4;Sk.exports=t_e;function t_e(){if(ad.getHdbBasePath()!==void 0){let e=tb.join(ad.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=tb.join(ad.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=tb.join(ad.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{hl.accessSync(r),hl.accessSync(e),hl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=e_e(),i=Zue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});hl.writeFileSync(r,s),hl.writeFileSync(e,i.privateKey),hl.writeFileSync(t,i.publicKey)}else throw n}}}a(t_e,"checkJWTTokenExist")});var gk=T((Sye,Tk)=>{"use strict";var nb=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};Tk.exports={HdbInfoInsertObject:nb}});var Ok=T((gye,Ak)=>{"use strict";var Rk=C(),sb=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Rk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Rk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Ak.exports={UpgradeObject:sb}});var om=T((Aye,bk)=>{"use strict";var kn=require("prompt"),ml=require("chalk"),Nk=x(),hs=require("os"),ib=vo(),ob=["yes","y"];async function r_e(e){let t=`${hs.EOL}`+ml.bold.green("Your current HarperDB version requires that we complete an update process.")+`${hs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${hs.EOL}${hs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${hs.EOL}`;kn.override=ib(["CONFIRM_UPGRADE"]),kn.start(),kn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:ml.magenta(`${hs.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 kn.get([r])}catch(s){return Nk.error("There was an error when prompting user about an upgrade."),Nk.error(s),!1}return ob.includes(n.CONFIRM_UPGRADE)}a(r_e,"forceUpdatePrompt");async function n_e(e){let t=`${hs.EOL}`+ml.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.${hs.EOL}`);kn.override=ib(["CONFIRM_DOWNGRADE"]),kn.start(),kn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:ml.magenta(`${hs.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 kn.get([r]);return ob.includes(n.CONFIRM_DOWNGRADE)}a(n_e,"forceDowngradePrompt");async function s_e(){let e=`${hs.EOL}`+ml.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");kn.override=ib(["GENERATE_CERTS"]),kn.start(),kn.message=e;let t={properties:{GENERATE_CERTS:{description:ml.magenta(`${hs.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 kn.get([t]);return ob.includes(r.GENERATE_CERTS)}a(s_e,"upgradeCertsPrompt");bk.exports={forceUpdatePrompt:r_e,forceDowngradePrompt:n_e,upgradeCertsPrompt:s_e}});var cb=T((Nye,yk)=>{"use strict";var ab=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};yk.exports=ab});var wk=T((Lye,Ik)=>{"use strict";var i_e=K(),o_e=Et(),yye=x(),Iye=require("path"),wye=require("fs"),Cye=C();Ik.exports={getOldPropsValue:a_e};function a_e(e,t,r=!1){let n=t.getRaw(e);return i_e.isNotEmptyAndHasValue(n)?n:r?o_e.getDefaultConfig(e):""}a(a_e,"getOldPropsValue")});var Pk=T((Pye,Dk)=>{"use strict";var bo=require("path"),yo=require("fs-extra"),c_e=require("properties-reader"),l_e=cb(),wt=x(),{getOldPropsValue:We}=wk(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:xa}=C(),Fa=Et(),am=X(),Ck=K(),$s=C(),lb=new l_e("3.1.0"),Lk=[];function u_e(){let e=c_e(am.get(se.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.
30
+ `))}},25).unref()}o.close?.(()=>{if(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&$p()==0)try{aF(Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Fp),o.cantCleanupProperly||fr.warn("Had to forcefully exit the thread",Fp),process.exit(0)},5e3).unref()})}if(pF||process.env.DEV_MODE)try{require("inspector").close()}catch(i){fr.info("Could not close debugger",i)}}}).ref();let e=[];if(cF&&!xle)for(let t in $s){let r=$s[t];if(isNaN(t)&&$p()==0){Dle(t)&&aF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),fr.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=cF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),fr.trace("Listening on port "+t,Fp)}).on("error",i)}))}Promise.all(e).then(()=>{rd?.postMessage({type:Tt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(mF,"startServers");dF||mF();function Nb(e,t,r){let n=e?.read?e:new yle({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=$s[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=$s[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(fr.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(Nb,"deliverSocket");var uF=new Map;function $le(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=uF.get(s),r){case"connection":i=Nb(void 0,t),uF.set(s,i),i.write=(c,l,_)=>(rd.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(rd.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),rd.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($le,"proxyRequest");function yb(e,t,r=!0){!+t&&t!==Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),10));let n=$s[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",_F),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else $s[t]=e;e.on("unhandled",_F)}a(yb,"registerServer");function SF(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=[],Le.get(Tt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_PORT),secure:Le.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Le.get(Tt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Le.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(SF,"getPorts");function Ib(e,t){for(let{port:r,secure:n}of SF(t))TF(r,n,t?.isOperationsServer),typeof e=="function"?Ob[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,yb(e,r,!1)),Vp[r]=bb(Ob,r),Fle=bb(kle,r)}a(Ib,"httpServer");function TF(e,t,r){if(!Ao[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Le.get(n+"_keepAliveTimeout"),headersTimeout:Le.get(n+"_headersTimeout"),requestTimeout:Le.get(n+"_timeout")},i=Le.get(n+"_mtls"),o=Le.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=Le.get(n+"tls_privateKey"),_=Le.get(n+"tls_certificate"),u=Le.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:al(l),ciphers:Le.get("tls_ciphers"),cert:al(_),ca:u&&al(u),rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Ule(),maxHeaderSize:Le.get(Tt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)})}let c=Gle();Ao[e]=(t?Lle:wle)(s,async(l,_)=>{try{let d=performance.now(),f=new EF(l,_);r&&(f.isOperationsServer=!0);let E=await Vp[e](f);if(!E){if(f._nodeResponse.statusCode)return;E=gF(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 v of E.headers||[])_.setHeader(v[0],v[1]);return l.baseRequest=f,_.baseResponse=E,Ao[e].emit("unhandled",l,_)}let h=E.status||200,m=performance.now(),S=m-d,R=E.body,T;if(!E.handlesHeaders){let v=E.headers||new fF;R?R.length>=0&&(typeof R=="string"?v.set("Content-Length",Buffer.byteLength(R)):v.set("Content-Length",R.length),T=!0):(v.set("Content-Length","0"),T=!0);let U=`hdb;dur=${S.toFixed(2)}`;E.wasCacheMiss&&(U+=", miss"),Ble(v,"Server-Timing",U,!0),_.writeHead(h,v&&(v[Symbol.iterator]?Array.from(v):v)),T&&_.end(R)}let A=f.handlerPath,P=f.method;if(td(S,"duration",A,P,E.wasCacheMiss==null?void 0:E.wasCacheMiss?"cache-miss":"cache-hit"),Hle(h<400,"success",A,P),!T)if(R?.pipe){R.pipe(_),R.destroy&&_.on("close",()=>{R.destroy()});let v=0;R.on("data",U=>{v+=U.length}),R.on("end",()=>{td(performance.now()-m,"transfer",A,P),td(v,"bytes-sent",A,P)})}else R?.then?R.then(v=>{_.end(v)},u):_.end(R)}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?fr.warn(d):fr.info(d):fr.error(d)}a(u,"onError")}),i&&(Ao[e].mtlsConfig=i),t&&(Ao[e].on("secureConnection",l=>{l._parent.startTime&&td(performance.now()-l._parent.startTime,"tls-handshake",e),td(l.isSessionReused(),"tls-reused",e)}),Ao[e].isSecure=!0),yb(Ao[e],e)}return Ao[e]}a(TF,"getHTTPServer");function bb(e,t){let r=gF;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(bb,"makeCallbackChain");function gF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new fF}}a(gF,"unhandled");function Vle(e,t){Ib(e,{requestOnly:!0,...t})}a(Vle,"onRequest");function Yle(e,t){let r;if(t.securePort){let n=Le.get("tls_privateKey"),s=Le.get("tls_certificate"),i=t.mtls?.certificateAuthority||Le.get("tls_certificateAuthority");r=Mle({ciphers:Le.get("tls_ciphers"),key:al(n),cert:al(s),ca:i&&al(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),$s[t.securePort]=r}return t.port&&(r=Ile(e),$s[t.port]=r),r}a(Yle,"onSocket");Object.defineProperty(Cle.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 Kle(e,t){let r;for(let{port:n,secure:s}of SF(t)){kp[n]||(kp[n]=new Ple({server:r=TF(n,s)}),kp[n].on("connection",async(c,l)=>{try{let _=new EF(l);_.isWebSocket=!0;let u=Vp[n](_),d=l.headers["sec-websocket-protocol"]||"",f=Ab[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(_){fr.warn("Error handling WebSocket connection",_)}}),kp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=Ab[n];o||(o=Ab[n]=[]),o.push({listener:e,protocol:i}),Vp[n]=bb(Ob,n)}return r}a(Kle,"onWebSocket");function _F(e,t){t.writeHead(404),t.end(`Not found
31
+ `)}a(_F,"defaultNotFound")});async function bF({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await Cb.get(e,{returnNonexistent:!0});s=new Pb(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await Cb.get(e);i&&i.delete()}s=new Qp(e,t)}return n&&(n.id=e,n.user={username:t?.username},nd.put(n)),s}function Lb(){return Wp++,Wp>65500&&(Wp=1),Wp}function Db(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Qi.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 RF,Oo,AF,OF,Cb,nd,Wp,Qp,Pb,NF=Ae(()=>{Te();Jl();RF=G(Ar()),Oo=G(x());Yo();AF=G(tt()),OF=G(wb());gr();Cb=Et({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"}]}}]}),nd=Et({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,AF.getWorkerIndex)()===0&&(async()=>{await OF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of nd.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ot.getUser(r.user.username)),Ze(r,()=>{try{Db(r,t)}catch{(0,Oo.warn)("Failed to publish will",t)}nd.delete(e.id,r)})}})();a(bF,"getSession");Wp=1;a(Lb,"getNextMessageId");Qp=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(R=>R.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,Oo.trace)("Resuming subscription from",s,"from",o);let E=Qi.getMatch(_);if(!E){let R=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw R.statusCode=404,R}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let R=f.url.slice(1);if(R.indexOf("#")>-1&&R.indexOf("#")!==R.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,R.indexOf("+")===R.length-1)f.onlyChildren=!0,f.url="/"+R.slice(0,R.length-1);else{let T=R.split("/"),A;for(let U=0;U<T.length;U++)if(T[U].indexOf("+")>-1)if(T[U]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let P=!0;T[T.length-1]==="#"&&(T.length--,P=!1),A&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||P&&F.length!==T.length)return!1;for(let H=0;H<T.length;H++)if(T[H]!=="+"&&T[H]!==F[H])return!1;return!0},"filter"));let v=T.indexOf("+");f.url="/"+(v>-1?T.slice(0,v):T).concat("").join("/")}}let h=E.path,m=E.Resource,S=await Ze(f,async()=>{let R=await m.subscribe(f);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let T of R)try{let A;if(T.type&&T.type!=="put"&&T.type!=="delete"&&T.type!=="message"&&T.type!=="patch"||n&&!n(T))continue;r?(T.topic=s,A=this.needsAcknowledge(T)):(T.acknowledge?.(),A=Lb());let P=T.id;Array.isArray(P)&&(P=cc(P)),P==null&&(P=""),this.listener(h+"/"+P,T.value,A,t)}catch(A){(0,Oo.warn)(A)}})(),R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=Lb();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,Db(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ze(r,async()=>{if(!t){let n=await nd.get(this.sessionId,r);n?.doesExist()&&await Db(n,n.data,r)}await nd.delete(this.sessionId,r)}).catch(n=>{(0,Oo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(Db,"publish");Pb=class extends Qp{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=Lb(),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,Oo.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,RF.getNextMonotonicTime)()),(0,Oo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),Cb.put(this.sessionRecord)),t.qos}}});var vb={};Fe(vb,{bypassAuth:()=>Wle,start:()=>Qle});function Wle(){CF=!0}function Qle({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"){Sn.debug("Received WSS connection for MQTT from",_._socket.remoteAddress);let{onMessage:f,onClose:E}=IF(_,(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=>{Sn.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(Sn.debug("Received connection for MQTT from",_.remoteAddress),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),(0,sd.get)(Tn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mb.notify({username:u.username,status:Tn.AUTH_AUDIT_STATUS.SUCCESS,type:Tn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})):Sn.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(E){Sn.error(E)}else if(l.required)return Sn.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&CF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,wF.getSuperUser)(),Sn.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:f}=IF(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{Sn.info("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function IF(e,t,r,n,s){yF||(yF=!0,Uu(d=>{jp>0&&d.push({metric:"mqtt-connections",connections:jp,byThread:!0})}));let i;jp++;let o,c={protocolVersion:4},l=(0,zp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){jp--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),Un(!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 ot.getUser(d.username,d.password.toString(),r),(0,sd.get)(Tn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Mb.notify({username:n.username,status:Tn.AUTH_AUDIT_STATUS.SUCCESS,type:Tn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,sd.get)(Tn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Mb.error({username:n.username,status:Tn.AUTH_AUDIT_STATUS.FAILURE,type:Tn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let A=e.deserialize||(e.deserialize=Pa(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?A(d.will.payload):void 0,delete d.will.payload}o=bF({user:n,...d}),o=await o,s.sessions.add(o)}catch(A){return Sn.error(A),Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:A.code||5,returnCode:A.code||128})}Un(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((A,P,v,U)=>{try{let F=A.indexOf("/",1),H=F>0?A.slice(0,F):A;f({cmd:"publish",topic:A,payload:E(P),messageId:v||Math.floor(Math.random()*1e8),qos:U.qos},H)}catch(F){Sn.error(F),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let A of d.subscriptions){let P;try{P=(await o.addSubscription(A,A.qos>=1)).qos||0}catch(v){Sn.error(v),P=c.protocolVersion<5?128:v.statusCode===403?135:v.statusCode===404?143:128}h.push(P)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let A=[];for(let P of d.unsubscriptions)A.push(o.removeSubscription(P)?0:17);f({cmd:"unsuback",granted:A,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=Pa(r?.headers.get?.("content-type"))),R=d.payload?.length>0?S(d.payload):void 0,T;try{T=await o.publish(d,R)}catch(A){Sn.warn(A),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),Un(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){Sn.error(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,zp.generate)(h,c);t(S),ln(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return So(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var zp,wF,sd,Tn,Ub,Mb,Sn,CF,yF,jp,LF=Ae(()=>{zp=require("mqtt-packet");NF();wF=G(Lr());Wc();di();gr();sd=G(X()),Tn=G(C()),Ub=G(x()),Mb=(0,Ub.loggerWithTag)("auth-event"),Sn=(0,Ub.loggerWithTag)("mqtt"),CF=(0,sd.get)(Tn.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Wle,"bypassAuth");a(Qle,"start");jp=0;a(IF,"onSocket")});var Zh={};Fe(Zh,{component_errors:()=>ll,loadComponent:()=>Jp,loadComponentDirectories:()=>qF,setErrorReporter:()=>Xle});function qF(e,t){t&&(Hb=t),e&&(Gb=e);let r=[];if((0,ps.existsSync)(Bb)){let s=(0,ps.readdirSync)(Bb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ct.join)(Bb,o);r.push(Jp(c,Hb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Jp(n,Hb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{GF=!0})}function Xle(e){od=e}async function Jp(e,t,r,n,s,i){if(!PF.has(e)){PF.set(e,!0),s&&(Gb=s);try{let o;n&&(ll=new Map);let c=(0,Ct.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(c)?o=n?(0,HF.getConfigObj)():(0,MF.parseDocument)((0,ps.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=qb;let l=[],_=n;for(let u in o){let d=o[u];if(ll.set(n?u:(0,Ct.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let T=e,A;for(;!(0,ps.existsSync)(A=(0,Ct.join)(T,"node_modules",u));)if(T=(0,Ct.dirname)(T),T.length<(0,BF.getHdbBasePath)().length){A=null;break}if(A)f=await Jp(A,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=Jle[u];if(!f)continue;l.push(f);let h=a(T=>(T.origin=r,Et(T)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,R=!m?.https&&m?.port;if(cl.isMainThread&&(f=await f.startOnMainThread?.({server:ot,ensureTable:h,port:R,securePort:S,resources:t,...d})||f,n&&m))for(let T of[R,S])try{if(+T&&!DF.includes(T)){let A=xb.get(Fb.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);A&&id.default.warn("Session affinity is not recommended and may cause memory leaks"),(A||!Bp)&&(DF.push(T),kb(T,A))}}catch(A){console.error("Error listening on socket",T,A,u)}if(t.isWorker&&(f=await f.start?.({server:ot,ensureTable:h,port:R,securePort:S,resources:t,...d})||f),Gb.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,vF.handleHDBError)("Can not reference parent directories");let T=(0,Ct.join)(e,d.files).replace(/\\/g,"/"),A=T.indexOf("/*");if(A>-1&&d.files!==qb[u]?.files&&!(0,ps.existsSync)(T.slice(0,A)))throw new Error(`The path '${T.slice(0,A)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let P=(0,Ct.basename)(e),v=d.path||"/";v=v.startsWith("/")?v:v.startsWith("./")?"/"+P+v.slice(2):v==="."?"/"+P:"/"+P+"/"+v;let U,F,H;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",F=(0,Ct.join)(e,z)}else(H=T.indexOf("/*"))>-1&&(F=T.slice(0,H+1),U=(0,Ct.relative)(e,F));let j=!1;if(cl.isMainThread&&f.setupDirectory&&(j=await f.setupDirectory?.(v,F,t)),t.isWorker&&f.handleDirectory&&(j=await f.handleDirectory?.(v,F,t)),j)continue;for(let z of await(0,UF.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:J,dirent:Ee}=z;_=!0;let ue=(0,Ct.relative)(e,J).replace(/\\/g,"/");if(U)if(ue.startsWith(U))ue=ue.slice(U.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 he=v+(v.endsWith("/")?"":"/")+ue;try{if(Ee.isFile()){let Me=await zle(J);cl.isMainThread&&await f.setupFile?.(Me,he,J,t),t.isWorker&&await f.handleFile?.(Me,he,J,t)}else cl.isMainThread&&await f.setupDirectory?.(he,J,t),t.isWorker&&await f.handleDirectory?.(he,J,t)}catch(Me){Me.message=`Could not load ${Ee.isFile()?"file":"directory"} '${J}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Me.message}`,od?.(Me),((0,ul.getWorkerIndex)()===0?console:id.default).error(Me),t.set(d.path||"/",new ad(Me)),ll.set(n?u:(0,Ct.basename)(e),Me.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,Ct.basename)(e)}' due to: ${h.message}`,od?.(h),((0,ul.getWorkerIndex)()===0?console:id.default).error(h),t.set(d.path||"/",new ad(h),null,!0),ll.set(n?u:(0,Ct.basename)(e),h.message)}}if(cl.isMainThread&&!GF&&i&&(0,ul.watchDir)(e,async()=>qF()),o.extensionModule)return await GE((0,Ct.join)(e,o.extensionModule));if(!_&&t.isWorker){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;od?.(new Error(u)),((0,ul.getWorkerIndex)()===0?console:id.default).error(u),ll.set((0,Ct.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,od?.(o),t.set("",new ad(o))}}}var ps,Ct,cl,MF,xb,Fb,UF,ul,id,vF,BF,jle,HF,zle,Bb,Gb,GF,Hb,ll,Jle,qb,DF,PF,od,ad,ep=Ae(()=>{ps=require("fs"),Ct=require("path"),cl=require("worker_threads"),MF=require("yaml"),xb=G(X()),Fb=G(C());aU();_U();dU();eq();Fx();Wx();UF=G(require("fast-glob")),ul=G(tt()),id=G(x());rR();gr();vF=G(ie());Jn();Te();Xp();BF=G(X()),jle=G(Xx());Vh();oF();LF();HF=G(ht());Hp();({readFile:zle}=ps.promises),Bb=xb.get(Fb.CONFIG_PARAMS.COMPONENTSROOT),Gb=new Map,ll=new Map;a(qF,"loadComponentDirectories");Jle={REST:Ep,rest:Ep,graphqlSchema:tR,jsResource:sR,fastifyRoutes:ub,login:oR,static:_b,operationsApi:jle,customFunctions:{},http:{},clustering:Rb,authentication:L_,mqtt:vb},qb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(qb,"static",{value:{files:"web/**"}});DF=[],PF=new Map;a(Xle,"setErrorReporter");a(Jp,"loadComponent");ad=class extends Jt{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 Kp=g((uye,FF)=>{var{isMainThread:xF}=require("worker_threads"),{getTables:Zle}=(Te(),oe(ke)),{loadComponentDirectories:eue,loadComponent:tue}=(ep(),oe(Zh)),{resetResources:rue}=(Jl(),oe(GI)),nue=JA(),sue=ht(),{dirname:iue}=require("path"),{getConnection:oue}=pt(),aue=X(),cue=C(),$b=new Map;async function lue(e=!1){!xF&&aue.get(cue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&oue();try{xF&&await nue()}catch(n){console.error(n)}let t=rue();Zle(),t.isWorker=e,await tue(iue(sue.getConfigFilePath()),t,"hdb",!0,$b),await eue($b,t);let r=[];for(let[n]of $b)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(lue,"loadRootComponents");FF.exports.loadRootComponents=lue});var tt=g((dye,No)=>{"use strict";var{Worker:uue,MessageChannel:_ue,parentPort:Vs,isMainThread:Qb,threadId:due,workerData:Ci}=require("worker_threads"),{PACKAGE_ROOT:fue}=C(),{join:YF,isAbsolute:Eue,extname:hue}=require("path"),{server:KF}=(gr(),oe(xo)),{watch:pue,readdir:mue}=require("fs/promises"),{totalmem:kF}=require("os"),cd=C(),WF=X(),Li=x(),{randomBytes:Sue}=require("crypto"),{_assignPackageExport:Tue}=require("../index"),gue=C(),$F=1024*1024,bo=[],Vn=[],Rue=50,jb=1e4,Aue="restart",QF="request_thread_info",jF="resource_report",zF="thread_info",JF="added-port",Oue="ack",Vb;Tue("threads",Vn);No.exports={startWorker:Yb,restartWorkers:Jb,shutdownWorkers:wue,workers:bo,setMonitorListener:Bue,onMessageFromWorkers:Cue,onMessageByType:sk,broadcast:Due,broadcastWithAcknowledgement:Mue,setChildListenerByType:Iue,getWorkerIndex:XF,getWorkerCount:ZF,getTicketKeys:tk,setMainIsWorker:Nue,setTerminateTimeout:bue,restartNumber:Ci?.restartNumber||1};Vn.onMessageByType=sk;Vn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Vn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var zb;function bue(e){jb=e}a(bue,"setTerminateTimeout");function XF(){return Ci?Ci.workerIndex:zb?0:void 0}a(XF,"getWorkerIndex");function ZF(){return Ci?Ci.workerCount:zb?1:void 0}a(ZF,"getWorkerCount");function Nue(e){zb=e}a(Nue,"setMainIsWorker");var ek=1,Zp;function tk(){return Zp||(Zp=Qb?Sue(48):Ci.ticketKeys,Zp)}a(tk,"getTicketKeys");Object.defineProperty(KF,"workerIndex",{get(){return XF()}});Object.defineProperty(KF,"workerCount",{get(){return ZF()}});var rk={[QF](e,t){Uue(t)},[jF](e,t){vue(t,e)}};function Yb(e,t={}){let r=process.constrainedMemory?.()||kF();r=Math.min(r,kF(),2e4*$F);let n=WF.get(cd.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/$F/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Vn){let _=new _ue;_.existingPort=l,i.push(_),o.push(_.port2)}hue(e)||(e+=".js");let c=new uue(Eue(e)?e:YF(fue,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:ek=t.threadCount,name:t.name,restartNumber:No.exports.restartNumber,ticketKeys:tk()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:JF,port:l,threadId:c.threadId},[l]);return tm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Yb(e,t),c.on("error",l=>{console.error("Worker error:",l),Li.error("Worker error:",l)}),c.on("exit",l=>{bo.splice(bo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rue?(t.unexpectedRestarts=c.unexpectedRestarts+1,Yb(e,t)):Li.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{rk[l.type]?.(l,c)}),bo.push(c),Gue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Yb,"startWorker");var yue=[cd.THREAD_TYPES.HTTP];async function Jb(e=null,t=Math.max(ek>3,1),r=!0){if(Qb){if(r){let{loadRootComponents:o}=Kp();await o()}No.exports.restartNumber++,t<1&&(t=t*bo.length);let n=[],s=[];for(let o of bo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Li.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:No.exports.restartNumber,type:cd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=yue.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),jb*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===gue.ITC_EVENT_TYPES.CHILD_STARTED&&(Li.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Li.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}=ya();r&&(e==="http"||!e)&&WF.get(cd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Vs.postMessage({type:Aue,workerType:e})}a(Jb,"restartWorkers");function Iue(e,t){rk[e]=t}a(Iue,"setChildListenerByType");function wue(e){return Jb(e,1/0,!1)}a(wue,"shutdownWorkers");var nk=[];function Cue(e){nk.push(e)}a(Cue,"onMessageFromWorkers");var Kb=new Map;function sk(e,t){let r=Kb.get(e);r||Kb.set(e,r=[]),r.push(t)}a(sk,"onMessageByType");var Lue=10;async function Due(e){let t=0;for(let r of Vn)try{r.postMessage(e),t++>Lue&&(t=0,await new Promise(setImmediate))}catch(n){Li.error("Unable to send message to worker",n)}}a(Due,"broadcast");var em=new Map,Pue=1;function Mue(e){return new Promise(t=>{let r=0;for(let n of Vn)try{let s=Pue++,i=a(()=>{em.delete(s),--r===0&&t(),n!==Vs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,em.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of em)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Li.error("Unable to send message to worker",s)}r===0&&t()})}a(Mue,"broadcastWithAcknowledgement");function Uue(e){e.postMessage({type:zF,workers:ik()})}a(Uue,"sendThreadInfo");function ik(){let e=Date.now();return bo.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(ik,"getChildWorkerInfo");function vue(e,t){e.resources=t,e.resources.updated=Date.now()}a(vue,"recordResourceReport");var Wb;function Bue(e){Wb=e}a(Bue,"setMonitorListener");var Hue=1e3,VF=!1;function Gue(){VF||(VF=!0,setInterval(()=>{for(let e of bo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Wb&&Wb()},Hue).unref())}a(Gue,"startMonitoring");var que=1e3;if(Vs){tm(Vs);for(let e=0,t=Ci.addPorts.length;e<t;e++){let r=Ci.addPorts[e];r.threadId=Ci.addThreadIds[e],tm(r)}setInterval(()=>{let e=process.memoryUsage();Vs.postMessage({type:jF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},que).unref(),Vb=a(()=>new Promise((e,t)=>{Vs.on("message",r),Vs.postMessage({type:QF});function r(n){n.type===zF&&(Vs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Vb=ik;No.exports.getThreadInfo=Vb;function tm(e,t){Vn.push(e),e.on("message",r=>{if(r.type===JF)r.port.threadId=r.threadId,tm(r.port);else if(r.type===Oue){let n=em.get(r.id);n&&n()}else{for(let s of nk)s(r,e);let n=Kb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Li.error(i)}}}).on("close",()=>{Vn.splice(Vn.indexOf(e),1)}).on("exit",()=>{Vn.splice(Vn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(tm,"addPort");if(Qb){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await mue(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(YF(n,i.name));try{for await(let{filename:i}of pue(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Jb(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");No.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Vs.on("message",async e=>{let{type:t}=e;t===cd.ITC_EVENT_TYPES.SHUTDOWN&&(No.exports.restartNumber=e.restartNumber,Vs.unref(),setTimeout(()=>{Li.warn("Thread did not voluntarily terminate",due),process.exit(0)},jb).unref())})});var rN={};Fe(rN,{startHTTPThreads:()=>Fue,startSocketServer:()=>kb,updateWorkerIdleness:()=>dk});async function Fue(e=2,t){if(t)Zb(0,1,!0);else{let{loadRootComponents:n}=Kp();if(e===0)return(0,yo.setMainIsWorker)(!0),await wb().startServers(),Promise.resolve([]);await n()}let r=(0,lk.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{im.notify(r)},xue).unref());for(let n=0;n<e;n++)Zb(n,e);return Promise.all(_k)}function Zb(e,t=1,r){if(Xb++,(0,yo.startWorker)("server/threads/threadServer.js",{name:sm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===sm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});_k.push(s),await s,_l.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=nm.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=_l.indexOf(n);o>-1&&_l.splice(o,1)}if(a(i,"removeWorker"),dl){let o=dl;dl=[];for(let c of o)uk[c.localPort](null,c)}}}),r){let n=setInterval(()=>{eN?eN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,yo.shutdownWorkers)(),Xb=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function kb(e=0,t){if(typeof e=="string")try{(0,om.existsSync)(e)&&(0,om.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=kue:r=$ue(t):r=tN;let n=(0,fl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=uk[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),eN=!0,r(o,(c,l)=>{if(!c){if(ok){let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});ok.deliverSocket(u,e,l),u.resume()}else Xb>0?(dl.length===0&&setTimeout(()=>{dl.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,dl.push(o)):(console.log("start up a dynamic thread to handle request"),Zb(0));ln(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new fl.Socket({handle:o,writable:!0,readable:!0});Kue(u,c,e)}ln(!0,"socket-routed")})};let s=qo();im.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 tN(e,t){let r,n=0;for(let s of _l){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=rm)return rm=i,t(r);n=i}rm=0,t(r)}function kue(e,t){let r={};e.getpeername(r);let n=r.address,s=El.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);tN(e,o=>{El.set(n,{worker:o,lastUsed:i}),t(o)})}function $ue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new fl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=El.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);tN(n,d=>{El.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function dk(){rm=0;for(let e of _l)e.expectedIdle=e.recentELU.idle+Vue,e.requests=1;_l.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Kue(e,t,r){let n=Yue++;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(),nm.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")),nm.delete(n)),s.event=="destroy"&&(e.destroy(),nm.delete(n))})}var yo,fl,sm,im,om,ck,lk,_l,dl,uk,ok,Xb,_k,xue,eN,rm,ak,El,Vue,nm,Yue,Xp=Ae(()=>{yo=G(tt()),fl=require("net"),sm=G(C()),im=G(x()),om=require("fs");di();ck=require("worker_threads"),lk=G(aa()),_l=[],dl=[],uk=[],Xb=0,_k=[];ck.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});xue=6e5;a(Fue,"startHTTPThreads");a(Zb,"startHTTPWorker");a(kb,"startSocketServer");rm=0;a(tN,"findMostIdleWorker");ak=36e5,El=new Map;a(kue,"findByRemoteAddressAffinity");a($ue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of El)r.lastUsed+ak<e&&El.delete(t)},ak).unref();Vue=1e3;a(dk,"updateWorkerIdleness");(0,yo.setMonitorListener)(dk);nm=new Map,Yue=1;a(Kue,"proxySocket")});var hk=g((pye,Ek)=>{"use strict";var cm=X();cm.initSync();var am=C(),{httpRequest:Wue}=K(),Que=require("path"),fk=require("fs-extra"),jue=require("yaml"),zue={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};Ek.exports={cliOperations:Xue,buildRequest:Jue};function Jue(){let e={};for(let t of process.argv){if(zue[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(Jue,"buildRequest");async function Xue(e){await fk.exists(Que.join(cm.get(am.CONFIG_PARAMS.ROOTPATH),am.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await fk.exists(cm.get(am.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await Wue({method:"POST",protocol:"http:",socketPath:cm.get(am.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(jue.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(Xue,"cliOperations")});var sN=g((Sye,pk)=>{"use strict";var ld=X();ld.initSync();var hl=require("fs-extra"),nN=require("path"),pl=C(),Zue=require("crypto"),e_e=require("uuid").v4;pk.exports=t_e;function t_e(){if(ld.getHdbBasePath()!==void 0){let e=nN.join(ld.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=nN.join(ld.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=nN.join(ld.getHdbBasePath(),pl.LICENSE_KEY_DIR_NAME,pl.JWT_ENUM.JWT_PASSPHRASE_NAME);try{hl.accessSync(r),hl.accessSync(e),hl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=e_e(),i=Zue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});hl.writeFileSync(r,s),hl.writeFileSync(e,i.privateKey),hl.writeFileSync(t,i.publicKey)}else throw n}}}a(t_e,"checkJWTTokenExist")});var Sk=g((gye,mk)=>{"use strict";var iN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};mk.exports={HdbInfoInsertObject:iN}});var Rk=g((Aye,gk)=>{"use strict";var Tk=C(),oN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Tk.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Tk.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};gk.exports={UpgradeObject:oN}});var lm=g((bye,Ok)=>{"use strict";var Yn=require("prompt"),ml=require("chalk"),Ak=x(),ms=require("os"),aN=Ho(),cN=["yes","y"];async function r_e(e){let t=`${ms.EOL}`+ml.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ms.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ms.EOL}${ms.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ms.EOL}`;Yn.override=aN(["CONFIRM_UPGRADE"]),Yn.start(),Yn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:ml.magenta(`${ms.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 Yn.get([r])}catch(s){return Ak.error("There was an error when prompting user about an upgrade."),Ak.error(s),!1}return cN.includes(n.CONFIRM_UPGRADE)}a(r_e,"forceUpdatePrompt");async function n_e(e){let t=`${ms.EOL}`+ml.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.${ms.EOL}`);Yn.override=aN(["CONFIRM_DOWNGRADE"]),Yn.start(),Yn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:ml.magenta(`${ms.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 Yn.get([r]);return cN.includes(n.CONFIRM_DOWNGRADE)}a(n_e,"forceDowngradePrompt");async function s_e(){let e=`${ms.EOL}`+ml.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");Yn.override=aN(["GENERATE_CERTS"]),Yn.start(),Yn.message=e;let t={properties:{GENERATE_CERTS:{description:ml.magenta(`${ms.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 Yn.get([t]);return cN.includes(r.GENERATE_CERTS)}a(s_e,"upgradeCertsPrompt");Ok.exports={forceUpdatePrompt:r_e,forceDowngradePrompt:n_e,upgradeCertsPrompt:s_e}});var uN=g((yye,bk)=>{"use strict";var lN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};bk.exports=lN});var yk=g((Pye,Nk)=>{"use strict";var i_e=K(),o_e=ht(),wye=x(),Cye=require("path"),Lye=require("fs"),Dye=C();Nk.exports={getOldPropsValue:a_e};function a_e(e,t,r=!1){let n=t.getRaw(e);return i_e.isNotEmptyAndHasValue(n)?n:r?o_e.getDefaultConfig(e):""}a(a_e,"getOldPropsValue")});var Lk=g((Uye,Ck)=>{"use strict";var Io=require("path"),wo=require("fs-extra"),c_e=require("properties-reader"),l_e=uN(),Lt=x(),{getOldPropsValue:We}=yk(),{HDB_SETTINGS_NAMES:se,CONFIG_PARAMS:xa}=C(),Fa=ht(),um=X(),Ik=K(),Ys=C(),_N=new l_e("3.1.0"),wk=[];function u_e(){let e=c_e(um.get(se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Lt.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
  ${se.HDB_ROOT_KEY} = ${We(se.HDB_ROOT_KEY,e)}
@@ -94,14 +94,14 @@ ${se.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Fa.getDefaultConfig(xa.CUSTOMFUNCTIONS_EN
94
94
  ;The port used to access the custom functions server.
95
95
  ${se.CUSTOM_FUNCTIONS_PORT_KEY} = ${Fa.getDefaultConfig(xa.HTTP_PORT)}
96
96
  ;The path to the folder containing HarperDB custom function files.
97
- ${se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${bo.join(We(se.HDB_ROOT_KEY,e),"custom_functions")}
97
+ ${se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Io.join(We(se.HDB_ROOT_KEY,e),"custom_functions")}
98
98
  ;Set the max number of processes HarperDB will start for the Custom Functions server
99
99
  ${se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Fa.getDefaultConfig(xa.HTTP_THREADS)}
100
- `,n=am.get("settings_path"),s=bo.dirname(n),i=bo.join(s,"3_1_0_upgrade_settings.bak");try{wt.info(`Backing up old settings file to: ${i}`),yo.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}'`),yo.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),yo.copySync(i,n),c}am.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),wt.info(o),o}a(u_e,"updateSettingsFile_3_1_0");function __e(){let e=bo.join(Ck.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),t=bo.join(Ck.getHomeDir(),$s.HDB_HOME_DIR_NAME,$s.LICENSE_KEY_DIR_NAME,$s.REG_KEY_FILE_NAME),r=bo.join(am.getHdbBasePath(),$s.LICENSE_KEY_DIR_NAME,$s.LICENSE_FILE_NAME),n=bo.join(r,$s.LICENSE_FILE_NAME),s=bo.join(r,$s.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),yo.mkdirpSync(r);try{yo.accessSync(e);try{let c="Moving licence file";console.log(c),wt.info(c),yo.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{yo.accessSync(t);try{let c="Moving registration file";console.log(c),wt.info(c),yo.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(__e,"moveLicenseFiles");lb.sync_functions.push(u_e);lb.sync_functions.push(__e);Lk.push(lb);Dk.exports=Lk});var Hk=T((Uye,Bk)=>{"use strict";var Sn=Ve(),{insertRecords:d_e}=Wo(),f_e=Tr(),Io=_t(),E_e=K(),Ci=x(),h_e=K(),Vs=require("fs-extra"),Li=require("path"),p_e=require("cli-progress"),cd=require("assert"),m_e=require("pino"),S_e=X();Bk.exports=T_e;var cm,Mk,lm,ub,dr,ld=!1;async function T_e(e=!0){return cm=S_e.getHdbBasePath(),Mk=Li.join(cm,"schema"),lm=Li.join(cm,"4_0_0_upgrade_tmp"),ub=Li.join(cm,"transactions"),console.info("Reindexing upgrade started for schemas"),Ci.notify("Reindexing upgrade started for schemas"),await Uk(Mk,!1,e),await Vs.pathExists(ub)&&(console.info(`
100
+ `,n=um.get("settings_path"),s=Io.dirname(n),i=Io.join(s,"3_1_0_upgrade_settings.bak");try{Lt.info(`Backing up old settings file to: ${i}`),wo.copySync(n,i)}catch(c){throw Lt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Lt.info("New settings file values for 3.1.0 upgrade:",r),Lt.info(`Creating new/upgraded settings file at '${n}'`),wo.writeFileSync(n,r),Lt.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."),Lt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Lt.error(c),wo.copySync(i,n),c}um.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Lt.info(o),o}a(u_e,"updateSettingsFile_3_1_0");function __e(){let e=Io.join(Ik.getHomeDir(),Ys.HDB_HOME_DIR_NAME,Ys.LICENSE_KEY_DIR_NAME,Ys.LICENSE_FILE_NAME),t=Io.join(Ik.getHomeDir(),Ys.HDB_HOME_DIR_NAME,Ys.LICENSE_KEY_DIR_NAME,Ys.REG_KEY_FILE_NAME),r=Io.join(um.getHdbBasePath(),Ys.LICENSE_KEY_DIR_NAME,Ys.LICENSE_FILE_NAME),n=Io.join(r,Ys.LICENSE_FILE_NAME),s=Io.join(r,Ys.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Lt.info(i);let o="Creating .license directory";console.log(o),Lt.info(o),wo.mkdirpSync(r);try{wo.accessSync(e);try{let c="Moving licence file";console.log(c),Lt.info(c),wo.moveSync(e,n);let l="License file successfully moved.";console.log(l),Lt.info(l)}catch{let l="moving license file failed";console.error(l),Lt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Lt.warn(l)}try{wo.accessSync(t);try{let c="Moving registration file";console.log(c),Lt.info(c),wo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Lt.info(l)}catch{let l="moving registration file failed";console.error(l),Lt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Lt.warn(l)}}a(__e,"moveLicenseFiles");_N.sync_functions.push(u_e);_N.sync_functions.push(__e);wk.push(_N);Ck.exports=wk});var vk=g((Bye,Uk)=>{"use strict";var gn=Ve(),{insertRecords:d_e}=Wo(),f_e=Ar(),Co=at(),E_e=K(),Di=x(),h_e=K(),Ks=require("fs-extra"),Pi=require("path"),p_e=require("cli-progress"),ud=require("assert"),m_e=require("pino"),S_e=X();Uk.exports=T_e;var _m,Dk,dm,dN,Er,_d=!1;async function T_e(e=!0){return _m=S_e.getHdbBasePath(),Dk=Pi.join(_m,"schema"),dm=Pi.join(_m,"4_0_0_upgrade_tmp"),dN=Pi.join(_m,"transactions"),console.info("Reindexing upgrade started for schemas"),Di.notify("Reindexing upgrade started for schemas"),await Pk(Dk,!1,e),await Ks.pathExists(dN)&&(console.info(`
101
101
 
102
- Reindexing upgrade started for transaction logs`),Ci.notify("Reindexing upgrade started for transaction logs"),await Uk(ub,!0,e)),Ci.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(ld?", but errors occurred":"")}a(T_e,"reindexUpgrade");async function Uk(e,t,r){let n=await Vs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Li.join(e,o.toString());if(o===".DS_Store")continue;let l=await Vs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Vs.statSync(Li.join(c,d)).isDirectory())try{await g_e(o,d,t),dr.info(`Reindexing started for ${o}.${d}`),Ci.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await A_e(o,d,c,t,r),dr.info(`Reindexing completed for ${o}.${d}`),Ci.notify(`Reindexing completed for ${o}.${d}`)}catch(f){ld=!0,f.schema_path=c,f.table_name=d,Ci.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Ci.error(f),dr.error(f),console.error(f)}}}if(!ld)try{await Vs.rm(lm,{recursive:!0})}catch{}}a(Uk,"processTables");async function g_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Li.join(lm,s);await Vs.ensureDir(lm),await Vs.writeFile(i,""),dr=m_e({level:"debug",formatters:{bindings(){}}},i)}a(g_e,"initPinoLogger");var R_e=20;async function A_e(e,t,r,n,s){let i;try{i=await Sn.openEnvironment(r,t,n)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Ci.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`),dr.error(g);return}throw g}let o=b_e(i.dbis),c=Sn.openDBI(i,o),l=Object.keys(i.dbis),_=Sn.statDBI(i,o);dr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new p_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 Sn.createEnvironment(r,t,!1);Sn.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),n||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>R_e&&await E();await E()}catch(g){throw ld=!0,dr.error(g),g}async function E(){let g,A=f.map(({value:v})=>v);n?g=await Promise.all(A.map(v=>O_e(d,v))):g=await d_e(d,o,l.filter(v=>v!=="__blob__"),A,!1);for(let v=0,U=f.length;v<U;v++){let{key:F,value:H}=f[v];dr.info(`Record hash value: ${F} hash: ${o}`);let j;n?j=g[v]:j=g.written_hashes.indexOf(F)>-1,cd(j,!0),N_e(d,o,H[o],n),dr.info(`Insert success, written hashes: ${g.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Ci.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),dr.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=Sn.statDBI(i,o),m=Sn.statDBI(d,o);if(dr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),cd.deepStrictEqual(h.entryCount,m.entryCount),await Sn.closeEnvironment(i),await Sn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let g=Li.join(r,t),A=Li.join(g,"data.mdb"),P=Li.join(g,"lock.mdb");await Vs.unlink(A),await Vs.unlink(P),await Vs.rmdir(g),dr.info(`Deleted old environment files from schema folder: ${A}, ${P}`)}let S=await Sn.openEnvironment(r,t),R=Sn.statDBI(S,o);dr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(R)}`),cd.deepStrictEqual(R.entryCount,m.entryCount),await Sn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(A_e,"processTable");async function O_e(e,t){Sn.initializeDBIs(e,Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Io.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),h_e.isEmpty(t.user_name)||e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(O_e,"insertTransaction");function N_e(e,t,r,n){let i=e.dbis[t].get(r);cd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Io.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&&!E_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];vk(e,c,d,r)}else vk(e,c,l,r)}a(N_e,"validateIndices");function vk(e,t,r,n){try{let s=!1,i=f_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||dr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),cd.deepStrictEqual(s,!0)}catch(s){ld=!0,dr.error(s),console.error(s)}}a(vk,"validateIndex");function b_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(b_e,"getHashDBI")});var _m=T((Bye,Gk)=>{"use strict";var y_e=require("mkcert"),um=require("path"),_b=require("fs-extra"),db=x(),I_e=X(),fb=C(),Sl=fg(),w_e=vo(),C_e=Et();Gk.exports={generateKeys:L_e,updateConfigCert:qk};async function L_e(){let e=I_e.getHdbBasePath(),t=um.join(e,fb.LICENSE_KEY_DIR_NAME),r=await y_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Sl.CERTIFICATE_VALUES.key,caCert:Sl.CERTIFICATE_VALUES.cert}),n=um.join(t,Sl.CERTIFICATE_PEM_NAME),s=um.join(t,Sl.PRIVATEKEY_PEM_NAME),i=um.join(t,Sl.CA_PEM_NAME);try{await _b.writeFile(n,r.cert)}catch(o){throw db.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await _b.writeFile(s,r.key)}catch(o){throw db.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await _b.writeFile(i,Sl.CERTIFICATE_VALUES.cert)}catch(o){throw db.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}qk(n,s,i)}a(L_e,"generateKeys");function qk(e,t,r){let n=w_e(Object.keys(fb.CONFIG_PARAM_MAP),!0),s=fb.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()]),C_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(qk,"updateConfigCert")});var Vk=T((Gye,$k)=>{"use strict";var dm=require("path"),wo=require("fs-extra"),D_e=cb(),ka=x(),xk=Et(),Eb=X(),ps=C(),fm=K(),P_e=require("properties-reader"),M_e=Zn(),U_e=rh(),v_e=nr(),qye=require("util"),B_e=v_e.searchByValue,H_e=br(),q_e=Oh(),G_e=et(),x_e=Hk(),Fk=_m(),F_e=om(),dd=new D_e("4.0.0"),kk=[],ud,_d;async function k_e(){try{if(await F_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),ud){let t=fm.changeExtension(ud,".bak");await wo.move(ud,t)}if(_d){let t=fm.changeExtension(_d,".bak");await wo.move(_d,t)}await Fk.generateKeys()}else console.log("Using existing certificates."),Fk.updateConfigCert(ud,_d,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(k_e,"generateNewKeys");async function $_e(){console.log("Updating HarperDB nodes."),ka.info("Updating HarperDB nodes.");let e=[];try{let t=new M_e(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await B_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!G_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:ps.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(fm.isEmptyOrZeroLength(n))return;let s=new U_e(ps.SYSTEM_SCHEMA_NAME,ps.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await H_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{q_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($_e,"updateNodes");async function V_e(){let e=Eb.get(ps.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(dm.join("config","settings.js"))){ka.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),ka.info(t);let r=dm.dirname(e),n=Eb.get(ps.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=dm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=dm.join(n,ps.HDB_CONFIG_FILE);try{ka.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),wo.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{ka.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ka.info("Updating env variables with new settings values");let d=xk.initOldConfig(e);ud=d[ps.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],_d=d[ps.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],xk.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=fm.getPropsFilePath();wo.accessSync(o,wo.constants.F_OK|wo.constants.R_OK);let l=P_e(o).get(ps.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
103
- install_user = ${l}`;try{wo.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{Eb.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{wo.removeSync(r),console.log(u),ka.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");dd.async_functions.push(V_e);dd.async_functions.push(k_e);dd.async_functions.push(x_e);dd.async_functions.push($_e);kk.push(dd);$k.exports=kk});var hb=T((Fye,Qk)=>{"use strict";var $a=K(),Y_e=C(),Yk=x(),{DATA_VERSION:K_e,UPGRADE_VERSION:W_e}=Y_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Kk=Pk(),Em=Vk(),Va=new Map;Kk&&Kk.forEach(e=>{Va.set(e.version,e)});Em&&Em.forEach(e=>{Va.set(e.version,e)});Em&&Em.forEach(e=>{Va.set(e.version,e)});function Q_e(){return[...Va.keys()].sort($a.compareVersions)}a(Q_e,"getSortedVersions");function Wk(e){let t=e[K_e],r=e[W_e];return $a.isEmptyOrZeroLength(t)||$a.isEmptyOrZeroLength(r)?(Yk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Yk.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."),[]):[...Va.keys()].sort($a.compareVersions).filter(function(n){return $a.compareVersions(n,t)>0&&$a.compareVersions(n,r)<=0})}a(Wk,"getVersionsForUpgrade");function j_e(e){return Wk(e).length>0}a(j_e,"hasUpgradesRequired");function z_e(e){return $a.isEmptyOrZeroLength(e)?null:Va.has(e)?Va.get(e):null}a(z_e,"getDirectiveByVersion");Qk.exports={getSortedVersions:Q_e,getDirectiveByVersion:z_e,getVersionsForUpgrade:Wk,hasUpgradesRequired:j_e}});var hm=T(($ye,Zk)=>{"use strict";var J_e=require("util"),pb=require("chalk"),X_e=require("os"),zk=br(),Z_e=nr(),Tn=C(),Jk=gk(),Sb=cg(),{UpgradeObject:jk}=Ok(),{forceDowngradePrompt:ede}=om(),tde=Fi(),fd=x(),Tl=K(),Tb=Ln(),rde=(ge(),oe(Fe)),nde=hb(),sde=J_e.promisify(Tb.setSchemaDataToGlobal),ide=Z_e.searchByValue,ode="info_id",ade="2.9.9",cde="3.0.0";async function lde(e){let t=new Jk.HdbInfoInsertObject(1,e,e),r=new Sb.InsertObject(Tn.OPERATIONS_ENUM.INSERT,Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return Tb.setSchemaDataToGlobal(),zk.insert(r)}a(lde,"insertHdbInstallInfo");async function mb(e){let t,r=await Xk(),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 Jk.HdbInfoInsertObject(i,e,e);let o=new Sb.InsertObject(Tn.OPERATIONS_ENUM.INSERT,Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await sde(),zk.insert(o)}a(mb,"insertHdbUpgradeInfo");async function Xk(){let e=new Sb.NoSQLSeachObject(Tn.SYSTEM_SCHEMA_NAME,Tn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ode,Tn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await ide(e))}catch(r){fd.info(r)}return t}a(Xk,"getAllHdbInfoRecords");async function ude(){let e=await Xk();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(ude,"getLatestHdbInfoRecord");async function _de(){fd.info("Checking if HDB software has been updated");try{let e=tde.version(),t=await ude(),r;if(Tl.isEmpty(t))r=ade;else if(r=t.data_version_num,Tl.compareVersions(r.toString(),e.toString())>0){if(!Tl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(pb.yellow(`This instance's data was last run on version ${r}`)),console.error(pb.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.${X_e.EOL}${Tn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Tl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(pb.yellow(`This instance's data was last run on version ${r}`)),await ede(new jk(r,e))?await mb(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(Tb.setSchemaDataToGlobal(),dde(r),e.toString()===r.toString())return;let n=new jk(r,e);if(nde.hasUpgradesRequired(n))return n;Tl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await mb(n.upgrade_version),fd.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw fd.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),fd.fatal(e),e}}a(_de,"getVersionUpdateInfo");function dde(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 ${Tn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in rde.databases.system))throw console.log(t),new Error(t);if(!Tl.isEmpty(e)&&e<cde)throw console.log(t),new Error(t)}a(dde,"checkIfInstallIsSupported");Zk.exports={insertHdbInstallInfo:lde,insertHdbUpgradeInfo:mb,getVersionUpdateInfo:_de}});var s$=T((Yye,n$)=>{"use strict";var gb=require("joi"),{boolean:fde,string:e$,number:Ede}=gb.types(),t$=require("fs-extra"),Ed=C(),r$=require("path"),hde=rt();n$.exports=pde;function pde(e){let t=e$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=gb.object({[Ed.INSTALL_PROMPTS.ROOTPATH]:gb.custom(mde),[Ed.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Ede.min(0).allow("null",null),[Ed.INSTALL_PROMPTS.TC_AGREEMENT]:e$.valid("yes","YES","Yes"),[Ed.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ed.INSTALL_PROMPTS.CLUSTERING_ENABLED]:fde});return hde.validateBySchema(e,r)}a(pde,"installValidator");function mde(e,t){if(t$.existsSync(r$.join(e,"system/hdb_user/data.mdb"))||t$.existsSync(r$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(mde,"validateRootAvailable")});var o$=T((Wye,i$)=>{"use strict";var{mkdirpSync:Sde}=require("fs-extra"),Ys=require("path"),gl=C(),Ab=x(),Tde=Cn(),Rb=ri(),gde=ze();i$.exports=Rde;async function Rde(e){Ab.trace("Mounting HarperDB"),ms(e),ms(Ys.join(e,"backup")),ms(Ys.join(e,"trash")),ms(Ys.join(e,"keys")),ms(Ys.join(e,"keys",gl.LICENSE_FILE_NAME)),ms(Ys.join(e,"log")),ms(Ys.join(e,"doc")),ms(Ys.join(e,"database")),ms(Ys.join(e,gl.TRANSACTIONS_DIR_NAME)),ms(Ys.join(e,"clustering","leaf")),ms(Ys.join(e,"components")),await Ade()}a(Rde,"mountHdb");async function Ade(){let e=hu(),t=Object.keys(Rb);for(let r=0;r<t.length;r++){let n=t[r],s=Rb[n].hash_attribute;try{gde.initSystemSchemaPaths(gl.SYSTEM_SCHEMA_NAME,n);let i=new e(gl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=Rb[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Tde.createTable(n,i)}catch(i){throw Ab.error(`issue creating environment for ${gl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Ade,"createLMDBTables");function ms(e){Sde(e,{mode:gl.HDB_FILE_PERMISSIONS}),Ab.info(`Directory ${e} created`)}a(ms,"makeDirectory")});var mm=T((jye,m$)=>{"use strict";var Nb=require("os"),u$=require("inquirer"),$n=require("fs-extra"),Ode=require("properties-reader"),Ya=require("chalk"),Qs=require("path"),Nde=require("human-readable-ids").hri,bde=require("ora"),yde=require("yaml"),Ct=x(),Do=X(),hd=K(),pm=vo(),_$=hm(),d$=Fi(),ne=C(),Ide=s$(),wde=o$(),bb=Et(),Cde=wr(),Lde=ZE(),Dde=rb(),Pde=Ln(),Mde=require("util").promisify,Ude=Mde(Pde.setSchemaDataToGlobal),vde=_m(),Rl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),fr=a(e=>Ya.magenta.bold(e),"HDB_PROMPT_MSG"),Bde="https://harperdb.io/legal/end-user-license-agreement",Po=Nb.EOL,Co="",Hde="yes",a$="Starting HarperDB install...",c$="HarperDB installation was successful.",l$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",qde="An out of date version of HarperDB is already installed.",Ob="It appears that HarperDB is already installed. Exiting install...",Gde="Aborting install",xde=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])$/),Fde=new RegExp(/^[^\s.,*>]+$/),kde=Nb.homedir(),$de=Qs.join(kde,ne.HDB_ROOT_DIR_NAME),Vde=9925,Yde="HDB_ADMIN",Kde="CLUSTER_USER",kr={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:"},Al=pm([ne.INSTALL_PROMPTS.HDB_CONFIG]),Ws,f$=!1;m$.exports=E$;E$.createSuperUser=p$;async function E$(){console.log(fr(Po+a$+Po)),Ct.notify(a$);let e;Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Wde());let t=jde();Object.assign(t,e);let r=Ide(t);if(r)throw r.message;await zde(),await Jde(t);let n=await Qde(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),Ws=n[ne.INSTALL_PROMPTS.ROOTPATH],Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Qs.dirname(Al[ne.INSTALL_PROMPTS.HDB_CONFIG])===Ws&&(f$=!0),!Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await $n.pathExists(Qs.join(Ws,ne.HDB_CONFIG_FILE))&&(console.error(Ob),process.exit());let s=bde({prefixText:fr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),hd.isEmpty(Ws))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Do.setHdbBasePath(Ws),await wde(Ws),await Xde(),await Zde(n),Ct.initLogSettings(!0),await p$(n),await tfe(n),await vde.generateKeys(),await rfe(),Dde(),s.stop(),console.log(fr(Po+c$+Po)),Ct.notify(c$)}a(E$,"install");function Wde(){let e=yde.parseDocument($n.readFileSync(Al[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=bb.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Wde,"getConfigFromFile");async function Qde(e){Ct.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Rl,when:Lo(e[ne.INSTALL_PROMPTS.ROOTPATH],kr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:Co,default:$de,validate:async s=>Ks(s)?Ks(s):await $n.pathExists(Qs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:fr(kr.DESTINATION)},{type:"input",transformer:Rl,when:Lo(e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],kr.HDB_PORT),name:ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Co,default:Vde,validate:s=>xde.test(s)?!0:"Invalid port.",message:fr(kr.HDB_PORT)},{type:"input",transformer:Rl,when:Lo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],kr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Co,default:Yde,validate:s=>Ks(s)?Ks(s):(t=s,!0),message:fr(kr.HDB_USERNAME)},{type:"password",when:Lo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],kr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Co,validate:s=>Ks(s)?Ks(s):!0,message:fr(kr.HDB_PASS)}];if(hd.autoCastBoolean(e[ne.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Rl,when:Lo(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],kr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Co,default:Nde.random(),validate:i=>Fde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:fr(kr.NODE_NAME)},{type:"input",transformer:Rl,when:Lo(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],kr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Co,default:Kde,validate:i=>Ks(i)?Ks(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:fr(kr.CLUSTER_USERNAME)},{type:"password",when:Lo(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],kr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Co,validate:i=>Ks(i)?Ks(i):!0,message:fr(kr.CLUSTER_PASS)}];r.push(...s)}let n=await u$.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(Qde,"installPrompts");function Lo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${fr(t)} ${Ya.gray("[hidden]")}`),Ct.trace(`${fr(t)} [hidden]`)):(console.log(`${fr(t)} ${e}`),Ct.trace(`${fr(t)} ${e}`)),!1):!0}a(Lo,"displayCmdEnvVar");function Ks(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ks,"checkForEmptyValue");function jde(){let e=Object.keys(ne.INSTALL_PROMPTS),t=pm(e),r=pm(Object.keys(ne.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ne.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(jde,"checkForPromptOverride");async function zde(){Ct.trace("Checking for existing install.");let e=hd.getPropsFilePath(),t=await $n.pathExists(e),r;if(t){Ct.trace(`Install found an existing boot prop file at:${e}`);let n=Ode(e),s=bb.getConfigValue(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await $n.pathExists(s)}if(!t&&hd.noBootFile()&&(r=!0),r){if(Ct.trace(`Install found existing HDB config at:${e}`),await _$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${d$.version()}. Exiting install...`;console.log(Po+Ya.magenta.bold(qde)),console.log(Ya.magenta.bold(s)),Ct.error(s)}else console.log(Po+Ya.magenta.bold(Ob)),Ct.error(Ob);process.exit(0)}}a(zde,"checkForExistingInstall");async function Jde(e){Ct.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Bde}${Po}and can be viewed by typing or copying and pasting the URL into your web browser.${Po}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Co,transformer:Rl,when:Lo(e[ne.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ne.INSTALL_PROMPTS.TC_AGREEMENT,message:fr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Ya.yellow("Please enter 'yes' or 'no'")},n=await u$.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Hde&&(console.log(Ya.yellow(l$)),Ct.error(l$),process.exit(0))}a(Jde,"termsAgreement");async function Xde(){let e=Qs.join(Ws,ne.HDB_CONFIG_FILE),t;try{t=Nb.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=hd.getHomeDir(),s=Qs.join(n,ne.HDB_HOME_DIR_NAME),i=Qs.join(s,ne.LICENSE_KEY_DIR_NAME);try{$n.mkdirpSync(s,{mode:ne.HDB_FILE_PERMISSIONS}),$n.mkdirpSync(i,{mode:ne.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ne.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Qs.join(s,ne.BOOT_PROPS_FILE_NAME);try{await $n.writeFile(o,r)}catch(c){throw Ct.error(`There was an error creating the boot file at path: ${o}`),c}Do.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Do.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Do.setProperty(Do.BOOT_PROPS_FILE_PATH,o)}}a(Xde,"createBootPropertiesFile");async function Zde(e){Ct.trace("Creating HarperDB config file");let t=pm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{bb.createConfigFile(t),Do.initSync()}catch(r){efe(r)}}a(Zde,"createConfigFile");function efe(e){Ct.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Gde);let t=Qs.resolve(Do.get(Do.BOOT_PROPS_FILE_PATH),"../");t&&$n.removeSync(t),Ws&&(f$?$n.readdirSync(Ws,{withFileTypes:!0}).forEach(n=>{let s=Qs.join(n.path,n.name);s!==Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&$n.removeSync(s)}):$n.removeSync(Ws)),process.exit(1)}a(efe,"rollbackInstall");async function h$(e,t){Ct.trace("Creating admin user"),await Ude();let r;try{r=await Lde.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 Cde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(h$,"createAdminUser");async function p$(e){Ct.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await h$(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(p$,"createSuperUser");async function tfe(e){Ct.trace("Creating Cluster user.");let t;e[ne.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ne.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await h$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(tfe,"createClusterUser");async function rfe(){let e=d$.version();if(e)await _$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(rfe,"insertHdbVersionInfo")});var g$=T((Jye,T$)=>{"use strict";var yb=K(),gn=x(),S$=hb();T$.exports={processDirectives:nfe};async function nfe(e){console.log("Starting upgrade process...");let t=S$.getVersionsForUpgrade(e),r=ofe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;gn.notify(c),console.log(c);let l=[],_=[];try{l=sfe(o.sync_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await ife(o.async_functions)}catch(u){throw gn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(nfe,"processDirectives");function sfe(e){if(yb.isEmptyOrZeroLength(e))return gn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return gn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(gn.info(`Running function ${r.name}`),!(r instanceof Function)){gn.info("Variable being processed is not a function");continue}let n=r();gn.info(n),t.push(n)}return t}a(sfe,"runSyncFunctions");async function ife(e){if(yb.isEmptyOrZeroLength(e))return gn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return gn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(gn.info(`Running function ${s.name}`),!(s instanceof Function)){gn.info("Variable being processed is not a function");continue}let i=await s();gn.info(i),t.push(i)}return t}a(ife,"runAsyncFunctions");function ofe(e){if(yb.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=S$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(ofe,"getUpgradeDirectivesToInstall")});var Cb=T((Zye,y$)=>{"use strict";var Sm=X();Sm.initSync();var N$=require("chalk"),R$=require("fs-extra"),Pi=x(),Di=C(),A$=Fi(),afe=g$(),Ib=K(),b$=hm(),cfe=om(),O$=Wm(),lfe=Ln(),ufe=require("util").promisify,_fe=ufe(lfe.setSchemaDataToGlobal),wb,{UPGRADE_VERSION:Tm}=Di.UPGRADE_JSON_FIELD_NAMES_ENUM;y$.exports={upgrade:dfe};async function dfe(e){await _fe(),wb===void 0&&(wb=Vc()),R$.existsSync(Sm.get(Sm.BOOT_PROPS_FILE_PATH))||(pd("The hdb_boot_properties file was not found. Please install HDB.",Di.LOG_LEVELS.ERROR),process.exit(1)),R$.existsSync(Sm.get(Di.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(pd("The hdb settings file was not found. Please make sure HDB is installed.",Di.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await b$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),pd(`This version of HarperDB is ${A$.version()}`,Di.LOG_LEVELS.INFO);let r=t[Tm]?t[Tm]:A$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Di.HDB_SUPPORT_ADDRESS}`),Pi.notify("Missing new version field from upgrade info object"),process.exit(1)),await ffe();let n,s=0;try{n=await cfe.forceUpdatePrompt(t)}catch(i){Pi.error("There was an error when prompting user about upgrade."),Pi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Pi.info(`Starting upgrade to version ${r}`),await Efe(t),pd(`HarperDB was successfully upgraded to version ${t[Tm]}`,Di.LOG_LEVELS.INFO)}a(dfe,"upgrade");async function ffe(){let e=!1,t=await O$.findPs(Di.HDB_PROC_NAME);if(Ib.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await O$.findPs("hdb_express");Ib.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await wb.list();Ib.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(N$.red(r)),Pi.error(r),process.exit(1)}}a(ffe,"checkIfRunning");async function Efe(e){try{await afe.processDirectives(e)}catch(t){throw pd("There was an error during the data upgrade. Please check the logs.",Di.LOG_LEVELS.ERROR),t}try{await b$.insertHdbUpgradeInfo(e[Tm])}catch(t){Pi.error("Error updating the 'hdb_info' system table."),Pi.error(t)}}a(Efe,"runUpgrade");function pd(e,t=void 0){t||(t=Pi.info),Pi[t](e),console.log(N$.magenta(e))}a(pd,"printToLogAndConsole")});var D$=T((tIe,L$)=>{"use strict";var{promises:Db,createReadStream:hfe,createWriteStream:pfe}=require("fs"),{createGzip:mfe}=require("zlib"),{promisify:Sfe}=require("util"),{pipeline:Tfe}=require("stream"),gfe=Sfe(Tfe),Rfe=require("path"),Wa=X();Wa.initSync();var Ka=x(),{CONFIG_PARAMS:md,ITC_EVENT_TYPES:Afe}=C(),{onMessageFromWorkers:Ofe}=tt(),Nfe=6e4,bfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",yfe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",Lb,w$;L$.exports=C$;Ofe(e=>{e.type===Afe.RESTART&&(Wa.initSync(!0),clearInterval(w$),Wa.get(md.LOGGING_ROTATION_ENABLED)&&C$())});async function C$(){try{let e=Ka.getLogFilePath(),t=Wa.get(md.LOGGING_ROTATION_MAXSIZE),r=Wa.get(md.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Ka.error(bfe);return}let n=Wa.get(md.LOGGING_ROTATION_PATH);if(!n){Ka.error(yfe);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}Lb=Date.now()/6e4,Ka.trace("Log rotate enabled, maxSize:",t,"interval:",r),w$=setInterval(async()=>{if(s){let o;o=await Db.stat(e),o.size>=s&&await I$(e,n)}i&&Date.now()/6e4-Lb>=i&&(await I$(e,n),Lb=Date.now()/6e4)},Nfe).unref()}catch(e){Ka.error(e)}}a(C$,"logRotator");async function I$(e,t){let r=Wa.get(md.LOGGING_ROTATION_COMPRESS),n=Rfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await gfe(hfe(e),mfe(),pfe(n)),await Db.unlink(e)):await Db.rename(e,n),Ka.closeLogFile(),Ka.notify(`hdb.log rotated, old log moved to ${n}`)}a(I$,"moveLogFile")});var Qa=T((_Ie,G$)=>{"use strict";var Rn=X();Rn.initSync();var nIe=ya(),qt=C(),zs=x(),Mi=require("fs-extra"),Mo=require("path"),Ife=require("systeminformation"),wfe=rb(),Cfe=mm(),Pb=require("chalk"),Lfe=Ho(),Ui=K(),M$=Et(),U$=vo(),P$=Lh(),Dfe=Cb(),Pfe=D$(),Mfe=require("minimist"),{PACKAGE_ROOT:Ufe}=C(),{startHTTPThreads:vfe,startSocketServer:sIe,mostIdleRouting:iIe,remoteAffinityRouting:oIe}=(jp(),oe(eb)),Bfe=hm(),{isMainThread:Hfe}=require("worker_threads"),aIe=ri(),cIe=Ji(),lIe=CT(),uIe=hu(),gm=C(),js,Ol,v$=!1,qfe="Upgrade complete. Starting HarperDB.",Gfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",xfe="HarperDB not found, starting install process.",Ffe="There was an error during install, check install_log.log for more details. Exiting.",kfe="HarperDB successfully started.";function $fe(){if(!v$){let e=a(()=>{Mi.removeSync(Mo.join(Rn.get(qt.CONFIG_PARAMS.ROOTPATH),qt.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($fe,"addExitListeners");async function B$(e=!1,t=!1){if(console.log(Pb.magenta("Starting HarperDB...")),await q$()===!1){console.log(xfe);try{await Cfe()}catch(o){console.error(Ffe,o),zs.error(o),process.exit(1)}}let r,n=Ol?.service==="clustering";Ol?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Mi.readFile(Mo.join(Rn.get(qt.CONFIG_PARAMS.ROOTPATH),qt.HDB_PID_FILE),"utf8")),c=await Ife.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}js===void 0&&(js=Vc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await P$.generateNatsConfig(),await js.startClusteringProcesses(!0),process.exit()),$fe(),await Mi.writeFile(Mo.join(Rn.get(gm.CONFIG_PARAMS.ROOTPATH),gm.HDB_PID_FILE),`${process.pid}`),zs.info("HarperDB PID",process.pid);let s;try{let o=await Bfe.getVersionUpdateInfo();o!==void 0&&(s=o[qt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Dfe.upgrade(o),console.log(qfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),zs.error(o)):(console.error(Gfe),zs.error(o)),process.exit(1)}if(!e){let o=U$(Object.keys(qt.CONFIG_PARAM_MAP),!0);!Ui.isEmpty(o)&&!Ui.isEmptyOrZeroLength(Object.keys(o))&&M$.updateConfigValue(void 0,void 0,o,!0,!0)}wfe(),Kfe(),Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Hfe&&await P$.generateNatsConfig(t)}a(B$,"initialize");async function Vfe(e=!1){try{Ol=Mfe(process.argv),Ol.ROOTPATH&&M$.updateConfigObject("settings_path",Mo.join(Ol.ROOTPATH,qt.HDB_CONFIG_FILE)),await B$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Ol.service;Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await js.startClusteringProcesses(),await js.startClusteringThreads()),await vfe(process.env.DEV_MODE?1:Rn.get(gm.CONFIG_PARAMS.THREADS_COUNT)??Rn.get(gm.CONFIG_PARAMS.THREADS)),Rn.get(qt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Pfe(),t||H$()}catch(t){console.error(t),zs.error(t),process.exit(1)}}a(Vfe,"main");function H$(){zs.suppressLogging(()=>{console.log(Pb.magenta(""+Mi.readFileSync(Mo.join(Ufe,"utility/install/ascii_logo.txt")))),console.log(Pb.magenta(`|------------- HarperDB ${Lfe.version} successfully started ------------|`))}),zs.notify(kfe)}a(H$,"started");async function Yfe(e=!0){v$=!e;try{js===void 0&&(js=Vc()),js.enterPM2Mode(),await B$(),Ui.autoCastBoolean(Rn.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await js.startClusteringProcesses(),await js.startService(qt.PROCESS_DESCRIPTORS.HDB),H$(),e&&process.exit(0)}catch(t){console.error(t),zs.error(t),process.exit(1)}}a(Yfe,"launch");function Kfe(){let e=Mo.join(Rn.getHdbBasePath(),qt.LICENSE_KEY_DIR_NAME,qt.LICENSE_FILE_NAME),t=Mo.join(e,qt.LICENSE_FILE_NAME),r=Mo.join(e,qt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=U$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ui.isEmpty(n)||Ui.isEmpty(s))return;Mi.mkdirpSync(e),Mi.writeFileSync(r,n),Mi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),zs.error(s)}}a(Kfe,"writeLicenseFromVars");G$.exports={launch:Yfe,main:Vfe,isHdbInstalled:q$};async function q$(){try{await Mi.stat(Ui.getPropsFilePath()),await Mi.stat(Rn.get(qt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ui.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw zs.error(`Error checking for HDB install - ${e}`),e}return!0}a(q$,"isHdbInstalled")});var Mb=T((fIe,k$)=>{"use strict";var Wfe=x(),Qfe=C(),jfe=require("util"),zfe=require("child_process"),x$=jfe.promisify(zfe.exec),Jfe=di(),Sd=Vc(),F$="Stopping HarperDB.";k$.exports=Xfe;async function Xfe(){if(console.log(F$),Wfe.notify(F$),await Sd.isServiceRegistered(Qfe.HDB_PROC_DESCRIPTOR)){Sd.enterPM2Mode();let r=await Sd.getUniqueServicesList();for(let n in r)await Sd.stop(n)}await Sd.kill();let t=await Jfe.getHDBProcessInfo();t.clustering.forEach(r=>{x$(`kill ${r.pid}`)}),t.core.forEach(r=>{x$(`kill ${r.pid}`)})}a(Xfe,"stop")});var Gb=T((hIe,J$)=>{"use strict";var Zfe=require("os"),Om=require("https"),$$=require("http"),vi=require("fs-extra"),eEe=require("yaml"),tEe=require("human-readable-ids").hri,{pipeline:V$}=require("stream/promises"),{createWriteStream:Nm,ensureDir:bm}=require("fs-extra"),{join:Ts}=require("path"),Hb=require("lodash"),rEe=require("minimist"),Q$=X(),nEe=di(),j$=x(),gd=Et(),{restart:sEe}=ya(),iEe=Mb(),Ub=K(),Y$=ht(),oEe=Ln(),{isHdbInstalled:aEe,main:z$,launch:cEe}=Qa(),lEe=mm(),ym=C(),{SYSTEM_TABLE_NAMES:K$,SYSTEM_SCHEMA_NAME:uEe,CONFIG_PARAMS:Td,OPERATIONS_ENUM:Er}=ym,_Ee=9925,dEe="info",fEe=1e4,EEe="clone-node-config.yaml",qb=[K$.ROLE_TABLE_NAME,K$.USER_TABLE_NAME],$r={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"},za=rEe(process.argv),Rd=za[$r.HDB_LEADER_USERNAME]??process.env[$r.HDB_LEADER_USERNAME],Ad=za[$r.HDB_LEADER_PASSWORD]??process.env[$r.HDB_LEADER_PASSWORD],Nl=za[$r.HDB_LEADER_URL]??process.env[$r.HDB_LEADER_URL],Am=za[$r.HDB_LEADER_CLUSTERING_HOST]??process.env[$r.HDB_LEADER_CLUSTERING_HOST],hEe=za[$r.HDB_LEADER_CLUSTERING_PORT]??process.env[$r.HDB_LEADER_CLUSTERING_PORT],pEe=(za[$r.HDB_FULLY_CONNECTED]??process.env[$r.HDB_FULLY_CONNECTED])==="true",Uo=(za[$r.HDB_CLONE_OVERTOP]??process.env[$r.HDB_CLONE_OVERTOP])==="true",vb,Qe,St,Tt,yl,bl,An,Ss,Bb;J$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await aEe();if(!Uo&&r)return console.info("HarperDB is already installed, clone will not be performed"),z$();if(Uo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Uo?`Cloning node ${Nl} overtop of existing HarperDB install`:`Cloning node: ${Nl}`;if(console.info(n),Uo)Bb=gd.readConfigFile(),bl=Bb.rootPath,await iEe();else try{bl=process.env.ROOTPATH?process.env.ROOTPATH:Ts(Zfe.homedir(),ym.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=Ts(bl,EEe),Qe=eEe.parseDocument(vi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}yl=Qe?.clustering?.nodeName??tEe.random(),St=await Od({operation:Er.GET_CONFIGURATION}),St=await JSON.parse(St.body),process.env.HDB_FETCH==="true"?(await gEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await TEe(),Uo||await SEe(),await mEe(),await REe(),await AEe(t),console.info("Successfully cloned node: "+Nl),t&&process.exit()},"cloneNode");async function mEe(){console.info("Cloning configuration"),vb=St?.clustering?.enabled;let e={[Td.ROOTPATH]:bl};if(Am&&vb&&Qe?.clustering?.enabled!==!1){e[Td.CLUSTERING_ENABLED]=!0;let n=St?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(hEe)||St?.clustering?.hubServer?.cluster?.network?.port;e[Td.CLUSTERING_USER]=St?.clustering?.user;let i=Q$.get(Td.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:Am,port:s}):i=[{host:Am,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[Td.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 gd.addConfig(n,St[n]);Qe?.databases&&await gd.addConfig("databases",St?.schemas);let r;Qe&&(r=gd.flattenConfig(Qe));for(let n in r){let s=ym.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Uo?e.clustering_nodeName=Bb?.clustering?.nodeName??yl:e.clustering_nodeName=yl),j$.info("Cloning config:",e),Hb.isEmpty(e)||gd.updateConfigValue(void 0,void 0,e,!1,!0)}a(mEe,"cloneConfig");async function SEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=bl,!Rd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Rd,!Ad)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Ad,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??_Ee,process.env.CLUSTERING_NODENAME=yl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??dEe,await lEe()}a(SEe,"installHDB");async function TEe(){console.info("Cloning system database");let e=ja("system");await bm(e);let t=Ts(e,"system.mdb"),r=Nm(t,{overwrite:!0}),n={operation:Er.GET_BACKUP,database:"system"};Uo||(n.tables=qb);let s=await W$(n,r);if(await vi.utimes(t,Date.now(),new Date(s.date)),Tt=await Od({operation:Er.DESCRIBE_ALL}),Tt=await JSON.parse(Tt.body),An=Qe?.databaseConfig?.excludeDatabases,An=An?An.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},St.schemas)for(let i in St.schemas)Object.keys(St.schemas[i]).includes("tables")&&(An[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));Ss=Qe?.databaseConfig?.excludeTables,Ss=Ss?Ss.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Tt){if(An[i]){Tt[i]="excluded";continue}if(Hb.isEmpty(Tt[i]))continue;let o=[],c=!1;for(let E in Tt[i])Ss[i+E]?(c=!0,Tt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:Er.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:Er.GET_BACKUP,database:i});let _=ja(i);await bm(_);let u=Ts(_,i+".mdb"),d=Nm(u,{overwrite:!0}),f=await W$(l,d);await vi.utimes(u,Date.now(),new Date(f.date))}}a(TEe,"cloneTables");async function gEe(){console.info("Cloning system database using fetch");let e={operation:Er.GET_BACKUP,database:"system"};Uo||(e.tables=qb);let t=await Rm(e,!0),r=ja("system");await bm(r);let n=Ts(r,"system.mdb");if(await V$(t.body,Nm(n,{overwrite:!0})),await vi.utimes(n,Date.now(),new Date(t.headers.get("date"))),Tt=await Rm({operation:Er.DESCRIBE_ALL}),Tt=await Tt.json(),An=Qe?.databaseConfig?.excludeDatabases,An=An?An.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},St.schemas)for(let s in St.schemas)Object.keys(St.schemas[s]).includes("tables")&&(An[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Ss=Qe?.databaseConfig?.excludeTables,Ss=Ss?Ss.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Tt){if(An[s]){Tt[s]="excluded";continue}if(Hb.isEmpty(Tt[s]))continue;let i=[],o=!1;for(let f in Tt[s])Ss[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 Rm({operation:Er.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await Rm({operation:Er.GET_BACKUP,database:s},!0));let l=ja(s);await bm(l);let _=new Date(c.headers.get("date")),u=Ts(l,`${_.getTime()}-${s}.mdb`);await V$(c.body,Nm(u,{overwrite:!0}));let d=Ts(l,s+".mdb");await vi.rename(u,d),await vi.utimes(d,Date.now(),_)}}a(gEe,"cloneTablesFetch");async function Rm(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new Om.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Nl,{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(Rm,"leaderHttpReqFetch");function ja(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||Ts(bl,"database")}a(ja,"getDbFileDir");async function REe(){let{deployComponent:e}=jh(),t=await Od({operation:Er.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 Od({operation:Er.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(REe,"cloneComponents");async function AEe(e){if(!vb||!Am)return;let t=await nEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await cEe(!1):await z$():(console.info(await sEe({operation:Er.RESTART})),await Ub.async_set_timeout(fEe)),console.info("Clustering cloned tables"),e&&await Ub.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await oEe.setSchemaDataToGlobalAsync();let s=d_(),i=await Od({operation:Er.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await vi.stat(Ts(ja("system"),"system.mdb"));for(let _ of qb)o.push({schema:uEe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Tt){if(Tt[_]==="excluded")continue;let u=await vi.stat(Ts(ja(_),_+".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 Y$.createTableStreams(o),j$.info("Sending add_node request to node:",St?.clustering?.nodeName,"with subscriptions:",o);let l;if(pEe&&i.connections.length>0){let _=ph(),u=[{node_name:St?.clustering?.nodeName,subscriptions:o}],d=!1;yl=Q$.get(ym.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===yl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(An[h.schema]||Ss[h.schema+h.table])continue;d=!0;let m=await vi.stat(Ts(ja(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:Er.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:Er.ADD_NODE,node_name:St?.clustering?.nodeName,subscriptions:o},!0),await Y$.closeConnection()}a(AEe,"clusterTables");async function Od(e){let t=new Om.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"},s=new URL(Nl),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 Ub.httpRequest(i,e)}a(Od,"leaderHttpReq");async function W$(e,t){let r=new Om.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Rd+":"+Ad).toString("base64"),"Content-Type":"application/json"},i=new URL(Nl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,$$=Om),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=$$.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(W$,"leaderHttpStream")});var Z$=T((mIe,X$)=>{var OEe=mm(),NEe=x();X$.exports=bEe;async function bEe(){try{await OEe()}catch(e){console.error("There was an error during the install."),console.error(e),NEe.error(e),process.exit(1)}}a(bEe,"install")});var rV=T((TIe,tV)=>{"use strict";var yEe=bh(),IEe=x(),eV="Registration failed.";async function wEe(){let e;try{e=await yEe.register()}catch(t){return IEe.error(`Registration error ${t}`),eV}return e||eV}a(wEe,"register");tV.exports={register:wEe}});var oV=T((RIe,iV)=>{"use strict";var Fb=require("fs-extra"),kb=require("path"),xb=require("yaml"),Nd=ht(),bd=C(),nV=et(),$b=x(),CEe=wr(),LEe=Rh(),DEe=Th(),PEe=di(),sV=X(),{isHdbInstalled:MEe}=Qa();sV.initSync();var Vn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Vr={LEAF:"leaf server",HUB:"hub server"},Im;iV.exports=UEe;async function UEe(){let e={harperdb:{status:Vn.STOPPED}};if(!await MEe()){e.harperdb.status=Vn.NOT_INSTALLED,console.log(xb.stringify(e));return}Im=sV.get(bd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await Fb.readFile(kb.join(Im,bd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===bd.NODE_ERROR_CODES.ENOENT){$b.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Vn.STOPPED,console.log(xb.stringify(e));return}throw n}let r=await PEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Vn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await vEe(r),e.clustering[Vr.HUB].status===Vn.RUNNING&&e.clustering[Vr.LEAF].status===Vn.RUNNING){let n=[],s=await LEe({});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 DEe.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 Nd.closeConnection()}console.log(xb.stringify(e)),process.exit()}a(UEe,"status");async function vEe(e){let t={[Vr.HUB]:{},[Vr.LEAF]:{}};if(e.clustering.length===0)return t[Vr.HUB].status=Vn.STOPPED,t[Vr.LEAF].status=Vn.STOPPED,t;let{port:r}=Nd.getServerConfig(bd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await CEe.getClusterUser();try{(await Nd.createConnection(r,n,s,!1)).close(),t[Vr.HUB].status=Vn.RUNNING}catch{t[Vr.HUB].status=Vn.ERRORED}let{port:i}=Nd.getServerConfig(bd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Nd.createConnection(i,n,s,!1)).close(),t[Vr.LEAF].status=Vn.RUNNING}catch{t[Vr.LEAF].status=Vn.ERRORED}try{t[Vr.HUB].pid=Number.parseInt(await Fb.readFile(kb.join(Im,"clustering",nV.PID_FILES.HUB),"utf8"))}catch(o){$b.error(o),t[Vr.HUB].pid=void 0}try{t[Vr.LEAF].pid=Number.parseInt(await Fb.readFile(kb.join(Im,"clustering",nV.PID_FILES.LEAF),"utf8"))}catch(o){$b.error(o),t[Vr.LEAF].pid=void 0}return t}a(vEe,"getHubLeafStatus")});var Ja=x(),BEe=Fi(),Vb=C(),wm=require("fs"),aV=require("path"),OIe=require("os"),{PACKAGE_ROOT:HEe}=C(),qEe=Cy(),NIe=(jp(),oe(eb)),cV=mk(),{SERVICE_ACTIONS_ENUM:Yr}=Vb;GEe();function GEe(){let e=qEe();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;wm.readdir(aV.join(HEe,"bin"),r=>{if(r)return Ja.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=cV.buildRequest();n.operation&&(t=Yr.OPERATION);let s;switch(t){case Yr.OPERATION:Ja.trace("calling cli operations with:",n),cV.cliOperations(n).then();break;case Yr.DEV:process.env.DEV_MODE=!0;case Yr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(wm.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),wm.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),wm.existsSync(aV.join(i,Vb.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Qa().main();break;case Yr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?Gb()(!0).catch(h=>{console.log(h)}):s=Qa().launch();break;case Yr.INSTALL:Z$()().then(()=>Qa().main(!0)).catch(E=>{console.error(E)});break;case Yr.REGISTER:rV().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Yr.STOP:Mb()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Yr.RESTART:ya().restart({}).then().catch(E=>{Ja.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Yr.VERSION:BEe.printVersion();break;case Yr.UPGRADE:Ja.setLogLevel(Vb.LOG_LEVELS.INFO),Cb().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 Yr.STATUS:oV()().then().catch(E=>{console.error(E)});break;case Yr.RENEWCERTS:let{generateKeys:f}=_m();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")?Gb()().catch(h=>{console.log(h)}):Qa().main();break;default:console.warn(`The "${t}" command is not understood.`);case Yr.HELP:console.log(`
102
+ Reindexing upgrade started for transaction logs`),Di.notify("Reindexing upgrade started for transaction logs"),await Pk(dN,!0,e)),Di.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(_d?", but errors occurred":"")}a(T_e,"reindexUpgrade");async function Pk(e,t,r){let n=await Ks.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Pi.join(e,o.toString());if(o===".DS_Store")continue;let l=await Ks.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Ks.statSync(Pi.join(c,d)).isDirectory())try{await g_e(o,d,t),Er.info(`Reindexing started for ${o}.${d}`),Di.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await A_e(o,d,c,t,r),Er.info(`Reindexing completed for ${o}.${d}`),Di.notify(`Reindexing completed for ${o}.${d}`)}catch(f){_d=!0,f.schema_path=c,f.table_name=d,Di.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Di.error(f),Er.error(f),console.error(f)}}}if(!_d)try{await Ks.rm(dm,{recursive:!0})}catch{}}a(Pk,"processTables");async function g_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Pi.join(dm,s);await Ks.ensureDir(dm),await Ks.writeFile(i,""),Er=m_e({level:"debug",formatters:{bindings(){}}},i)}a(g_e,"initPinoLogger");var R_e=20;async function A_e(e,t,r,n,s){let i;try{i=await gn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Di.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`),Er.error(T);return}throw T}let o=N_e(i.dbis),c=gn.openDBI(i,o),l=Object.keys(i.dbis),_=gn.statDBI(i,o);Er.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new p_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 gn.createEnvironment(r,t,!1);gn.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>R_e&&await E();await E()}catch(T){throw _d=!0,Er.error(T),T}async function E(){let T,A=f.map(({value:v})=>v);n?T=await Promise.all(A.map(v=>O_e(d,v))):T=await d_e(d,o,l.filter(v=>v!=="__blob__"),A,!1);for(let v=0,U=f.length;v<U;v++){let{key:F,value:H}=f[v];Er.info(`Record hash value: ${F} hash: ${o}`);let j;n?j=T[v]:j=T.written_hashes.indexOf(F)>-1,ud(j,!0),b_e(d,o,H[o],n),Er.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Di.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),Er.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=gn.statDBI(i,o),m=gn.statDBI(d,o);if(Er.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),ud.deepStrictEqual(h.entryCount,m.entryCount),await gn.closeEnvironment(i),await gn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=Pi.join(r,t),A=Pi.join(T,"data.mdb"),P=Pi.join(T,"lock.mdb");await Ks.unlink(A),await Ks.unlink(P),await Ks.rmdir(T),Er.info(`Deleted old environment files from schema folder: ${A}, ${P}`)}let S=await gn.openEnvironment(r,t),R=gn.statDBI(S,o);Er.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(R)}`),ud.deepStrictEqual(R.entryCount,m.entryCount),await gn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(A_e,"processTable");async function O_e(e,t){gn.initializeDBIs(e,Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Co.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),h_e.isEmpty(t.user_name)||e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Co.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(O_e,"insertTransaction");function b_e(e,t,r,n){let i=e.dbis[t].get(r);ud.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Co.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Co.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&&!E_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];Mk(e,c,d,r)}else Mk(e,c,l,r)}a(b_e,"validateIndices");function Mk(e,t,r,n){try{let s=!1,i=f_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||Er.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),ud.deepStrictEqual(s,!0)}catch(s){_d=!0,Er.error(s),console.error(s)}}a(Mk,"validateIndex");function N_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(N_e,"getHashDBI")});var Em=g((Gye,Hk)=>{"use strict";var y_e=require("mkcert"),fm=require("path"),fN=require("fs-extra"),EN=x(),I_e=X(),hN=C(),Sl=hg(),w_e=Ho(),C_e=ht();Hk.exports={generateKeys:L_e,updateConfigCert:Bk};async function L_e(){let e=I_e.getHdbBasePath(),t=fm.join(e,hN.LICENSE_KEY_DIR_NAME),r=await y_e.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Sl.CERTIFICATE_VALUES.key,caCert:Sl.CERTIFICATE_VALUES.cert}),n=fm.join(t,Sl.CERTIFICATE_PEM_NAME),s=fm.join(t,Sl.PRIVATEKEY_PEM_NAME),i=fm.join(t,Sl.CA_PEM_NAME);try{await fN.writeFile(n,r.cert)}catch(o){throw EN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await fN.writeFile(s,r.key)}catch(o){throw EN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await fN.writeFile(i,Sl.CERTIFICATE_VALUES.cert)}catch(o){throw EN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}Bk(n,s,i)}a(L_e,"generateKeys");function Bk(e,t,r){let n=w_e(Object.keys(hN.CONFIG_PARAM_MAP),!0),s=hN.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()]),C_e.updateConfigValue(void 0,void 0,i,!1,!0)}a(Bk,"updateConfigCert")});var kk=g((Fye,Fk)=>{"use strict";var hm=require("path"),Lo=require("fs-extra"),D_e=uN(),ka=x(),Gk=ht(),pN=X(),Ss=C(),pm=K(),P_e=require("properties-reader"),M_e=rs(),U_e=ih(),v_e=ir(),xye=require("util"),B_e=v_e.searchByValue,H_e=wr(),G_e=yh(),q_e=et(),x_e=vk(),qk=Em(),F_e=lm(),Ed=new D_e("4.0.0"),xk=[],dd,fd;async function k_e(){try{if(await F_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),dd){let t=pm.changeExtension(dd,".bak");await Lo.move(dd,t)}if(fd){let t=pm.changeExtension(fd,".bak");await Lo.move(fd,t)}await qk.generateKeys()}else console.log("Using existing certificates."),qk.updateConfigCert(dd,fd,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(k_e,"generateNewKeys");async function $_e(){console.log("Updating HarperDB nodes."),ka.info("Updating HarperDB nodes.");let e=[];try{let t=new M_e(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await B_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!q_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:Ss.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(pm.isEmptyOrZeroLength(n))return;let s=new U_e(Ss.SYSTEM_SCHEMA_NAME,Ss.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await H_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{G_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($_e,"updateNodes");async function V_e(){let e=pN.get(Ss.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(hm.join("config","settings.js"))){ka.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),ka.info(t);let r=hm.dirname(e),n=pN.get(Ss.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=hm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=hm.join(n,Ss.HDB_CONFIG_FILE);try{ka.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Lo.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{ka.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ka.info("Updating env variables with new settings values");let d=Gk.initOldConfig(e);dd=d[Ss.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],fd=d[Ss.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],Gk.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=pm.getPropsFilePath();Lo.accessSync(o,Lo.constants.F_OK|Lo.constants.R_OK);let l=P_e(o).get(Ss.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
103
+ install_user = ${l}`;try{Lo.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{pN.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{Lo.removeSync(r),console.log(u),ka.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");Ed.async_functions.push(V_e);Ed.async_functions.push(k_e);Ed.async_functions.push(x_e);Ed.async_functions.push($_e);xk.push(Ed);Fk.exports=xk});var mN=g(($ye,Kk)=>{"use strict";var $a=K(),Y_e=C(),$k=x(),{DATA_VERSION:K_e,UPGRADE_VERSION:W_e}=Y_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Vk=Lk(),mm=kk(),Va=new Map;Vk&&Vk.forEach(e=>{Va.set(e.version,e)});mm&&mm.forEach(e=>{Va.set(e.version,e)});mm&&mm.forEach(e=>{Va.set(e.version,e)});function Q_e(){return[...Va.keys()].sort($a.compareVersions)}a(Q_e,"getSortedVersions");function Yk(e){let t=e[K_e],r=e[W_e];return $a.isEmptyOrZeroLength(t)||$a.isEmptyOrZeroLength(r)?($k.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),$k.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."),[]):[...Va.keys()].sort($a.compareVersions).filter(function(n){return $a.compareVersions(n,t)>0&&$a.compareVersions(n,r)<=0})}a(Yk,"getVersionsForUpgrade");function j_e(e){return Yk(e).length>0}a(j_e,"hasUpgradesRequired");function z_e(e){return $a.isEmptyOrZeroLength(e)?null:Va.has(e)?Va.get(e):null}a(z_e,"getDirectiveByVersion");Kk.exports={getSortedVersions:Q_e,getDirectiveByVersion:z_e,getVersionsForUpgrade:Yk,hasUpgradesRequired:j_e}});var Sm=g((Yye,Jk)=>{"use strict";var J_e=require("util"),SN=require("chalk"),X_e=require("os"),Qk=wr(),Z_e=ir(),Rn=C(),jk=Sk(),gN=ug(),{UpgradeObject:Wk}=Rk(),{forceDowngradePrompt:ede}=lm(),tde=$i(),hd=x(),Tl=K(),RN=Mn(),rde=(Te(),oe(ke)),nde=mN(),sde=J_e.promisify(RN.setSchemaDataToGlobal),ide=Z_e.searchByValue,ode="info_id",ade="2.9.9",cde="3.0.0";async function lde(e){let t=new jk.HdbInfoInsertObject(1,e,e),r=new gN.InsertObject(Rn.OPERATIONS_ENUM.INSERT,Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Rn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return RN.setSchemaDataToGlobal(),Qk.insert(r)}a(lde,"insertHdbInstallInfo");async function TN(e){let t,r=await zk(),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 jk.HdbInfoInsertObject(i,e,e);let o=new gN.InsertObject(Rn.OPERATIONS_ENUM.INSERT,Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Rn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await sde(),Qk.insert(o)}a(TN,"insertHdbUpgradeInfo");async function zk(){let e=new gN.NoSQLSeachObject(Rn.SYSTEM_SCHEMA_NAME,Rn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ode,Rn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await ide(e))}catch(r){hd.info(r)}return t}a(zk,"getAllHdbInfoRecords");async function ude(){let e=await zk();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(ude,"getLatestHdbInfoRecord");async function _de(){hd.info("Checking if HDB software has been updated");try{let e=tde.version(),t=await ude(),r;if(Tl.isEmpty(t))r=ade;else if(r=t.data_version_num,Tl.compareVersions(r.toString(),e.toString())>0){if(!Tl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(SN.yellow(`This instance's data was last run on version ${r}`)),console.error(SN.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.${X_e.EOL}${Rn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Tl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(SN.yellow(`This instance's data was last run on version ${r}`)),await ede(new Wk(r,e))?await TN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(RN.setSchemaDataToGlobal(),dde(r),e.toString()===r.toString())return;let n=new Wk(r,e);if(nde.hasUpgradesRequired(n))return n;Tl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await TN(n.upgrade_version),hd.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw hd.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),hd.fatal(e),e}}a(_de,"getVersionUpdateInfo");function dde(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 ${Rn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in rde.databases.system))throw console.log(t),new Error(t);if(!Tl.isEmpty(e)&&e<cde)throw console.log(t),new Error(t)}a(dde,"checkIfInstallIsSupported");Jk.exports={insertHdbInstallInfo:lde,insertHdbUpgradeInfo:TN,getVersionUpdateInfo:_de}});var r$=g((Wye,t$)=>{"use strict";var AN=require("joi"),{boolean:fde,string:Xk,number:Ede}=AN.types(),Zk=require("fs-extra"),pd=C(),e$=require("path"),hde=rt();t$.exports=pde;function pde(e){let t=Xk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=AN.object({[pd.INSTALL_PROMPTS.ROOTPATH]:AN.custom(mde),[pd.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Ede.min(0).allow("null",null),[pd.INSTALL_PROMPTS.TC_AGREEMENT]:Xk.valid("yes","YES","Yes"),[pd.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[pd.INSTALL_PROMPTS.CLUSTERING_ENABLED]:fde});return hde.validateBySchema(e,r)}a(pde,"installValidator");function mde(e,t){if(Zk.existsSync(e$.join(e,"system/hdb_user/data.mdb"))||Zk.existsSync(e$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(mde,"validateRootAvailable")});var s$=g((jye,n$)=>{"use strict";var{mkdirpSync:Sde}=require("fs-extra"),Ws=require("path"),gl=C(),bN=x(),Tde=Pn(),ON=si(),gde=ze();n$.exports=Rde;async function Rde(e){bN.trace("Mounting HarperDB"),Ts(e),Ts(Ws.join(e,"backup")),Ts(Ws.join(e,"trash")),Ts(Ws.join(e,"keys")),Ts(Ws.join(e,"keys",gl.LICENSE_FILE_NAME)),Ts(Ws.join(e,"log")),Ts(Ws.join(e,"doc")),Ts(Ws.join(e,"database")),Ts(Ws.join(e,gl.TRANSACTIONS_DIR_NAME)),Ts(Ws.join(e,"clustering","leaf")),Ts(Ws.join(e,"components")),await Ade()}a(Rde,"mountHdb");async function Ade(){let e=mu(),t=Object.keys(ON);for(let r=0;r<t.length;r++){let n=t[r],s=ON[n].hash_attribute;try{gde.initSystemSchemaPaths(gl.SYSTEM_SCHEMA_NAME,n);let i=new e(gl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=ON[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Tde.createTable(n,i)}catch(i){throw bN.error(`issue creating environment for ${gl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Ade,"createLMDBTables");function Ts(e){Sde(e,{mode:gl.HDB_FILE_PERMISSIONS}),bN.info(`Directory ${e} created`)}a(Ts,"makeDirectory")});var gm=g((Jye,h$)=>{"use strict";var yN=require("os"),c$=require("inquirer"),Kn=require("fs-extra"),Ode=require("properties-reader"),Ya=require("chalk"),zs=require("path"),bde=require("human-readable-ids").hri,Nde=require("ora"),yde=require("yaml"),Dt=x(),Mo=X(),md=K(),Tm=Ho(),l$=Sm(),u$=$i(),ne=C(),Ide=r$(),wde=s$(),IN=ht(),Cde=Lr(),Lde=rh(),Dde=sN(),Pde=Mn(),Mde=require("util").promisify,Ude=Mde(Pde.setSchemaDataToGlobal),vde=Em(),Rl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),hr=a(e=>Ya.magenta.bold(e),"HDB_PROMPT_MSG"),Bde="https://harperdb.io/legal/end-user-license-agreement",Uo=yN.EOL,Do="",Hde="yes",i$="Starting HarperDB install...",o$="HarperDB installation was successful.",a$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Gde="An out of date version of HarperDB is already installed.",NN="It appears that HarperDB is already installed. Exiting install...",qde="Aborting install",xde=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])$/),Fde=new RegExp(/^[^\s.,*>]+$/),kde=yN.homedir(),$de=zs.join(kde,ne.HDB_ROOT_DIR_NAME),Vde=9925,Yde="HDB_ADMIN",Kde="CLUSTER_USER",Vr={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:"},Al=Tm([ne.INSTALL_PROMPTS.HDB_CONFIG]),js,_$=!1;h$.exports=d$;d$.createSuperUser=E$;async function d$(){console.log(hr(Uo+i$+Uo)),Dt.notify(i$);let e;Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Wde());let t=jde();Object.assign(t,e);let r=Ide(t);if(r)throw r.message;await zde(),await Jde(t);let n=await Qde(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),js=n[ne.INSTALL_PROMPTS.ROOTPATH],Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&zs.dirname(Al[ne.INSTALL_PROMPTS.HDB_CONFIG])===js&&(_$=!0),!Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Kn.pathExists(zs.join(js,ne.HDB_CONFIG_FILE))&&(console.error(NN),process.exit());let s=Nde({prefixText:hr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),md.isEmpty(js))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Mo.setHdbBasePath(js),await wde(js),await Xde(),await Zde(n),Dt.initLogSettings(!0),await E$(n),await tfe(n),await vde.generateKeys(),await rfe(),Dde(),s.stop(),console.log(hr(Uo+o$+Uo)),Dt.notify(o$)}a(d$,"install");function Wde(){let e=yde.parseDocument(Kn.readFileSync(Al[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=IN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Wde,"getConfigFromFile");async function Qde(e){Dt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Rl,when:Po(e[ne.INSTALL_PROMPTS.ROOTPATH],Vr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:Do,default:$de,validate:async s=>Qs(s)?Qs(s):await Kn.pathExists(zs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:hr(Vr.DESTINATION)},{type:"input",transformer:Rl,when:Po(e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Vr.HDB_PORT),name:ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Do,default:Vde,validate:s=>xde.test(s)?!0:"Invalid port.",message:hr(Vr.HDB_PORT)},{type:"input",transformer:Rl,when:Po(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Vr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Do,default:Yde,validate:s=>Qs(s)?Qs(s):(t=s,!0),message:hr(Vr.HDB_USERNAME)},{type:"password",when:Po(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Vr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Do,validate:s=>Qs(s)?Qs(s):!0,message:hr(Vr.HDB_PASS)}];if(md.autoCastBoolean(e[ne.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Rl,when:Po(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],Vr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Do,default:bde.random(),validate:i=>Fde.test(i)?!0:"Invalid node name, must not contain ., * or >",message:hr(Vr.NODE_NAME)},{type:"input",transformer:Rl,when:Po(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],Vr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Do,default:Kde,validate:i=>Qs(i)?Qs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:hr(Vr.CLUSTER_USERNAME)},{type:"password",when:Po(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Vr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Do,validate:i=>Qs(i)?Qs(i):!0,message:hr(Vr.CLUSTER_PASS)}];r.push(...s)}let n=await c$.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(Qde,"installPrompts");function Po(e,t){return e!==void 0?(t.includes("password")?(console.log(`${hr(t)} ${Ya.gray("[hidden]")}`),Dt.trace(`${hr(t)} [hidden]`)):(console.log(`${hr(t)} ${e}`),Dt.trace(`${hr(t)} ${e}`)),!1):!0}a(Po,"displayCmdEnvVar");function Qs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Qs,"checkForEmptyValue");function jde(){let e=Object.keys(ne.INSTALL_PROMPTS),t=Tm(e),r=Tm(Object.keys(ne.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ne.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(jde,"checkForPromptOverride");async function zde(){Dt.trace("Checking for existing install.");let e=md.getPropsFilePath(),t=await Kn.pathExists(e),r;if(t){Dt.trace(`Install found an existing boot prop file at:${e}`);let n=Ode(e),s=IN.getConfigValue(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Kn.pathExists(s)}if(!t&&md.noBootFile()&&(r=!0),r){if(Dt.trace(`Install found existing HDB config at:${e}`),await l$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${u$.version()}. Exiting install...`;console.log(Uo+Ya.magenta.bold(Gde)),console.log(Ya.magenta.bold(s)),Dt.error(s)}else console.log(Uo+Ya.magenta.bold(NN)),Dt.error(NN);process.exit(0)}}a(zde,"checkForExistingInstall");async function Jde(e){Dt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Bde}${Uo}and can be viewed by typing or copying and pasting the URL into your web browser.${Uo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Do,transformer:Rl,when:Po(e[ne.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ne.INSTALL_PROMPTS.TC_AGREEMENT,message:hr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Ya.yellow("Please enter 'yes' or 'no'")},n=await c$.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Hde&&(console.log(Ya.yellow(a$)),Dt.error(a$),process.exit(0))}a(Jde,"termsAgreement");async function Xde(){let e=zs.join(js,ne.HDB_CONFIG_FILE),t;try{t=yN.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=md.getHomeDir(),s=zs.join(n,ne.HDB_HOME_DIR_NAME),i=zs.join(s,ne.LICENSE_KEY_DIR_NAME);try{Kn.mkdirpSync(s,{mode:ne.HDB_FILE_PERMISSIONS}),Kn.mkdirpSync(i,{mode:ne.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ne.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=zs.join(s,ne.BOOT_PROPS_FILE_NAME);try{await Kn.writeFile(o,r)}catch(c){throw Dt.error(`There was an error creating the boot file at path: ${o}`),c}Mo.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Mo.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Mo.setProperty(Mo.BOOT_PROPS_FILE_PATH,o)}}a(Xde,"createBootPropertiesFile");async function Zde(e){Dt.trace("Creating HarperDB config file");let t=Tm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{IN.createConfigFile(t),Mo.initSync()}catch(r){efe(r)}}a(Zde,"createConfigFile");function efe(e){Dt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(qde);let t=zs.resolve(Mo.get(Mo.BOOT_PROPS_FILE_PATH),"../");t&&Kn.removeSync(t),js&&(_$?Kn.readdirSync(js,{withFileTypes:!0}).forEach(n=>{let s=zs.join(n.path,n.name);s!==Al[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Kn.removeSync(s)}):Kn.removeSync(js)),process.exit(1)}a(efe,"rollbackInstall");async function f$(e,t){Dt.trace("Creating admin user"),await Ude();let r;try{r=await Lde.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 Cde.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(f$,"createAdminUser");async function E$(e){Dt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await f$(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(E$,"createSuperUser");async function tfe(e){Dt.trace("Creating Cluster user.");let t;e[ne.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ne.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await f$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(tfe,"createClusterUser");async function rfe(){let e=u$.version();if(e)await l$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(rfe,"insertHdbVersionInfo")});var S$=g((Zye,m$)=>{"use strict";var wN=K(),An=x(),p$=mN();m$.exports={processDirectives:nfe};async function nfe(e){console.log("Starting upgrade process...");let t=p$.getVersionsForUpgrade(e),r=ofe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;An.notify(c),console.log(c);let l=[],_=[];try{l=sfe(o.sync_functions)}catch(u){throw An.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await ife(o.async_functions)}catch(u){throw An.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(nfe,"processDirectives");function sfe(e){if(wN.isEmptyOrZeroLength(e))return An.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return An.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(An.info(`Running function ${r.name}`),!(r instanceof Function)){An.info("Variable being processed is not a function");continue}let n=r();An.info(n),t.push(n)}return t}a(sfe,"runSyncFunctions");async function ife(e){if(wN.isEmptyOrZeroLength(e))return An.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return An.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(An.info(`Running function ${s.name}`),!(s instanceof Function)){An.info("Variable being processed is not a function");continue}let i=await s();An.info(i),t.push(i)}return t}a(ife,"runAsyncFunctions");function ofe(e){if(wN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=p$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(ofe,"getUpgradeDirectivesToInstall")});var DN=g((tIe,b$)=>{"use strict";var Rm=X();Rm.initSync();var A$=require("chalk"),T$=require("fs-extra"),Ui=x(),Mi=C(),g$=$i(),afe=S$(),CN=K(),O$=Sm(),cfe=lm(),R$=Jm(),lfe=Mn(),ufe=require("util").promisify,_fe=ufe(lfe.setSchemaDataToGlobal),LN,{UPGRADE_VERSION:Am}=Mi.UPGRADE_JSON_FIELD_NAMES_ENUM;b$.exports={upgrade:dfe};async function dfe(e){await _fe(),LN===void 0&&(LN=Vc()),T$.existsSync(Rm.get(Rm.BOOT_PROPS_FILE_PATH))||(Sd("The hdb_boot_properties file was not found. Please install HDB.",Mi.LOG_LEVELS.ERROR),process.exit(1)),T$.existsSync(Rm.get(Mi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Sd("The hdb settings file was not found. Please make sure HDB is installed.",Mi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await O$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Sd(`This version of HarperDB is ${g$.version()}`,Mi.LOG_LEVELS.INFO);let r=t[Am]?t[Am]:g$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Mi.HDB_SUPPORT_ADDRESS}`),Ui.notify("Missing new version field from upgrade info object"),process.exit(1)),await ffe();let n,s=0;try{n=await cfe.forceUpdatePrompt(t)}catch(i){Ui.error("There was an error when prompting user about upgrade."),Ui.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Ui.info(`Starting upgrade to version ${r}`),await Efe(t),Sd(`HarperDB was successfully upgraded to version ${t[Am]}`,Mi.LOG_LEVELS.INFO)}a(dfe,"upgrade");async function ffe(){let e=!1,t=await R$.findPs(Mi.HDB_PROC_NAME);if(CN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await R$.findPs("hdb_express");CN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await LN.list();CN.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(A$.red(r)),Ui.error(r),process.exit(1)}}a(ffe,"checkIfRunning");async function Efe(e){try{await afe.processDirectives(e)}catch(t){throw Sd("There was an error during the data upgrade. Please check the logs.",Mi.LOG_LEVELS.ERROR),t}try{await O$.insertHdbUpgradeInfo(e[Am])}catch(t){Ui.error("Error updating the 'hdb_info' system table."),Ui.error(t)}}a(Efe,"runUpgrade");function Sd(e,t=void 0){t||(t=Ui.info),Ui[t](e),console.log(A$.magenta(e))}a(Sd,"printToLogAndConsole")});var C$=g((nIe,w$)=>{"use strict";var{promises:MN,createReadStream:hfe,createWriteStream:pfe}=require("fs"),{createGzip:mfe}=require("zlib"),{promisify:Sfe}=require("util"),{pipeline:Tfe}=require("stream"),gfe=Sfe(Tfe),Rfe=require("path"),Wa=X();Wa.initSync();var Ka=x(),{CONFIG_PARAMS:Td,ITC_EVENT_TYPES:Afe}=C(),{onMessageFromWorkers:Ofe}=tt(),bfe=6e4,Nfe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",yfe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",PN,y$;w$.exports=I$;Ofe(e=>{e.type===Afe.RESTART&&(Wa.initSync(!0),clearInterval(y$),Wa.get(Td.LOGGING_ROTATION_ENABLED)&&I$())});async function I$(){try{let e=Ka.getLogFilePath(),t=Wa.get(Td.LOGGING_ROTATION_MAXSIZE),r=Wa.get(Td.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Ka.error(Nfe);return}let n=Wa.get(Td.LOGGING_ROTATION_PATH);if(!n){Ka.error(yfe);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}PN=Date.now()/6e4,Ka.trace("Log rotate enabled, maxSize:",t,"interval:",r),y$=setInterval(async()=>{if(s){let o;o=await MN.stat(e),o.size>=s&&await N$(e,n)}i&&Date.now()/6e4-PN>=i&&(await N$(e,n),PN=Date.now()/6e4)},bfe).unref()}catch(e){Ka.error(e)}}a(I$,"logRotator");async function N$(e,t){let r=Wa.get(Td.LOGGING_ROTATION_COMPRESS),n=Rfe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await gfe(hfe(e),mfe(),pfe(n)),await MN.unlink(e)):await MN.rename(e,n),Ka.closeLogFile(),Ka.notify(`hdb.log rotated, old log moved to ${n}`)}a(N$,"moveLogFile")});var Qa=g((fIe,H$)=>{"use strict";var On=X();On.initSync();var iIe=ya(),qt=C(),Xs=x(),vi=require("fs-extra"),vo=require("path"),Ife=require("systeminformation"),wfe=sN(),Cfe=gm(),UN=require("chalk"),Lfe=qo(),Bi=K(),D$=ht(),P$=Ho(),L$=Mh(),Dfe=DN(),Pfe=C$(),Mfe=require("minimist"),{PACKAGE_ROOT:Ufe}=C(),{startHTTPThreads:vfe,startSocketServer:oIe,mostIdleRouting:aIe,remoteAffinityRouting:cIe}=(Xp(),oe(rN)),Bfe=Sm(),{isMainThread:Hfe}=require("worker_threads"),lIe=si(),uIe=Zi(),_Ie=DT(),dIe=mu(),Om=C(),Js,Ol,M$=!1,Gfe="Upgrade complete. Starting HarperDB.",qfe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",xfe="HarperDB not found, starting install process.",Ffe="There was an error during install, check install_log.log for more details. Exiting.",kfe="HarperDB successfully started.";function $fe(){if(!M$){let e=a(()=>{vi.removeSync(vo.join(On.get(qt.CONFIG_PARAMS.ROOTPATH),qt.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($fe,"addExitListeners");async function U$(e=!1,t=!1){if(console.log(UN.magenta("Starting HarperDB...")),await B$()===!1){console.log(xfe);try{await Cfe()}catch(o){console.error(Ffe,o),Xs.error(o),process.exit(1)}}if(!e){let o=P$(Object.keys(qt.CONFIG_PARAM_MAP),!0);!Bi.isEmpty(o)&&!Bi.isEmptyOrZeroLength(Object.keys(o))&&D$.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Ol?.service==="clustering";Ol?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await vi.readFile(vo.join(On.get(qt.CONFIG_PARAMS.ROOTPATH),qt.HDB_PID_FILE),"utf8")),c=await Ife.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}Js===void 0&&(Js=Vc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),On.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await L$.generateNatsConfig(),await Js.startClusteringProcesses(!0),process.exit()),$fe(),await vi.writeFile(vo.join(On.get(Om.CONFIG_PARAMS.ROOTPATH),Om.HDB_PID_FILE),`${process.pid}`),Xs.info("HarperDB PID",process.pid);let s;try{let o=await Bfe.getVersionUpdateInfo();o!==void 0&&(s=o[qt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Dfe.upgrade(o),console.log(Gfe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),Xs.error(o)):(console.error(qfe),Xs.error(o)),process.exit(1)}wfe(),Kfe(),Bi.autoCastBoolean(On.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Hfe&&await L$.generateNatsConfig(t)}a(U$,"initialize");async function Vfe(e=!1){try{Ol=Mfe(process.argv),Ol.ROOTPATH&&D$.updateConfigObject("settings_path",vo.join(Ol.ROOTPATH,qt.HDB_CONFIG_FILE)),await U$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Ol.service;Bi.autoCastBoolean(On.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Js.startClusteringProcesses(),await Js.startClusteringThreads()),await vfe(process.env.DEV_MODE?1:On.get(Om.CONFIG_PARAMS.THREADS_COUNT)??On.get(Om.CONFIG_PARAMS.THREADS)),On.get(qt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Pfe(),t||v$()}catch(t){console.error(t),Xs.error(t),process.exit(1)}}a(Vfe,"main");function v$(){Xs.suppressLogging(()=>{console.log(UN.magenta(""+vi.readFileSync(vo.join(Ufe,"utility/install/ascii_logo.txt")))),console.log(UN.magenta(`|------------- HarperDB ${Lfe.version} successfully started ------------|`))}),Xs.notify(kfe)}a(v$,"started");async function Yfe(e=!0){M$=!e;try{Js===void 0&&(Js=Vc()),Js.enterPM2Mode(),await U$(),Bi.autoCastBoolean(On.get(qt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Js.startClusteringProcesses(),await Js.startService(qt.PROCESS_DESCRIPTORS.HDB),v$(),e&&process.exit(0)}catch(t){console.error(t),Xs.error(t),process.exit(1)}}a(Yfe,"launch");function Kfe(){let e=vo.join(On.getHdbBasePath(),qt.LICENSE_KEY_DIR_NAME,qt.LICENSE_FILE_NAME),t=vo.join(e,qt.LICENSE_FILE_NAME),r=vo.join(e,qt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=P$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Bi.isEmpty(n)||Bi.isEmpty(s))return;vi.mkdirpSync(e),vi.writeFileSync(r,n),vi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Xs.error(s)}}a(Kfe,"writeLicenseFromVars");H$.exports={launch:Yfe,main:Vfe,isHdbInstalled:B$};async function B$(){try{await vi.stat(Bi.getPropsFilePath()),await vi.stat(On.get(qt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Bi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Xs.error(`Error checking for HDB install - ${e}`),e}return!0}a(B$,"isHdbInstalled")});var vN=g((hIe,x$)=>{"use strict";var Wfe=x(),Qfe=C(),jfe=require("util"),zfe=require("child_process"),G$=jfe.promisify(zfe.exec),Jfe=Ei(),gd=Vc(),q$="Stopping HarperDB.";x$.exports=Xfe;async function Xfe(){if(console.log(q$),Wfe.notify(q$),await gd.isServiceRegistered(Qfe.HDB_PROC_DESCRIPTOR)){gd.enterPM2Mode();let r=await gd.getUniqueServicesList();for(let n in r)await gd.stop(n)}await gd.kill();let t=await Jfe.getHDBProcessInfo();t.clustering.forEach(r=>{G$(`kill ${r.pid}`)}),t.core.forEach(r=>{G$(`kill ${r.pid}`)})}a(Xfe,"stop")});var FN=g((mIe,j$)=>{"use strict";var Zfe=require("os"),ym=require("https"),F$=require("http"),Hi=require("fs-extra"),eEe=require("yaml"),tEe=require("human-readable-ids").hri,{pipeline:k$}=require("stream/promises"),{createWriteStream:Im,ensureDir:wm}=require("fs-extra"),{join:Rs}=require("path"),qN=require("lodash"),rEe=require("minimist"),K$=X(),nEe=Ei(),W$=x(),Ad=ht(),{restart:sEe}=ya(),iEe=vN(),BN=K(),$$=pt(),oEe=Mn(),{isHdbInstalled:aEe,main:Q$,launch:cEe}=Qa(),lEe=gm(),Cm=C(),{SYSTEM_TABLE_NAMES:V$,SYSTEM_SCHEMA_NAME:uEe,CONFIG_PARAMS:Rd,OPERATIONS_ENUM:pr}=Cm,_Ee=9925,dEe="info",fEe=1e4,EEe="clone-node-config.yaml",xN=[V$.ROLE_TABLE_NAME,V$.USER_TABLE_NAME],Yr={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"},za=rEe(process.argv),Od=za[Yr.HDB_LEADER_USERNAME]??process.env[Yr.HDB_LEADER_USERNAME],bd=za[Yr.HDB_LEADER_PASSWORD]??process.env[Yr.HDB_LEADER_PASSWORD],bl=za[Yr.HDB_LEADER_URL]??process.env[Yr.HDB_LEADER_URL],Nm=za[Yr.HDB_LEADER_CLUSTERING_HOST]??process.env[Yr.HDB_LEADER_CLUSTERING_HOST],hEe=za[Yr.HDB_LEADER_CLUSTERING_PORT]??process.env[Yr.HDB_LEADER_CLUSTERING_PORT],pEe=(za[Yr.HDB_FULLY_CONNECTED]??process.env[Yr.HDB_FULLY_CONNECTED])==="true",Bo=(za[Yr.HDB_CLONE_OVERTOP]??process.env[Yr.HDB_CLONE_OVERTOP])==="true",HN,Qe,gt,Rt,yl,Nl,bn,gs,GN;j$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await aEe();if(!Bo&&r)return console.info("HarperDB is already installed, clone will not be performed"),Q$();if(Bo&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Bo?`Cloning node ${bl} overtop of existing HarperDB install`:`Cloning node: ${bl}`;if(console.info(n),Bo)GN=Ad.readConfigFile(),Nl=GN.rootPath,await iEe();else try{Nl=process.env.ROOTPATH?process.env.ROOTPATH:Rs(Zfe.homedir(),Cm.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=Rs(Nl,EEe),Qe=eEe.parseDocument(Hi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}yl=Qe?.clustering?.nodeName??tEe.random(),gt=await Nd({operation:pr.GET_CONFIGURATION}),gt=await JSON.parse(gt.body),process.env.HDB_FETCH==="true"?(await gEe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await TEe(),Bo||await SEe(),await mEe(),await REe(),await AEe(t),console.info("Successfully cloned node: "+bl),t&&process.exit()},"cloneNode");async function mEe(){console.info("Cloning configuration"),HN=gt?.clustering?.enabled;let e={[Rd.ROOTPATH]:Nl};if(Nm&&HN&&Qe?.clustering?.enabled!==!1){e[Rd.CLUSTERING_ENABLED]=!0;let n=gt?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(hEe)||gt?.clustering?.hubServer?.cluster?.network?.port;e[Rd.CLUSTERING_USER]=gt?.clustering?.user;let i=K$.get(Rd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:Nm,port:s}):i=[{host:Nm,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[Rd.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 gt)gt[n]?.package&&!t[n]&&await Ad.addConfig(n,gt[n]);Qe?.databases&&await Ad.addConfig("databases",gt?.schemas);let r;Qe&&(r=Ad.flattenConfig(Qe));for(let n in r){let s=Cm.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Bo?e.clustering_nodeName=GN?.clustering?.nodeName??yl:e.clustering_nodeName=yl),W$.info("Cloning config:",e),qN.isEmpty(e)||Ad.updateConfigValue(void 0,void 0,e,!1,!0)}a(mEe,"cloneConfig");async function SEe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Nl,!Od)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Od,!bd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=bd,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??_Ee,process.env.CLUSTERING_NODENAME=yl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??dEe,await lEe()}a(SEe,"installHDB");async function TEe(){console.info("Cloning system database");let e=ja("system");await wm(e);let t=Rs(e,"system.mdb"),r=Im(t,{overwrite:!0}),n={operation:pr.GET_BACKUP,database:"system"};Bo||(n.tables=xN);let s=await Y$(n,r);if(await Hi.utimes(t,Date.now(),new Date(s.date)),Rt=await Nd({operation:pr.DESCRIBE_ALL}),Rt=await JSON.parse(Rt.body),bn=Qe?.databaseConfig?.excludeDatabases,bn=bn?bn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},gt.schemas)for(let i in gt.schemas)Object.keys(gt.schemas[i]).includes("tables")&&(bn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));gs=Qe?.databaseConfig?.excludeTables,gs=gs?gs.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Rt){if(bn[i]){Rt[i]="excluded";continue}if(qN.isEmpty(Rt[i]))continue;let o=[],c=!1;for(let E in Rt[i])gs[i+E]?(c=!0,Rt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:pr.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:pr.GET_BACKUP,database:i});let _=ja(i);await wm(_);let u=Rs(_,i+".mdb"),d=Im(u,{overwrite:!0}),f=await Y$(l,d);await Hi.utimes(u,Date.now(),new Date(f.date))}}a(TEe,"cloneTables");async function gEe(){console.info("Cloning system database using fetch");let e={operation:pr.GET_BACKUP,database:"system"};Bo||(e.tables=xN);let t=await bm(e,!0),r=ja("system");await wm(r);let n=Rs(r,"system.mdb");if(await k$(t.body,Im(n,{overwrite:!0})),await Hi.utimes(n,Date.now(),new Date(t.headers.get("date"))),Rt=await bm({operation:pr.DESCRIBE_ALL}),Rt=await Rt.json(),bn=Qe?.databaseConfig?.excludeDatabases,bn=bn?bn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},gt.schemas)for(let s in gt.schemas)Object.keys(gt.schemas[s]).includes("tables")&&(bn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));gs=Qe?.databaseConfig?.excludeTables,gs=gs?gs.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Rt){if(bn[s]){Rt[s]="excluded";continue}if(qN.isEmpty(Rt[s]))continue;let i=[],o=!1;for(let f in Rt[s])gs[s+f]?(o=!0,Rt[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await bm({operation:pr.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await bm({operation:pr.GET_BACKUP,database:s},!0));let l=ja(s);await wm(l);let _=new Date(c.headers.get("date")),u=Rs(l,`${_.getTime()}-${s}.mdb`);await k$(c.body,Im(u,{overwrite:!0}));let d=Rs(l,s+".mdb");await Hi.rename(u,d),await Hi.utimes(d,Date.now(),_)}}a(gEe,"cloneTablesFetch");async function bm(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new ym.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Od+":"+bd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(bl,{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(bm,"leaderHttpReqFetch");function ja(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||Rs(Nl,"database")}a(ja,"getDbFileDir");async function REe(){let{deployComponent:e}=Xh(),t=await Nd({operation:pr.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 Nd({operation:pr.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(REe,"cloneComponents");async function AEe(e){if(!HN||!Nm)return;let t=await nEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await cEe(!1):await Q$():(console.info(await sEe({operation:pr.RESTART})),await BN.async_set_timeout(fEe)),console.info("Clustering cloned tables"),e&&await BN.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await oEe.setSchemaDataToGlobalAsync();let s=E_(),i=await Nd({operation:pr.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await Hi.stat(Rs(ja("system"),"system.mdb"));for(let _ of xN)o.push({schema:uEe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Rt){if(Rt[_]==="excluded")continue;let u=await Hi.stat(Rs(ja(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in Rt[_])Rt[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await $$.createTableStreams(o),W$.info("Sending add_node request to node:",gt?.clustering?.nodeName,"with subscriptions:",o);let l;if(pEe&&i.connections.length>0){let _=Th(),u=[{node_name:gt?.clustering?.nodeName,subscriptions:o}],d=!1;yl=K$.get(Cm.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===yl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(bn[h.schema]||gs[h.schema+h.table])continue;d=!0;let m=await Hi.stat(Rs(ja(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:pr.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:pr.ADD_NODE,node_name:gt?.clustering?.nodeName,subscriptions:o},!0),await $$.closeConnection()}a(AEe,"clusterTables");async function Nd(e){let t=new ym.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Od+":"+bd).toString("base64"),"Content-Type":"application/json"},s=new URL(bl),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 BN.httpRequest(i,e)}a(Nd,"leaderHttpReq");async function Y$(e,t){let r=new ym.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Od+":"+bd).toString("base64"),"Content-Type":"application/json"},i=new URL(bl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,F$=ym),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=F$.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(Y$,"leaderHttpStream")});var J$=g((TIe,z$)=>{var OEe=gm(),bEe=x();z$.exports=NEe;async function NEe(){try{await OEe()}catch(e){console.error("There was an error during the install."),console.error(e),bEe.error(e),process.exit(1)}}a(NEe,"install")});var eV=g((RIe,Z$)=>{"use strict";var yEe=wh(),IEe=x(),X$="Registration failed.";async function wEe(){let e;try{e=await yEe.register()}catch(t){return IEe.error(`Registration error ${t}`),X$}return e||X$}a(wEe,"register");Z$.exports={register:wEe}});var sV=g((OIe,nV)=>{"use strict";var $N=require("fs-extra"),VN=require("path"),kN=require("yaml"),yd=pt(),Id=C(),tV=et(),YN=x(),CEe=Lr(),LEe=bh(),DEe=Ah(),PEe=Ei(),rV=X(),{isHdbInstalled:MEe}=Qa();rV.initSync();var Wn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Kr={LEAF:"leaf server",HUB:"hub server"},Lm;nV.exports=UEe;async function UEe(){let e={harperdb:{status:Wn.STOPPED}};if(!await MEe()){e.harperdb.status=Wn.NOT_INSTALLED,console.log(kN.stringify(e));return}Lm=rV.get(Id.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await $N.readFile(VN.join(Lm,Id.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Id.NODE_ERROR_CODES.ENOENT){YN.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Wn.STOPPED,console.log(kN.stringify(e));return}throw n}let r=await PEe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Wn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await vEe(r),e.clustering[Kr.HUB].status===Wn.RUNNING&&e.clustering[Kr.LEAF].status===Wn.RUNNING){let n=[],s=await LEe({});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 DEe.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 yd.closeConnection()}console.log(kN.stringify(e)),process.exit()}a(UEe,"status");async function vEe(e){let t={[Kr.HUB]:{},[Kr.LEAF]:{}};if(e.clustering.length===0)return t[Kr.HUB].status=Wn.STOPPED,t[Kr.LEAF].status=Wn.STOPPED,t;let{port:r}=yd.getServerConfig(Id.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await CEe.getClusterUser();try{(await yd.createConnection(r,n,s,!1)).close(),t[Kr.HUB].status=Wn.RUNNING}catch{t[Kr.HUB].status=Wn.ERRORED}let{port:i}=yd.getServerConfig(Id.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await yd.createConnection(i,n,s,!1)).close(),t[Kr.LEAF].status=Wn.RUNNING}catch{t[Kr.LEAF].status=Wn.ERRORED}try{t[Kr.HUB].pid=Number.parseInt(await $N.readFile(VN.join(Lm,"clustering",tV.PID_FILES.HUB),"utf8"))}catch(o){YN.error(o),t[Kr.HUB].pid=void 0}try{t[Kr.LEAF].pid=Number.parseInt(await $N.readFile(VN.join(Lm,"clustering",tV.PID_FILES.LEAF),"utf8"))}catch(o){YN.error(o),t[Kr.LEAF].pid=void 0}return t}a(vEe,"getHubLeafStatus")});var cV={};Fe(cV,{copyDb:()=>BEe});async function BEe(e,t){console.log("copyDb start");let r=rn()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,iV.open)(new oV.default(t)),c=o.openDB(Dm.INTERNAL_DBIS_NAME),l,_=0;for(let{key:f,value:E}of s.getRange({})){let h=E.is_hash_attribute||E.isPrimaryKey,m,S;if(h&&(m=E.compression,S=PE(),S?E.compression=S:delete E.compression,m?.dictionary?.toString()===S?.dictionary?.toString()&&(m=null,S=null)),c.put(f,E),!(h||E.indexed))continue;let R=new aV.default(!h,h);R.encoding="binary",R.compression=m;let T=n.openDB(f,R);T.decoder=null,R.compression=S;let A=o.openDB(f,R);A.encoder=null,console.log("copying",f,"from",e,"to",t),await d(T,A,h)}let u=n.openDB(Dm.AUDIT_STORE_NAME,Zd);console.log("copying audit log"),d(i,u,!1);async function d(f,E,h){let m=0,S=0;for(let{key:R,value:T,version:A}of f.getRange({start:null,versions:h}))l=E.put(R,T,A),m++,S+=(R.length||10)+T.length,_++>5e3&&(await l,console.log("copied",m,"entries",S,"bytes"),_=0);console.log("finish copying, copied",m,"entries",S,"bytes")}a(d,"copyDbi"),await l,o.close(),console.log("copied database "+e+" to "+t)}var iV,oV,aV,Dm,lV=Ae(()=>{Te();iV=require("lmdb"),oV=G(Zl()),aV=G(Xl()),Dm=G(at());Yi();a(BEe,"copyDb")});var Ja=x(),HEe=$i(),KN=C(),Pm=require("fs"),uV=require("path"),wIe=require("os"),{PACKAGE_ROOT:GEe}=C(),qEe=Dy(),CIe=(Xp(),oe(rN)),_V=hk(),{SERVICE_ACTIONS_ENUM:mr}=KN;xEe();function xEe(){let e=qEe();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(uV.join(GEe,"bin"),r=>{if(r)return Ja.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=_V.buildRequest();n.operation&&(t=mr.OPERATION);let s;switch(t){case mr.OPERATION:Ja.trace("calling cli operations with:",n),_V.cliOperations(n).then();break;case mr.DEV:process.env.DEV_MODE=!0;case mr.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(uV.join(i,KN.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Qa().main();break;case mr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?FN()(!0).catch(S=>{console.log(S)}):s=Qa().launch();break;case mr.INSTALL:J$()().then(()=>Qa().main(!0)).catch(m=>{console.error(m)});break;case mr.REGISTER:eV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case mr.STOP:vN()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case mr.RESTART:ya().restart({}).then().catch(m=>{Ja.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case mr.VERSION:HEe.printVersion();break;case mr.UPGRADE:Ja.setLogLevel(KN.LOG_LEVELS.INFO),DN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{Ja.error(`Got an error during upgrade ${m}`)});break;case mr.STATUS:sV()().then().catch(m=>{console.error(m)});break;case mr.RENEWCERTS:let{generateKeys:f}=Em();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case mr.COPYDB:let E=process.argv[3],h=process.argv[4];(lV(),oe(cV)).copyDb(E,h);break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?FN()().catch(S=>{console.log(S)}):Qa().main();break;default:console.warn(`The "${t}" command is not understood.`);case mr.HELP:console.log(`
105
105
  Usage: harperdb [command]
106
106
 
107
107
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -118,4 +118,4 @@ Commands:
118
118
  upgrade - Upgrade harperdb
119
119
  renew-certs - Generate a new set of self-signed certificates
120
120
  status - Print the status of HarperDB and clustering
121
- <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(GEe,"harperDBService");
121
+ <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(xEe,"harperDBService");