harperdb 4.3.0-alpha.1 → 4.3.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,26 +1,27 @@
1
- "use strict";var JH=Object.create;var $a=Object.defineProperty;var XH=Object.getOwnPropertyDescriptor;var jH=Object.getOwnPropertyNames;var ZH=Object.getPrototypeOf,ex=Object.prototype.hasOwnProperty;var a=(e,t)=>$a(e,"name",{value:t,configurable:!0});var ge=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var r in t)$a(e,r,{get:t[r],enumerable:!0})},KR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of jH(t))!ex.call(e,n)&&n!==r&&$a(e,n,{get:()=>t[n],enumerable:!(s=XH(t,n))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?JH(ZH(e)):{},KR(t||!e||!e.__esModule?$a(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>KR($a({},"__esModule",{value:!0}),e);var zR=T((_ne,QR)=>{var tx=require("fast-glob"),{statSync:ME,existsSync:PE,readFileSync:rx,writeFileSync:sx}=require("fs"),{spawnSync:nx,spawn:ix,execFileSync:lne}=require("child_process"),{isMainThread:ox}=require("worker_threads"),{join:$n,relative:WR}=require("path"),{PACKAGE_ROOT:Os}=w(),{tmpdir:ax,platform:cx}=require("os");require("source-map-support").install();var ux=["resources","server","dataLayer","components"],Ya="ts-build",vE,lx=__filename.endsWith("tsBuild.js");if(lx){if(ox){let r;try{ME($n(Os,Ya)),r=!0}catch{}if(r)for(let s of tx.sync(ux.map(n=>n+"/**/*.ts"),{cwd:Os})){let n=0,i=0;try{n=ME($n(Os,s)).mtimeMs-5e3,i=ME($n(Os,Ya,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),vE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),vE=!0;if(vE){let s=$n(Os,"node_modules/.bin/tsc");cx()==="win32"&&(s+=".cmd");let n=nx(s,{cwd:Os});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=$n(ax(),"harperdb-tsc.pid"),o;if(PE(i))try{process.kill(+rx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=ix(s,["--watch"],{cwd:Os,detached:!0,stdio:"ignore"});sx(i,c.pid.toString()),c.unref()}}}}let e=QR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Os)&&!s[0].includes("node_modules")){let i=WR(Os,s[0]),o;i.startsWith(Ya)?o=$n(Os,WR(Ya,i)):o=$n(Os,Ya,i);let c=$n(o,r),u=c+".js";if(PE(u))return u;if(c.includes(".")&&PE(c))return c}return t(r,s,n)}}});var w=T((Ene,uA)=>{"use strict";var jr=require("path"),_x=require("fs"),{relative:dne,join:fne}=jr,{existsSync:dx}=_x;function fx(){let e=__dirname;for(;!dx(jr.join(e,"package.json"));){let t=jr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(fx,"getHDBPackageRoot");var Yn=fx(),JR="js",Il=JR,Ex="harperdb-config.yaml",hx="defaultConfig.yaml",mx="hdb",XR=`harperdb.${Il}`,jR=`customFunctionsServer.${Il}`,px=`restartHdb.${Il}`,HE="HarperDB",yl="Custom Functions",wl="Clustering Hub",Cl="Clustering Leaf",Sx="Clustering Ingest Service",Tx="Clustering Reply Service",gx="foreground.pid",Rx="hdb.pid",Ax="data",Ox={HDB:HE,CLUSTERING_HUB:wl,CLUSTERING_LEAF:Cl,CLUSTERING_INGEST_SERVICE:Sx,CLUSTERING_REPLY_SERVICE:Tx,CUSTOM_FUNCTIONS:yl,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"},bx={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Nx={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},yx={harperdb:HE,"clustering hub":wl,"clustering leaf":Cl,"custom functions":yl,custom_functions:yl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Ix={CLUSTERING_HUB_PROC_DESCRIPTOR:wl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Cl},BE={HDB:jr.join(Yn,"server/harperdb"),CUSTOM_FUNCTIONS:jr.join(Yn,"server/customFunctions"),CLUSTERING_HUB:jr.join(Yn,"server/nats"),CLUSTERING_LEAF:jr.join(Yn,"server/nats")},wx={HDB:jr.join(BE.HDB,XR),CUSTOM_FUNCTIONS:jr.join(BE.CUSTOM_FUNCTIONS,jR)},Cx={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:jr.join(Yn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:jr.join(Yn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:jr.join(Yn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Lx={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ZR="support@harperdb.io",Dx="customer-success@harperdb.io",eA=1,Ux=4141,tA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Mx="https://www.harperdb.io/product",Px=`For support, please submit a request at ${tA} or contact ${ZR}`,rA=`For license support, please contact ${Dx}`,vx="None of the specified records were found.",Bx="hash attribute not found",Hx=`Your current license only supports ${eA} role. ${rA}`,xx="Your current license only supports 3 connections to a node.",Fx="127.0.0.1",Gx=1,qx=/^\.$/,kx=/^\.\.$/,Vx="U+002E",$x=/\//g,Yx="U+002F",Kx=/U\+002F/g,Wx=/^U\+002E$/,Qx=/^U\+002EU\+002E$/,zx="d",Jx=999999,Xx="*",jx="--max-old-space-size=",Zx="system",eF="__hdb_hash",tF=".harperdb",rF=".hdb",sF="keys",nF="hdb_boot_properties.file",iF=".updateConfig.json",oF="SIGTSTP",aF=24,cF=6e4,uF=448,lF="blob",_F="trash",dF="database",fF="schema",EF="transactions",hF=".count",mF="id",pF="PROCESS_NAME",sA={SETTINGS_PATH_KEY:"settings_path"},nA=require("lodash"),SF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},TF={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},gF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},RF={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"},AF={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"},Nr="hdb_internal:",OF={CREATE_SCHEMA:Nr+"create_schema",CREATE_TABLE:Nr+"create_table",CREATE_ATTRIBUTE:Nr+"create_attribute",ADD_USER:Nr+"add_user",ALTER_USER:Nr+"alter_user",DROP_USER:Nr+"drop_user",HDB_NODES:Nr+"hdb_nodes",HDB_USERS:Nr+"hdb_users",HDB_WORKERS:Nr+"hdb_workers",CATCHUP:Nr+"catchup",SCHEMA_CATCHUP:Nr+"schema_catchup",WORKER_ROOM:Nr+"cluster_workers"},bF={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"},NF="060493.ks",yF=".license",IF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},wF={CSV:".csv",JSON:".json"},CF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},LF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ka={};Ka[J.INSERT]=J.INSERT;Ka[J.UPDATE]=J.UPDATE;Ka[J.UPSERT]=J.UPSERT;Ka[J.DELETE]=J.DELETE;var ve=Object.create(null);ve[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ve[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ve[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ve[J.READ_LOG]=J.READ_LOG;ve[J.ADD_NODE]=J.ADD_NODE;ve[J.LIST_USERS]=J.LIST_USERS;ve[J.LIST_ROLES]=J.LIST_ROLES;ve[J.USER_INFO]=J.USER_INFO;ve[J.SQL]=J.SQL;ve[J.GET_JOB]=J.GET_JOB;ve[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ve[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ve[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ve[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ve[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ve[J.REMOVE_NODE]=J.REMOVE_NODE;ve[J.RESTART]=J.RESTART;ve[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ve[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ve[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ve[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ve[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ve[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ve[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ve[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ve[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var DF={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"},UF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},iA={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"},MF=nA.invert(iA),PF={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"},N={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",MAXHEAPMEMORY:"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",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_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"},oA={settings_path:sA.SETTINGS_PATH_KEY,hdb_root_key:N.ROOTPATH,hdb_root:N.ROOTPATH,rootpath:N.ROOTPATH,server_port_key:N.OPERATIONSAPI_NETWORK_PORT,server_port:N.OPERATIONSAPI_NETWORK_PORT,cert_key:N.TLS_CERTIFICATE,certificate:N.TLS_CERTIFICATE,private_key_key:N.TLS_PRIVATEKEY,private_key:N.TLS_PRIVATEKEY,http_secure_enabled_key:N.OPERATIONSAPI_NETWORK_HTTPS,https_on:N.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:N.OPERATIONSAPI_NETWORK_CORS,cors_on:N.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:N.LOGGING_LEVEL,log_level:N.LOGGING_LEVEL,log_path_key:N.LOGGING_ROOT,log_path:N.LOGGING_ROOT,clustering_node_name_key:N.CLUSTERING_NODENAME,node_name:N.CLUSTERING_NODENAME,clustering_enabled_key:N.CLUSTERING_ENABLED,clustering:N.CLUSTERING_ENABLED,max_http_threads:N.THREADS,max_hdb_processes:N.THREADS,server_timeout_key:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:N.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:N.LOGGING_AUDITLOG,disable_transaction_log:N.LOGGING_AUDITLOG,operation_token_timeout_key:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:N.HTTP_PORT,custom_functions_port:N.HTTP_PORT,custom_functions_directory_key:N.COMPONENTSROOT,custom_functions_directory:N.COMPONENTSROOT,max_custom_function_processes:N.THREADS,log_to_file:N.LOGGING_FILE,log_to_stdstreams:N.LOGGING_STDSTREAMS,local_studio_on:N.LOCALSTUDIO_ENABLED,clustering_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:N.CLUSTERING_USER,clustering_enabled:N.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:N.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:N.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:N.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:N.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:N.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:N.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:N.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:N.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:N.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:N.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:N.CLUSTERING_NODENAME,clustering_tls_certificate:N.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:N.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:N.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:N.CLUSTERING_TLS_INSECURE,clustering_tls_verify:N.CLUSTERING_TLS_VERIFY,clustering_loglevel:N.CLUSTERING_LOGLEVEL,clustering_republishmessages:N.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:N.CLUSTERING_DATABASELEVEL,customfunctions_network_port:N.HTTP_PORT,customfunctions_tls_certificate:N.TLS_CERTIFICATE,customfunctions_network_cors:N.HTTP_CORS,customfunctions_network_corsaccesslist:N.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:N.HTTP_HEADERSTIMEOUT,customfunctions_network_https:N.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:N.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:N.HTTP_TIMEOUT,http_threads:N.THREADS,threads:N.THREADS,maxheapmemory:N.MAXHEAPMEMORY,http_session_affinity:N.HTTP_SESSIONAFFINITY,http_compressionthreshold:N.HTTP_COMPRESSIONTHRESHOLD,http_cors:N.HTTP_CORS,http_corsaccesslist:N.HTTP_CORSACCESSLIST,http_headerstimeout:N.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:N.HTTP_KEEPALIVETIMEOUT,http_timeout:N.HTTP_TIMEOUT,http_port:N.HTTP_PORT,http_secureport:N.HTTP_SECUREPORT,customfunctions_processes:N.THREADS,customfunctions_root:N.COMPONENTSROOT,localstudio_enabled:N.LOCALSTUDIO_ENABLED,logging_file:N.LOGGING_FILE,logging_level:N.LOGGING_LEVEL,logging_root:N.LOGGING_ROOT,logging_rotation_enabled:N.LOGGING_ROTATION_ENABLED,logging_rotation_compress:N.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:N.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:N.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:N.LOGGING_ROTATION_PATH,logging_stdstreams:N.LOGGING_STDSTREAMS,logging_auditlog:N.LOGGING_AUDITLOG,logging_auditretention:N.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:N.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:N.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:N.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:N.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:N.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:N.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:N.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:N.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:N.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:N.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:N.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:N.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:N.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:N.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:N.ROOTPATH,databases:N.DATABASES,storage_path:N.STORAGE_PATH,ignorescripts:N.IGNORE_SCRIPTS,mqtt_network_port:N.MQTT_NETWORK_PORT,mqtt_websocket:N.MQTT_WEBSOCKET,mqtt_network_secureport:N.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:N.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:N.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:N.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:N.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:N.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:N.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:N.AUTHENTICATION_CACHETTL,authentication_enablesessions:N.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:N.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:N.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:N.COMPONENTSROOT,tls_certificate:N.TLS_CERTIFICATE,tls_privatekey:N.TLS_PRIVATEKEY,tls_certificateauthority:N.TLS_CERTIFICATEAUTHORITY,tls_ciphers:N.TLS_CIPHERS};for(let e in N){let t=N[e];oA[t.toLowerCase()]=t}var vF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},BF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},HF={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"},xF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},FF={VERSION_DEFAULT:"2.2.0"},GF={DEVELOPMENT:8192,DEFAULT:512},qF={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"},kF={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"},VF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},aA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$F=Symbol("metadata"),YF="__clustering__",KF=Object.values(aA),WF=15984864e5,cA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},QF=nA.invert(cA),zF={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"},JF=111,XF=`\r
2
- `,jF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ZF=["*","%"],eG="unauthorized_access",tG="func_val",rG={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},sG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},nG={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"},iG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},oG={HTTP:"http"},aG={STOPPED:"stopped",ONLINE:"online"},cG="3.x.x",uG={SUCCESS:"success",FAILURE:"failure"},lG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};uA.exports={LOCAL_HARPERDB_OPERATIONS:ve,HDB_SUPPORT_ADDRESS:ZR,HDB_SUPPORT_URL:tA,HDB_PRICING_URL:Mx,SUPPORT_HELP_MSG:Px,LICENSE_HELP_MSG:rA,HDB_PROC_NAME:XR,HDB_PROC_DESCRIPTOR:HE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Cl,CLUSTERING_HUB_PROC_DESCRIPTOR:wl,SYSTEM_SCHEMA_NAME:Zx,HASH_FOLDER_NAME:eF,HDB_HOME_DIR_NAME:tF,UPDATE_FILE_NAME:iF,LICENSE_KEY_DIR_NAME:sF,BOOT_PROPS_FILE_NAME:nF,JOB_TYPE_ENUM:BF,JOB_STATUS_ENUM:IF,SYSTEM_TABLE_NAMES:RF,SYSTEM_TABLE_HASH_ATTRIBUTES:AF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:wF,S3_BUCKET_AUTH_KEYS:CF,VALID_SQL_OPS_ENUM:LF,GEO_CONVERSION_ENUM:UF,HDB_SETTINGS_NAMES:iA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:MF,SERVICE_ACTIONS_ENUM:DF,CLUSTER_MESSAGE_TYPE_ENUM:HF,CLUSTER_CONNECTION_DIRECTION_ENUM:xF,CLUSTER_EVENTS_DEFS_ENUM:qF,PERIOD_REGEX:qx,DOUBLE_PERIOD_REGEX:kx,UNICODE_PERIOD:Vx,FORWARD_SLASH_REGEX:$x,UNICODE_FORWARD_SLASH:Yx,ESCAPED_FORWARD_SLASH_REGEX:Kx,ESCAPED_PERIOD_REGEX:Wx,ESCAPED_DOUBLE_PERIOD_REGEX:Qx,REG_KEY_FILE_NAME:NF,RESTART_TIMEOUT_MS:cF,HDB_FILE_PERMISSIONS:uF,DATABASES_DIR_NAME:dF,LEGACY_DATABASES_DIR_NAME:fF,TRANSACTIONS_DIR_NAME:EF,LIMIT_COUNT_NAME:hF,ID_ATTRIBUTE_STRING:mF,INSERT_MODULE_ENUM:TF,UPGRADE_JSON_FIELD_NAMES_ENUM:gF,RESTART_CODE:oF,RESTART_CODE_NUM:aF,CLUSTER_OPERATIONS:Ka,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:bF,HDB_INTERNAL_SC_CHANNEL_PREFIX:Nr,INTERNAL_SC_CHANNELS:OF,CLUSTERING_MESSAGE_TYPES:zF,HDB_FILE_SUFFIX:rF,BLOB_FOLDER_NAME:lF,HDB_TRASH_DIR:_F,ORIGINATOR_SET_VALUE:JF,LICENSE_VALUES:FF,RAM_ALLOCATION_ENUM:GF,TIME_STAMP_NAMES_ENUM:aA,TIME_STAMP_NAMES:KF,PERMS_UPDATE_RELEASE_TIMESTAMP:WF,SEARCH_NOT_FOUND_MESSAGE:vx,SEARCH_ATTRIBUTE_NOT_FOUND:Bx,LICENSE_ROLE_DENIED_RESPONSE:Hx,LICENSE_MAX_CONNS_REACHED:xx,BASIC_LICENSE_MAX_NON_CU_ROLES:eA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Ux,VALUE_SEARCH_COMPARATORS:cA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:QF,LICENSE_FILE_NAME:yF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:kF,NEW_LINE:XF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Gx,MOMENT_DAYS_TAG:zx,API_TURNOVER_SEC:Jx,LOOPBACK:Fx,CODE_EXTENSION:Il,WILDCARD_SEARCH_VALUE:Xx,NODE_ERROR_CODES:VF,JAVASCRIPT_EXTENSION:JR,PERMS_CRUD_ENUM:jF,UNAUTHORIZED_PERMISSION_NAME:eG,SEARCH_WILDCARDS:ZF,FUNC_VAL:tG,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:rG,JWT_ENUM:sG,CLUSTERING_FLAG:YF,ITC_EVENT_TYPES:nG,CUSTOM_FUNCTION_PROC_NAME:jR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:yl,SERVICES:iG,THREAD_TYPES:oG,MEM_SETTING_KEY:jx,HDB_RESTART_SCRIPT:px,PROCESS_DESCRIPTORS:Ox,SERVICE_SERVERS:wx,SERVICE_SERVERS_CWD:BE,PROCESS_DESCRIPTORS_VALIDATE:yx,LAUNCH_SERVICE_SCRIPTS:Cx,LOG_LEVELS:Nx,PROCESS_NAME_ENV_PROP:pF,LOG_NAMES:bx,PM2_PROCESS_STATUSES:aG,CONFIG_PARAM_MAP:oA,CONFIG_PARAMS:N,HDB_CONFIG_FILE:Ex,HDB_DEFAULT_CONFIG_FILE:hx,ROLE_TYPES_ENUM:Lx,BOOT_PROP_PARAMS:sA,INSTALL_PROMPTS:SF,HDB_ROOT_DIR_NAME:mx,CLUSTERING_PROCESSES:Ix,FOREGROUND_PID_FILE:gx,PACKAGE_ROOT:Yn,PRE_4_0_0_VERSION:cG,DATABASES_PARAM_CONFIG:vF,METADATA_PROPERTY:$F,AUTH_AUDIT_STATUS:uG,AUTH_AUDIT_TYPES:lG,HDB_PID_FILE:Rx,DEFAULT_DATABASE_NAME:Ax,LEGACY_CONFIG_PARAMS:PF};zR()});var xE=T((mne,dA)=>{"use strict";var lA=require("minimist");dA.exports=_G;function _G(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=_A(process.env),s=_A(lA(process.argv))):(r=process.env,s=lA(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(_G,"assignCMDENVVariables");function _A(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(_A,"objKeysToLowerCase")});var q=T((Sne,YE)=>{"use strict";var Oi=require("fs-extra"),{workerData:dG,threadId:fG}=require("worker_threads"),hn=require("path"),hA=require("yaml"),mA=require("properties-reader"),At=w(),fA=xE(),EG=require("os"),{PACKAGE_ROOT:GE}=w(),{_assignPackageExport:hG}=require("../../index"),Qa={};for(let e in console)Qa[e]||(Qa[e]=console[e]);var rr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},pA={STDOUT:"stdOut",STDERR:"stdErr"},mG=hn.join(GE,"logs"),pG=hn.join(GE,"config/yaml/",At.HDB_DEFAULT_CONFIG_FILE),SG=1e4,En,ks,tr,Ll,Dl,za,No,Wa;Wa===void 0&&SA();YE.exports={notify:RA,fatal:AA,error:Ja,warn:$E,info:Ul,debug:VE,trace:kE,setLogLevel:NG,log_level:tr,loggerWithTag:TG,suppressLogging:gG,initLogSettings:SA,setupConsoleLogging:TA,logCustomLevel:OG,closeLogFile:qE,getLogFilePath:()=>za,OUTPUTS:pA,AuthAuditLog:wG};hG("logger",YE.exports);function SA(e=!1){try{if(Wa===void 0||e){qE();let t=bG(),r=fA(["ROOTPATH"]);try{Wa=mA(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Oi.pathExistsSync(hn.join(r.ROOTPATH,At.HDB_CONFIG_FILE)))throw s}({level:tr,config_log_path:Dl,to_file:En,to_stream:ks}=yG(r.ROOTPATH?hn.join(r.ROOTPATH,At.HDB_CONFIG_FILE):Wa.get("settings_path"))),Ll=At.LOG_NAMES.HDB,za=hn.join(Dl,Ll)}}catch(t){if(Wa=void 0,t.code===At.NODE_ERROR_CODES.ENOENT){let r=fA(Object.keys(At.CONFIG_PARAM_MAP),!0);for(let o in r){let c=At.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===At.CONFIG_PARAMS.LOGGING_LEVEL){tr=u;continue}if(c===At.CONFIG_PARAMS.LOGGING_STDSTREAMS){ks=u;continue}c===At.CONFIG_PARAMS.LOGGING_FILE&&(En=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=IG();En=En===void 0?n:En,En=EA(En),ks=ks===void 0?i:ks,ks=EA(ks),tr=tr===void 0?s:tr,Dl=mG,Ll=At.LOG_NAMES.INSTALL,za=hn.join(Dl,Ll);return}throw Ja("Error initializing log settings"),Ja(t),t}process.env.DEV_MODE&&(ks=!0),TA()}a(SA,"initLogSettings");var FE=!0;function TA(){bo("error",Ja),bo("warn",$E),bo("log",Ul),bo("info",Ul),bo("debug",VE),bo("trace",kE)}a(TA,"setupConsoleLogging");function bo(e,t){console[e]=function(...r){if(FE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Qa[e](...r)}}a(bo,"logConsole");function TG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(RA),fatal:r(AA),error:r(Ja),warn:r($E),info:r(Ul),debug:r(VE),trace:r(kE)};function r(s){return function(...n){return s(t,...n)}}}a(TG,"loggerWithTag");function gG(e){try{FE=!1,e()}finally{FE=!0}}a(gG,"suppressLogging");var RG=dG?.name?.replace(/ /g,"-")||"main";function mn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||RG+"/"+fG);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
- `}a(mn,"createLogRecord");function Xa(e){En&&gA(e),ks&&process.stdout.write(e)}a(Xa,"logStdOut");function Ml(e){En&&gA(e),ks&&process.stderr.write(e)}a(Ml,"logStdErr");function gA(e){AG(),No?Oi.appendFileSync(No,e):Qa.log(e)}a(gA,"logToFile");function qE(){try{Oi.closeSync(No)}catch{}No=null}a(qE,"closeLogFile");function AG(){if(!No){try{if(!za)debugger;No=Oi.openSync(za,"a")}catch(e){Qa.error(e)}setTimeout(()=>{qE()},SG).unref()}}a(AG,"openLogFile");function Ul(...e){rr[tr]<=rr.info&&Xa(mn("info",e))}a(Ul,"info");function kE(...e){rr[tr]<=rr.trace&&Xa(mn("trace",e))}a(kE,"trace");function Ja(...e){rr[tr]<=rr.error&&Ml(mn("error",e))}a(Ja,"error");function VE(...e){rr[tr]<=rr.debug&&Xa(mn("debug",e))}a(VE,"debug");function RA(...e){rr[tr]<=rr.notify&&Xa(mn("notify",e))}a(RA,"notify");function AA(...e){rr[tr]<=rr.fatal&&Ml(mn("fatal",e))}a(AA,"fatal");function $E(...e){rr[tr]<=rr.warn&&Ml(mn("warn",e))}a($E,"warn");function OG(e,t,...r){t===pA.STDERR?Ml(mn(e,r)):Xa(mn(e,r))}a(OG,"logCustomLevel");function bG(){let e;try{e=EG.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hn.join(e,At.HDB_HOME_DIR_NAME,At.BOOT_PROPS_FILE_NAME);return Oi.existsSync(t)||(t=hn.join(GE,"utility/hdb_boot_properties.file")),t}a(bG,"getPropsFilePath");function NG(e){tr=e}a(NG,"setLogLevel");function EA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(EA,"autoCastBoolean");function yG(e){try{if(e.includes("config/settings.js")){let o=mA(e);return{level:o.get(At.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hn.dirname(o.get(At.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(At.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(At.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=hA.parseDocument(Oi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===At.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(yG,"getLogConfig");function IG(){try{let e=hA.parseDocument(Oi.readFileSync(pG,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(IG,"getDefaultConfig");function wG(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(wG,"AuthAuditLog")});var bA=T((gne,OA)=>{"use strict";var CG=require("util"),LG=require("path"),DG=require("child_process"),UG=CG.promisify(DG.execFile),MG=1e3*1e3*10;OA.exports={findPs:PG};async function PG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await UG("ps",["wwxo",`pid,${r}`],{maxBuffer:MG});for(let n of s.trim().split(`
4
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:LG.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(PG,"findPs")});var ft=T((Ane,yA)=>{"use strict";var vG="__dbis__",BG="__txns__",HG="__environment_name__",xG="__dbi_defintion__",FG={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"},GG=["__createdtime__","__updatedtime__"],qG="\uFFFF",NA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},kG=Object.values(NA);yA.exports={AUDIT_STORE_NAME:BG,INTERNAL_DBIS_NAME:vG,DBI_DEFINITION_NAME:xG,SEARCH_TYPES:FG,TIMESTAMP_NAMES:GG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HG,TRANSACTIONS_DBI_NAMES_ENUM:NA,TRANSACTIONS_DBIS:kG,OVERFLOW_MARKER:qG}});var yr=T((One,vA)=>{"use strict";var IA=w(),wA=ft(),CA={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},LA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),DA={500:LA("There was an error processing your request."),400:"Invalid request"},VG=DA[CA.INTERNAL_SERVER_ERROR],$G={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.`},YG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KG={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"},WG={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 ${wA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${wA.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"},QG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${IA.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 ${IA.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"},UA={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"},zG={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."},JG={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`},XG={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"},jG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ZG={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`},MA={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.`},PA={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}`},eq={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."},tq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},rq={...UA,...KG,...$G,...zG,...JG,...XG,...jG,...ZG,...QG,...MA,...PA,...eq,...tq,...YG};vA.exports={CHECK_LOGS_WRAPPER:LA,HDB_ERROR_MSGS:rq,DEFAULT_ERROR_MSGS:DA,DEFAULT_ERROR_RESP:VG,HTTP_STATUS_CODES:CA,LMDB_ERRORS_ENUM:WG,AUTHENTICATION_ERROR_MSGS:UA,VALIDATION_ERROR_MSGS:MA,ITC_ERRORS:PA}});var Z=T((Nne,xA)=>{"use strict";var yo=yr(),sq=q(),nq=w(),Pl=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,BA),this.statusCode=s||yo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(yo.DEFAULT_ERROR_MSGS[s]?yo.DEFAULT_ERROR_MSGS[s]:yo.DEFAULT_ERROR_MSGS[yo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&sq[n](i)}},KE=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}},WE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function BA(e,t,r,s=nq.LOG_LEVELS.ERROR,n=null,i=!1){if(HA(e))return e;let o=new Pl(e,t,r,s,n);return i&&delete o.stack,o}a(BA,"handleHDBError");function HA(e){return e.__proto__.constructor.name===Pl.name}a(HA,"isHDBError");xA.exports={isHDBError:HA,handleHDBError:BA,ClientError:KE,ServerError:WE,hdb_errors:yo}});var GA=T((Ine,FA)=>{"use strict";var iq={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
1
+ "use strict";var vx=Object.create;var Ja=Object.defineProperty;var Bx=Object.getOwnPropertyDescriptor;var Hx=Object.getOwnPropertyNames;var xx=Object.getPrototypeOf,qx=Object.prototype.hasOwnProperty;var a=(e,t)=>Ja(e,"name",{value:t,configurable:!0});var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ve=(e,t)=>{for(var r in t)Ja(e,r,{get:t[r],enumerable:!0})},hA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Hx(t))!qx.call(e,s)&&s!==r&&Ja(e,s,{get:()=>t[s],enumerable:!(n=Bx(t,s))||n.enumerable});return e};var v=(e,t,r)=>(r=e!=null?vx(xx(e)):{},hA(t||!e||!e.__esModule?Ja(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>hA(Ja({},"__esModule",{value:!0}),e);var SA=T((gie,pA)=>{var Fx=require("fast-glob"),{statSync:XE,existsSync:jE,readFileSync:Gx,writeFileSync:kx}=require("fs"),{spawnSync:Vx,spawn:$x,execFileSync:Tie}=require("child_process"),{isMainThread:Yx}=require("worker_threads"),{join:Ks,relative:mA}=require("path"),{PACKAGE_ROOT:An}=M(),{tmpdir:Kx,platform:Wx}=require("os");require("source-map-support").install();var Qx=["resources","server","dataLayer","components"],Xa="ts-build",ZE,zx=__filename.endsWith("tsBuild.js");if(zx){if(Yx){let r;try{XE(Ks(An,Xa)),r=!0}catch{}if(r)for(let n of Fx.sync(Qx.map(s=>s+"/**/*.ts"),{cwd:An})){let s=0,i=0;try{s=XE(Ks(An,n)).mtimeMs-5e3,i=XE(Ks(An,Xa,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."),ZE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),ZE=!0;if(ZE){let n=Ks(An,"node_modules/.bin/tsc");Wx()==="win32"&&(n+=".cmd");let s=Vx(n,{cwd:An});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ks(Kx(),"harperdb-tsc.pid"),o;if(jE(i))try{process.kill(+Gx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=$x(n,["--watch"],{cwd:An,detached:!0,stdio:"ignore"});kx(i,c.pid.toString()),c.unref()}}}}let e=pA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(An)&&!n[0].includes("node_modules")){let i=mA(An,n[0]),o;i.startsWith(Xa)?o=Ks(An,mA(Xa,i)):o=Ks(An,Xa,i);let c=Ks(o,r),u=c+".js";if(jE(u))return u;if(c.includes(".")&&jE(c))return c}return t(r,n,s)}}});var M=T((Oie,MA)=>{"use strict";var jr=require("path"),Jx=require("fs"),{relative:Rie,join:Aie}=jr,{existsSync:Xx}=Jx;function jx(){let e=__dirname;for(;!Xx(jr.join(e,"package.json"));){let t=jr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(jx,"getHDBPackageRoot");var Ws=jx(),TA="js",vl=TA,Zx="harperdb-config.yaml",eq="defaultConfig.yaml",tq="hdb",gA=`harperdb.${vl}`,RA=`customFunctionsServer.${vl}`,rq=`restartHdb.${vl}`,th="HarperDB",Pl="Custom Functions",Bl="Clustering Hub",Hl="Clustering Leaf",nq="Clustering Ingest Service",sq="Clustering Reply Service",iq="foreground.pid",oq="hdb.pid",aq="data",cq={HDB:th,CLUSTERING_HUB:Bl,CLUSTERING_LEAF:Hl,CLUSTERING_INGEST_SERVICE:nq,CLUSTERING_REPLY_SERVICE:sq,CUSTOM_FUNCTIONS:Pl,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"},uq={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},lq={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},_q={harperdb:th,"clustering hub":Bl,"clustering leaf":Hl,"custom functions":Pl,custom_functions:Pl,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},dq={CLUSTERING_HUB_PROC_DESCRIPTOR:Bl,CLUSTERING_LEAF_PROC_DESCRIPTOR:Hl},eh={HDB:jr.join(Ws,"server/harperdb"),CUSTOM_FUNCTIONS:jr.join(Ws,"server/customFunctions"),CLUSTERING_HUB:jr.join(Ws,"server/nats"),CLUSTERING_LEAF:jr.join(Ws,"server/nats")},fq={HDB:jr.join(eh.HDB,gA),CUSTOM_FUNCTIONS:jr.join(eh.CUSTOM_FUNCTIONS,RA)},Eq={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:jr.join(Ws,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:jr.join(Ws,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:jr.join(Ws,"launchServiceScripts/launchUpdateNodes4-0-0.js")},hq={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},AA="support@harperdb.io",mq="customer-success@harperdb.io",OA=1,pq=4141,bA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Sq="https://www.harperdb.io/product",Tq=`For support, please submit a request at ${bA} or contact ${AA}`,NA=`For license support, please contact ${mq}`,gq="None of the specified records were found.",Rq="hash attribute not found",Aq=`Your current license only supports ${OA} role. ${NA}`,Oq="Your current license only supports 3 connections to a node.",bq="127.0.0.1",Nq=1,yq=/^\.$/,Iq=/^\.\.$/,wq="U+002E",Cq=/\//g,Lq="U+002F",Dq=/U\+002F/g,Mq=/^U\+002E$/,Uq=/^U\+002EU\+002E$/,Pq="d",vq=999999,Bq="*",Hq="--max-old-space-size=",xq="system",qq="__hdb_hash",Fq=".harperdb",Gq=".hdb",kq="keys",Vq="hdb_boot_properties.file",$q=".updateConfig.json",Yq="SIGTSTP",Kq=24,Wq=6e4,Qq=448,zq="blob",Jq="trash",Xq="database",jq="schema",Zq="transactions",eF=".count",tF="id",rF="PROCESS_NAME",yA={SETTINGS_PATH_KEY:"settings_path"},IA=require("lodash"),nF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},sF={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},iF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},oF={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"},aF={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},yr="hdb_internal:",cF={CREATE_SCHEMA:yr+"create_schema",CREATE_TABLE:yr+"create_table",CREATE_ATTRIBUTE:yr+"create_attribute",ADD_USER:yr+"add_user",ALTER_USER:yr+"alter_user",DROP_USER:yr+"drop_user",HDB_NODES:yr+"hdb_nodes",HDB_USERS:yr+"hdb_users",HDB_WORKERS:yr+"hdb_workers",CATCHUP:yr+"catchup",SCHEMA_CATCHUP:yr+"schema_catchup",WORKER_ROOM:yr+"cluster_workers"},uF={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"},lF="060493.ks",_F=".license",dF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},X={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"},fF={CSV:".csv",JSON:".json"},EF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},hF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ja={};ja[X.INSERT]=X.INSERT;ja[X.UPDATE]=X.UPDATE;ja[X.UPSERT]=X.UPSERT;ja[X.DELETE]=X.DELETE;var ve=Object.create(null);ve[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;ve[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;ve[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;ve[X.READ_LOG]=X.READ_LOG;ve[X.ADD_NODE]=X.ADD_NODE;ve[X.LIST_USERS]=X.LIST_USERS;ve[X.LIST_ROLES]=X.LIST_ROLES;ve[X.USER_INFO]=X.USER_INFO;ve[X.SQL]=X.SQL;ve[X.GET_JOB]=X.GET_JOB;ve[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;ve[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;ve[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;ve[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;ve[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;ve[X.REMOVE_NODE]=X.REMOVE_NODE;ve[X.RESTART]=X.RESTART;ve[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;ve[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;ve[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;ve[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;ve[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;ve[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;ve[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;ve[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;ve[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var mF={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"},pF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wA={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"},SF=IA.invert(wA),TF={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},C={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",MAXHEAPMEMORY:"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",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_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"},CA={settings_path:yA.SETTINGS_PATH_KEY,hdb_root_key:C.ROOTPATH,hdb_root:C.ROOTPATH,rootpath:C.ROOTPATH,server_port_key:C.OPERATIONSAPI_NETWORK_PORT,server_port:C.OPERATIONSAPI_NETWORK_PORT,cert_key:C.TLS_CERTIFICATE,certificate:C.TLS_CERTIFICATE,private_key_key:C.TLS_PRIVATEKEY,private_key:C.TLS_PRIVATEKEY,http_secure_enabled_key:C.OPERATIONSAPI_NETWORK_HTTPS,https_on:C.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:C.OPERATIONSAPI_NETWORK_CORS,cors_on:C.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:C.LOGGING_LEVEL,log_level:C.LOGGING_LEVEL,log_path_key:C.LOGGING_ROOT,log_path:C.LOGGING_ROOT,clustering_node_name_key:C.CLUSTERING_NODENAME,node_name:C.CLUSTERING_NODENAME,clustering_enabled_key:C.CLUSTERING_ENABLED,clustering:C.CLUSTERING_ENABLED,max_http_threads:C.THREADS,max_hdb_processes:C.THREADS,server_timeout_key:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:C.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:C.LOGGING_AUDITLOG,disable_transaction_log:C.LOGGING_AUDITLOG,operation_token_timeout_key:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:C.HTTP_PORT,custom_functions_port:C.HTTP_PORT,custom_functions_directory_key:C.COMPONENTSROOT,custom_functions_directory:C.COMPONENTSROOT,max_custom_function_processes:C.THREADS,log_to_file:C.LOGGING_FILE,log_to_stdstreams:C.LOGGING_STDSTREAMS,local_studio_on:C.LOCALSTUDIO_ENABLED,clustering_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:C.CLUSTERING_USER,clustering_enabled:C.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:C.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:C.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:C.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:C.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:C.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:C.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:C.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:C.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:C.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:C.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:C.CLUSTERING_NODENAME,clustering_tls_certificate:C.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:C.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:C.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:C.CLUSTERING_TLS_INSECURE,clustering_tls_verify:C.CLUSTERING_TLS_VERIFY,clustering_loglevel:C.CLUSTERING_LOGLEVEL,clustering_republishmessages:C.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:C.CLUSTERING_DATABASELEVEL,customfunctions_network_port:C.HTTP_PORT,customfunctions_tls_certificate:C.TLS_CERTIFICATE,customfunctions_network_cors:C.HTTP_CORS,customfunctions_network_corsaccesslist:C.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:C.HTTP_HEADERSTIMEOUT,customfunctions_network_https:C.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:C.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:C.HTTP_TIMEOUT,http_threads:C.THREADS,threads:C.THREADS,maxheapmemory:C.MAXHEAPMEMORY,http_session_affinity:C.HTTP_SESSIONAFFINITY,http_compressionthreshold:C.HTTP_COMPRESSIONTHRESHOLD,http_cors:C.HTTP_CORS,http_corsaccesslist:C.HTTP_CORSACCESSLIST,http_headerstimeout:C.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:C.HTTP_KEEPALIVETIMEOUT,http_timeout:C.HTTP_TIMEOUT,http_port:C.HTTP_PORT,http_secureport:C.HTTP_SECUREPORT,customfunctions_processes:C.THREADS,customfunctions_root:C.COMPONENTSROOT,localstudio_enabled:C.LOCALSTUDIO_ENABLED,logging_file:C.LOGGING_FILE,logging_level:C.LOGGING_LEVEL,logging_root:C.LOGGING_ROOT,logging_rotation_enabled:C.LOGGING_ROTATION_ENABLED,logging_rotation_compress:C.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:C.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:C.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:C.LOGGING_ROTATION_PATH,logging_stdstreams:C.LOGGING_STDSTREAMS,logging_auditlog:C.LOGGING_AUDITLOG,logging_auditretention:C.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:C.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:C.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:C.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:C.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:C.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:C.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:C.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:C.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:C.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:C.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:C.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:C.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:C.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:C.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:C.ROOTPATH,databases:C.DATABASES,storage_path:C.STORAGE_PATH,ignorescripts:C.IGNORE_SCRIPTS,mqtt_network_port:C.MQTT_NETWORK_PORT,mqtt_websocket:C.MQTT_WEBSOCKET,mqtt_network_secureport:C.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:C.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:C.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:C.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:C.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:C.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:C.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:C.AUTHENTICATION_CACHETTL,authentication_enablesessions:C.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:C.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:C.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:C.COMPONENTSROOT,tls_certificate:C.TLS_CERTIFICATE,tls_privatekey:C.TLS_PRIVATEKEY,tls_certificateauthority:C.TLS_CERTIFICATEAUTHORITY,tls_ciphers:C.TLS_CIPHERS};for(let e in C){let t=C[e];CA[t.toLowerCase()]=t}var gF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},RF={csv_file_load:"csv_file_load",csv_data_load:X.CSV_DATA_LOAD,csv_url_load:X.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"},AF={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"},OF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bF={VERSION_DEFAULT:"2.2.0"},NF={DEVELOPMENT:8192,DEFAULT:512},yF={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"},IF={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"},wF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},LA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},CF=Symbol("metadata"),LF="__clustering__",DF=Object.values(LA),MF=15984864e5,DA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},UF=IA.invert(DA),PF={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"},vF=111,BF=`\r
2
+ `,HF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},xF=["*","%"],qF="unauthorized_access",FF="func_val",GF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},kF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},VF={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"},$F={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},YF={HTTP:"http"},KF={STOPPED:"stopped",ONLINE:"online"},WF="3.x.x",QF={SUCCESS:"success",FAILURE:"failure"},zF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};MA.exports={LOCAL_HARPERDB_OPERATIONS:ve,HDB_SUPPORT_ADDRESS:AA,HDB_SUPPORT_URL:bA,HDB_PRICING_URL:Sq,SUPPORT_HELP_MSG:Tq,LICENSE_HELP_MSG:NA,HDB_PROC_NAME:gA,HDB_PROC_DESCRIPTOR:th,CLUSTERING_LEAF_PROC_DESCRIPTOR:Hl,CLUSTERING_HUB_PROC_DESCRIPTOR:Bl,SYSTEM_SCHEMA_NAME:xq,HASH_FOLDER_NAME:qq,HDB_HOME_DIR_NAME:Fq,UPDATE_FILE_NAME:$q,LICENSE_KEY_DIR_NAME:kq,BOOT_PROPS_FILE_NAME:Vq,JOB_TYPE_ENUM:RF,JOB_STATUS_ENUM:dF,SYSTEM_TABLE_NAMES:oF,SYSTEM_TABLE_HASH_ATTRIBUTES:aF,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:fF,S3_BUCKET_AUTH_KEYS:EF,VALID_SQL_OPS_ENUM:hF,GEO_CONVERSION_ENUM:pF,HDB_SETTINGS_NAMES:wA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:SF,SERVICE_ACTIONS_ENUM:mF,CLUSTER_MESSAGE_TYPE_ENUM:AF,CLUSTER_CONNECTION_DIRECTION_ENUM:OF,CLUSTER_EVENTS_DEFS_ENUM:yF,PERIOD_REGEX:yq,DOUBLE_PERIOD_REGEX:Iq,UNICODE_PERIOD:wq,FORWARD_SLASH_REGEX:Cq,UNICODE_FORWARD_SLASH:Lq,ESCAPED_FORWARD_SLASH_REGEX:Dq,ESCAPED_PERIOD_REGEX:Mq,ESCAPED_DOUBLE_PERIOD_REGEX:Uq,REG_KEY_FILE_NAME:lF,RESTART_TIMEOUT_MS:Wq,HDB_FILE_PERMISSIONS:Qq,DATABASES_DIR_NAME:Xq,LEGACY_DATABASES_DIR_NAME:jq,TRANSACTIONS_DIR_NAME:Zq,LIMIT_COUNT_NAME:eF,ID_ATTRIBUTE_STRING:tF,INSERT_MODULE_ENUM:sF,UPGRADE_JSON_FIELD_NAMES_ENUM:iF,RESTART_CODE:Yq,RESTART_CODE_NUM:Kq,CLUSTER_OPERATIONS:ja,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:uF,HDB_INTERNAL_SC_CHANNEL_PREFIX:yr,INTERNAL_SC_CHANNELS:cF,CLUSTERING_MESSAGE_TYPES:PF,HDB_FILE_SUFFIX:Gq,BLOB_FOLDER_NAME:zq,HDB_TRASH_DIR:Jq,ORIGINATOR_SET_VALUE:vF,LICENSE_VALUES:bF,RAM_ALLOCATION_ENUM:NF,TIME_STAMP_NAMES_ENUM:LA,TIME_STAMP_NAMES:DF,PERMS_UPDATE_RELEASE_TIMESTAMP:MF,SEARCH_NOT_FOUND_MESSAGE:gq,SEARCH_ATTRIBUTE_NOT_FOUND:Rq,LICENSE_ROLE_DENIED_RESPONSE:Aq,LICENSE_MAX_CONNS_REACHED:Oq,BASIC_LICENSE_MAX_NON_CU_ROLES:OA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:pq,VALUE_SEARCH_COMPARATORS:DA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:UF,LICENSE_FILE_NAME:_F,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:IF,NEW_LINE:BF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Nq,MOMENT_DAYS_TAG:Pq,API_TURNOVER_SEC:vq,LOOPBACK:bq,CODE_EXTENSION:vl,WILDCARD_SEARCH_VALUE:Bq,NODE_ERROR_CODES:wF,JAVASCRIPT_EXTENSION:TA,PERMS_CRUD_ENUM:HF,UNAUTHORIZED_PERMISSION_NAME:qF,SEARCH_WILDCARDS:xF,FUNC_VAL:FF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:GF,JWT_ENUM:kF,CLUSTERING_FLAG:LF,ITC_EVENT_TYPES:VF,CUSTOM_FUNCTION_PROC_NAME:RA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Pl,SERVICES:$F,THREAD_TYPES:YF,MEM_SETTING_KEY:Hq,HDB_RESTART_SCRIPT:rq,PROCESS_DESCRIPTORS:cq,SERVICE_SERVERS:fq,SERVICE_SERVERS_CWD:eh,PROCESS_DESCRIPTORS_VALIDATE:_q,LAUNCH_SERVICE_SCRIPTS:Eq,LOG_LEVELS:lq,PROCESS_NAME_ENV_PROP:rF,LOG_NAMES:uq,PM2_PROCESS_STATUSES:KF,CONFIG_PARAM_MAP:CA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:Zx,HDB_DEFAULT_CONFIG_FILE:eq,ROLE_TYPES_ENUM:hq,BOOT_PROP_PARAMS:yA,INSTALL_PROMPTS:nF,HDB_ROOT_DIR_NAME:tq,CLUSTERING_PROCESSES:dq,FOREGROUND_PID_FILE:iq,PACKAGE_ROOT:Ws,PRE_4_0_0_VERSION:WF,DATABASES_PARAM_CONFIG:gF,METADATA_PROPERTY:CF,AUTH_AUDIT_STATUS:QF,AUTH_AUDIT_TYPES:zF,HDB_PID_FILE:oq,DEFAULT_DATABASE_NAME:aq,LEGACY_CONFIG_PARAMS:TF};SA()});var rh=T((Nie,vA)=>{"use strict";var UA=require("minimist");vA.exports=JF;function JF(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=PA(process.env),n=PA(UA(process.argv))):(r=process.env,n=UA(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(JF,"assignCMDENVVariables");function PA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(PA,"objKeysToLowerCase")});var V=T((Iie,uh)=>{"use strict";var yi=require("fs-extra"),{workerData:XF,threadId:jF}=require("worker_threads"),hs=require("path"),xA=require("yaml"),qA=require("properties-reader"),Nt=M(),BA=rh(),ZF=require("os"),{PACKAGE_ROOT:sh}=M(),{_assignPackageExport:eG}=require("../../index"),ec={};for(let e in console)ec[e]||(ec[e]=console[e]);var tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},FA={STDOUT:"stdOut",STDERR:"stdErr"},tG=hs.join(sh,"logs"),rG=hs.join(sh,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),nG=1e4,Es,kn,er,xl,ql,tc,vo,Za;Za===void 0&&GA();uh.exports={notify:$A,fatal:YA,error:rc,warn:ch,info:Fl,debug:ah,trace:oh,setLogLevel:lG,log_level:er,loggerWithTag:sG,suppressLogging:iG,initLogSettings:GA,setupConsoleLogging:kA,logCustomLevel:cG,closeLogFile:ih,getLogFilePath:()=>tc,OUTPUTS:FA,AuthAuditLog:fG};eG("logger",uh.exports);function GA(e=!1){try{if(Za===void 0||e){ih();let t=uG(),r=BA(["ROOTPATH"]);try{Za=qA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!yi.pathExistsSync(hs.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw n}({level:er,config_log_path:ql,to_file:Es,to_stream:kn}=_G(r.ROOTPATH?hs.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):Za.get("settings_path"))),xl=Nt.LOG_NAMES.HDB,tc=hs.join(ql,xl)}}catch(t){if(Za=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT){let r=BA(Object.keys(Nt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Nt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Nt.CONFIG_PARAMS.LOGGING_LEVEL){er=u;continue}if(c===Nt.CONFIG_PARAMS.LOGGING_STDSTREAMS){kn=u;continue}c===Nt.CONFIG_PARAMS.LOGGING_FILE&&(Es=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=dG();Es=Es===void 0?s:Es,Es=HA(Es),kn=kn===void 0?i:kn,kn=HA(kn),er=er===void 0?n:er,ql=tG,xl=Nt.LOG_NAMES.INSTALL,tc=hs.join(ql,xl);return}throw rc("Error initializing log settings"),rc(t),t}process.env.DEV_MODE&&(kn=!0),kA()}a(GA,"initLogSettings");var nh=!0;function kA(){Po("error",rc),Po("warn",ch),Po("log",Fl),Po("info",Fl),Po("debug",ah),Po("trace",oh)}a(kA,"setupConsoleLogging");function Po(e,t){console[e]=function(...r){if(nh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return ec[e](...r)}}a(Po,"logConsole");function sG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r($A),fatal:r(YA),error:r(rc),warn:r(ch),info:r(Fl),debug:r(ah),trace:r(oh)};function r(n){return function(...s){return n(t,...s)}}}a(sG,"loggerWithTag");function iG(e){try{nh=!1,e()}finally{nh=!0}}a(iG,"suppressLogging");var oG=XF?.name?.replace(/ /g,"-")||"main";function ms(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||oG+"/"+jF);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}
3
+ `}a(ms,"createLogRecord");function nc(e){Es&&VA(e),kn&&process.stdout.write(e)}a(nc,"logStdOut");function Gl(e){Es&&VA(e),kn&&process.stderr.write(e)}a(Gl,"logStdErr");function VA(e){aG(),vo?yi.appendFileSync(vo,e):ec.log(e)}a(VA,"logToFile");function ih(){try{yi.closeSync(vo)}catch{}vo=null}a(ih,"closeLogFile");function aG(){if(!vo){try{if(!tc)debugger;vo=yi.openSync(tc,"a")}catch(e){ec.error(e)}setTimeout(()=>{ih()},nG).unref()}}a(aG,"openLogFile");function Fl(...e){tr[er]<=tr.info&&nc(ms("info",e))}a(Fl,"info");function oh(...e){tr[er]<=tr.trace&&nc(ms("trace",e))}a(oh,"trace");function rc(...e){tr[er]<=tr.error&&Gl(ms("error",e))}a(rc,"error");function ah(...e){tr[er]<=tr.debug&&nc(ms("debug",e))}a(ah,"debug");function $A(...e){tr[er]<=tr.notify&&nc(ms("notify",e))}a($A,"notify");function YA(...e){tr[er]<=tr.fatal&&Gl(ms("fatal",e))}a(YA,"fatal");function ch(...e){tr[er]<=tr.warn&&Gl(ms("warn",e))}a(ch,"warn");function cG(e,t,...r){t===FA.STDERR?Gl(ms(e,r)):nc(ms(e,r))}a(cG,"logCustomLevel");function uG(){let e;try{e=ZF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=hs.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return yi.existsSync(t)||(t=hs.join(sh,"utility/hdb_boot_properties.file")),t}a(uG,"getPropsFilePath");function lG(e){er=e}a(lG,"setLogLevel");function HA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(HA,"autoCastBoolean");function _G(e){try{if(e.includes("config/settings.js")){let o=qA(e);return{level:o.get(Nt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:hs.dirname(o.get(Nt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=xA.parseDocument(yi.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===Nt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(_G,"getLogConfig");function dG(){try{let e=xA.parseDocument(yi.readFileSync(rG,"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(dG,"getDefaultConfig");function fG(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(fG,"AuthAuditLog")});var WA=T((Cie,KA)=>{"use strict";var EG=require("util"),hG=require("path"),mG=require("child_process"),pG=EG.promisify(mG.execFile),SG=1e3*1e3*10;KA.exports={findPs:TG};async function TG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await pG("ps",["wwxo",`pid,${r}`],{maxBuffer:SG});for(let s of n.trim().split(`
4
+ `).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:hG.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(TG,"findPs")});var ht=T((Die,zA)=>{"use strict";var gG="__dbis__",RG="__txns__",AG="__environment_name__",OG="__dbi_defintion__",bG={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},NG=["__createdtime__","__updatedtime__"],yG="\uFFFF",QA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},IG=Object.values(QA);zA.exports={AUDIT_STORE_NAME:RG,INTERNAL_DBIS_NAME:gG,DBI_DEFINITION_NAME:OG,SEARCH_TYPES:bG,TIMESTAMP_NAMES:NG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:AG,TRANSACTIONS_DBI_NAMES_ENUM:QA,TRANSACTIONS_DBIS:IG,OVERFLOW_MARKER:yG}});var Ir=T((Mie,sO)=>{"use strict";var JA=M(),XA=ht(),jA={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},ZA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),eO={500:ZA("There was an error processing your request."),400:"Invalid request"},wG=eO[jA.INTERNAL_SERVER_ERROR],CG={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},LG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},DG={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},MG={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${XA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${XA.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"},UG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${JA.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 ${JA.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"},tO={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"},PG={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."},vG={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`},BG={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"},HG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},xG={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`},rO={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.`},nO={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}`},qG={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."},FG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},GG={...tO,...DG,...CG,...PG,...vG,...BG,...HG,...xG,...UG,...rO,...nO,...qG,...FG,...LG};sO.exports={CHECK_LOGS_WRAPPER:ZA,HDB_ERROR_MSGS:GG,DEFAULT_ERROR_MSGS:eO,DEFAULT_ERROR_RESP:wG,HTTP_STATUS_CODES:jA,LMDB_ERRORS_ENUM:MG,AUTHENTICATION_ERROR_MSGS:tO,VALIDATION_ERROR_MSGS:rO,ITC_ERRORS:nO}});var Z=T((Pie,aO)=>{"use strict";var Bo=Ir(),kG=V(),VG=M(),kl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,iO),this.statusCode=n||Bo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bo.DEFAULT_ERROR_MSGS[n]?Bo.DEFAULT_ERROR_MSGS[n]:Bo.DEFAULT_ERROR_MSGS[Bo.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&&kG[s](i)}},lh=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}},_h=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function iO(e,t,r,n=VG.LOG_LEVELS.ERROR,s=null,i=!1){if(oO(e))return e;let o=new kl(e,t,r,n,s);return i&&delete o.stack,o}a(iO,"handleHDBError");function oO(e){return e.__proto__.constructor.name===kl.name}a(oO,"isHDBError");aO.exports={isHDBError:oO,handleHDBError:iO,ClientError:lh,ServerError:_h,hdb_errors:Bo}});var uO=T((Bie,cO)=>{"use strict";var $G={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
5
5
  `),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
6
- `)},oq="certificate.pem",aq="privateKey.pem",cq="ca.pem";FA.exports={CERTIFICATE_VALUES:iq,CERTIFICATE_PEM_NAME:oq,PRIVATEKEY_PEM_NAME:aq,CA_PEM_NAME:cq}});var je=T((wne,qA)=>{"use strict";var sr=require("validate.js");sr.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||sr.validators.type.checks[t](e)?null:` must be a '${t}' value`};sr.validators.type.checks={Object:function(e){return sr.isObject(e)&&!sr.isArray(e)},Array:sr.isArray,Integer:sr.isInteger,Number:sr.isNumber,String:sr.isString,Date:sr.isDate,Boolean:function(e){return typeof e=="boolean"}};sr.validators.hasValidFileExt=function(e,t){return sr.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};qA.exports={validateObject:uq,validateObjectAsync:lq,validateBySchema:_q};function uq(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=sr(e,t,{format:"flat"});return r?new Error(r):null}a(uq,"validateObject");async function lq(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await sr.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(lq,"validateObjectAsync");function _q(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_q,"validateBySchema")});var zE=T((Dne,KA)=>{"use strict";var YA=require("fs-extra"),oe=require("joi"),dq=require("os"),{boolean:Be,string:Zr,number:Ut,array:QE}=oe.types(),{totalmem:kA}=require("os"),bi=require("path"),fq=q(),vl=z(),Lne=GA(),VA=w(),Eq=je(),$A="log",hq="components",mq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Sq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Tq="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",gq="rootPath config parameter is undefined",Rq="clustering.enabled config parameter is undefined",Ni=Ut.min(0).required(),Bl=QE.items({host:Zr.required(),port:Ni}).empty(null),Vs;KA.exports={configValidator:Aq,routesValidator:wq,route_constraints:Bl};function Aq(e){if(Vs=e.rootPath,vl.isEmpty(Vs))throw gq;let t=Be.required(),r=Ut.min(0).max(1e3).empty(null).default(Iq),s=Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ja),n=Zr.optional().empty(null),i=Zr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=oe.string().empty(null).default(ja),c=oe.custom(bq).empty(null).default(ja),u=e.clustering?.enabled;if(vl.isEmpty(u))throw Rq;let _;return u===!0?_=oe.object({enabled:t,hubServer:oe.object({cluster:oe.object({name:oe.required().empty(null),network:oe.object({port:Ni,routes:Bl}).required()}).required(),leafNodes:oe.object({network:oe.object({port:Ni}).required()}).required(),network:oe.object({port:Ni}).required()}).required(),leafServer:oe.object({network:oe.object({port:Ni,routes:Bl}).required(),streams:oe.object({maxAge:Ut.min(120).allow(null).optional(),maxBytes:Ut.min(1).allow(null).optional(),maxMsgs:Ut.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:oe.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:oe.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Be.required(),verify:Be.optional()}),user:Zr.optional().empty(null)}).required():_=oe.object({enabled:t,tls:oe.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Be.required()})}).required(),oe.object({authentication:oe.object({authorizeLocal:Be,cacheTTL:Ut.required(),enableSessions:Be}),analytics:oe.object({aggregatePeriod:Ut}),componentsRoot:s.optional(),clustering:_,localStudio:oe.object({enabled:t}).required(),logging:oe.object({auditAuthEvents:oe.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:oe.valid("notify","fatal","error","warn","info","debug","trace"),rotation:oe.object({enabled:Be.optional(),compress:Be.optional(),interval:Zr.custom(yq).optional().empty(null),maxSize:Zr.custom(Nq).optional().empty(null),path:Zr.optional().empty(null).default(ja)}).required(),root:s,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:oe.object({network:oe.object({cors:Be.optional(),corsAccessList:QE.optional(),headersTimeout:Ut.min(1).optional(),keepAliveTimeout:Ut.min(1).optional(),port:Ut.optional().empty(null),domainSocket:oe.optional().empty("hdb/operations-server").default(ja),securePort:Ut.optional().empty(null),timeout:Ut.min(1).optional()}).optional(),tls:oe.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:oe.object({network:oe.object({port:Ni,securePort:Ni,mtls:oe.alternatives([Be.optional(),oe.object({user:Zr.optional(),certificateAuthority:n})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:oe.object({compressionThreshold:Ut.optional(),cors:Be.optional(),corsAccessList:QE.optional(),headersTimeout:Ut.min(1).optional(),port:Ut.min(0).optional().empty(null),securePort:Ut.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:Ut.min(0).optional(),storage:oe.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Be.optional(),noReadAhead:Be.optional(),path:c,prefetchWrites:Be.optional()}).required(),ignoreScripts:Be.optional(),tls:oe.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional(),ciphers:Zr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Aq,"configValidator");function Oq(e){return YA.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Oq,"doesPathExist");function bq(e,t){oe.assert(e,Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Oq(e);if(r)return t.message(r)}a(bq,"validatePath");function Nq(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Sq):e}a(Nq,"validateRotationMaxSize");function yq(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Tq):e}a(yq,"validateRotationInterval");function Iq(e,t){let r=t.state.path.join("."),s=dq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||kA();return i=Math.round(Math.min(i,kA())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),fq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(Iq,"setDefaultThreads");function ja(e,t){let r=t.state.path.join(".");if(!vl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(vl.isEmpty(Vs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return bi.join(Vs,hq);case"logging.root":return bi.join(Vs,$A);case"clustering.leafServer.streams.path":return bi.join(Vs,"clustering","leaf");case"storage.path":let s=bi.join(Vs,VA.LEGACY_DATABASES_DIR_NAME);return YA.existsSync(s)?s:bi.join(Vs,VA.DATABASES_DIR_NAME);case"logging.rotation.path":return bi.join(Vs,$A);case"operationsApi.network.domainSocket":return r==null?null:bi.join(Vs,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ja,"setDefaultRoot");function wq(e){let t=oe.object({routes:Bl});return Eq.validateBySchema({routes:e},t)}a(wq,"routesValidator")});var Io={};ze(Io,{server:()=>Ot});var WA,Ot,es=ge(()=>{WA=require("../../index"),Ot={};(0,WA._assignPackageExport)("server",Ot)});var Cr=T((Pne,rO)=>{"use strict";var wr=w(),Mt=z(),bt=q(),{configValidator:Cq,routesValidator:QA}=zE(),nr=require("fs-extra"),Lq=require("yaml"),bs=require("path"),Dq=require("is-number"),JA=require("properties-reader"),Uq=require("lodash"),{handleHDBError:Mq}=Z(),{HTTP_STATUS_CODES:Pq,HDB_ERROR_MSGS:Hl}=yr(),Mne=require("minimist"),{server:vq}=(es(),te(Io)),{DATABASES_PARAM_CONFIG:Za,CONFIG_PARAMS:Ir,CONFIG_PARAM_MAP:Ns}=wr,Bq="Unable to get config value because config is uninitialized",Hq="Config successfully initialized",xq="Error backing up config file",Fq="Empty parameter sent to getConfigValue",XA=bs.join(wr.PACKAGE_ROOT,"config","yaml",wr.HDB_DEFAULT_CONFIG_FILE),Gq="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",zA={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"},xl,Nt,Fl;rO.exports={createConfigFile:qq,getDefaultConfig:kq,getConfigValue:ZA,initConfig:XE,flattenConfig:wo,updateConfigValue:eO,updateConfigObject:$q,getConfiguration:Wq,setConfiguration:Qq,readConfigFile:ZE,getClusteringRoutes:zq,initOldConfig:tO,getConfigFromFile:Jq,getConfigFilePath:yi,addConfig:Xq,deleteConfigFromFile:jq,getConfigObj:Zq};function qq(e){let t=Kn(XA);xl=wo(t.toJSON());let r;for(let o in e){let c=Ns[o.toLowerCase()];if(c===Ir.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=JE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){bt.error(l)}}}r&&jA(t,r),jE(t);let s=t.toJSON();Nt=wo(s);let n=t.getIn(["rootPath"]),i=bs.join(n,wr.HDB_CONFIG_FILE);nr.createFileSync(i),nr.writeFileSync(i,String(t)),bt.trace(`Config file written to ${i}`)}a(qq,"createConfigFile");function jA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!Mt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Za.TABLES))for(let i in s[n][Za.TABLES])for(let o in s[n][Za.TABLES][i]){let c=s[n][Za.TABLES][i][o],u=[Ir.DATABASES,n,Za.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Ir.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){bt.error("Error parsing schemas CLI/env config arguments",s)}}a(jA,"setSchemasConfig");function kq(e){if(xl===void 0){let r=Kn(XA);xl=wo(r.toJSON())}let t=Ns[e.toLowerCase()];if(t!==void 0)return xl[t.toLowerCase()]}a(kq,"getDefaultConfig");function ZA(e){if(e==null){bt.error(Fq);return}if(Nt===void 0){bt.trace(Bq);return}let t=Ns[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(ZA,"getConfigValue");function yi(e=Mt.getPropsFilePath()){let t=Mt.getEnvCliRootPath();return t?bs.join(t,wr.HDB_CONFIG_FILE):JA(e).get(wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(yi,"getConfigFilePath");function XE(e=!1){if(Nt===void 0||e){let t;if(!Mt.noBootFile()){t=Mt.getPropsFilePath();try{nr.accessSync(t,nr.constants.F_OK|nr.constants.R_OK)}catch(i){throw bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=yi(t),s;if(r.includes("config/settings.js"))try{tO(r);return}catch(i){if(i.code!==wr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Kn(r)}catch(i){if(i.code===wr.NODE_ERROR_CODES.ENOENT){bt.trace(`HarperDB config file not found at ${r}.
7
- This can occur during early stages of install where the config file has not yet been created`);return}else throw bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Vq(s,r),jE(s);let n=s.toJSON();if(vq.config=n,Nt=wo(n),Nt.logging_rotation_rotate)for(let i in zA)Nt[i]&&bt.error(`Config ${zA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);bt.trace(Hq)}}a(XE,"initConfig");function Vq(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],bs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],bs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],bs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(bt.trace("Updating config file with missing config params"),nr.writeFileSync(t,String(e)))}a(Vq,"checkForUpdatedConfig");function jE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=Cq(t);if(r.error)throw Hl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(jE,"validateConfig");function $q(e,t){Nt===void 0&&(Nt={});let r=Ns[e.toLowerCase()];if(r===void 0){bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a($q,"updateConfigObject");function eO(e,t,r=void 0,s=!1,n=!1,i=!1){Nt===void 0&&XE();let o=ZA(Ns.hdb_root),c=bs.join(o,wr.HDB_CONFIG_FILE),u=Kn(c),_;if(r===void 0&&e.toLowerCase()===Ir.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=Ns[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=JE(f,t);u.setIn([...E],h)}else for(let f in r){let E=Ns[f.toLowerCase()];if(E===Ir.HTTP_SECUREPORT&&r[f]===Nt[Ir.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Ir.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Nt[Ir.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Ir.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=wr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=JE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(A){bt.error(A)}}}_&&jA(u,_),jE(u);let l=u.getIn(["rootPath"]),d=bs.join(l,wr.HDB_CONFIG_FILE);s===!0&&Yq(c,l),nr.writeFileSync(d,String(u)),n&&(Nt=wo(u.toJSON())),bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eO,"updateConfigValue");function Yq(e,t){try{let r=bs.join(t,"backup",`${wr.HDB_CONFIG_FILE}.bak`);nr.copySync(e,r),bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){bt.error(xq),bt.error(r)}}a(Yq,"backupConfigFile");var Kq=["databases"];function wo(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)),Fl=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!Kq.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Ir[u.toUpperCase()]&&Ns[u]&&(n[Ns[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(wo,"flattenConfig");function JE(e,t){if(e===Ir.CLUSTERING_NODENAME||e===Ir.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(Dq(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Mt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Mt.autoCast(t)}a(JE,"castConfigValue");function Wq(){let e=Mt.getPropsFilePath(),t=yi(e);return Kn(t).toJSON()}a(Wq,"getConfiguration");async function Qq(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return eO(void 0,void 0,n,!0),Gq}catch(i){throw typeof i=="string"||i instanceof String?Mq(i,i,Pq.BAD_REQUEST,void 0,void 0,!0):i}}a(Qq,"setConfiguration");function ZE(){let e=Mt.getPropsFilePath();try{nr.accessSync(e,nr.constants.F_OK|nr.constants.R_OK)}catch(s){if(!Mt.noBootFile())throw bt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=yi(e);return Kn(t).toJSON()}a(ZE,"readConfigFile");function Kn(e){return Lq.parseDocument(nr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Kn,"parseYamlDoc");function zq(){let e=ZE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Mt.isEmptyOrZeroLength(t)?[]:t;let r=QA(t);if(r)throw Hl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Mt.isEmptyOrZeroLength(s)?[]:s;let n=QA(s);if(n)throw Hl.CONFIG_VALIDATION(n.message);if(!Mt.isEmptyOrZeroLength(s)&&!Mt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!Mt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Hl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(zq,"getClusteringRoutes");function tO(e){let t=JA(e);Nt={};for(let r in Ns){let s=t.get(r.toUpperCase());if(Mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ns[r].toLowerCase();n===Ir.LOGGING_ROOT?Nt[n]=bs.dirname(s):Nt[n]=s}return Nt}a(tO,"initOldConfig");function Jq(e){let t=ZE();return Uq.get(t,e.replaceAll("_","."))}a(Jq,"getConfigFromFile");async function Xq(e,t){let r=Kn(yi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await nr.writeFile(yi(),String(r))}a(Xq,"addConfig");function jq(e){let t=yi(Mt.getPropsFilePath()),r=Kn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=bs.join(s,wr.HDB_CONFIG_FILE);nr.writeFileSync(n,String(r))}a(jq,"deleteConfigFromFile");function Zq(){return Fl||(XE(),Fl)}a(Zq,"getConfigObj")});var j=T((Bne,oO)=>{"use strict";var eh=require("fs-extra"),ys=require("path"),sO=require("os"),ek=require("properties-reader"),tc=q(),ec=z(),ie=w(),Gl=Cr(),tk="Error initializing environment manager",ql="BOOT_PROPS_FILE_PATH",nO=!1,rk={[ie.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},pn={};oO.exports={BOOT_PROPS_FILE_PATH:ql,getHdbBasePath:sk,setHdbBasePath:nk,get:iO,initSync:ok,setProperty:me,initTestEnvironment:ak};function sk(){return pn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(sk,"getHdbBasePath");function nk(e){pn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(nk,"setHdbBasePath");function iO(e){let t=Gl.getConfigValue(e);return t===void 0?pn[e]:t}a(iO,"get");function me(e,t){rk[e]&&(pn[e]=t),Gl.updateConfigObject(e,t)}a(me,"setProperty");function ik(){let e;try{e=ec.getPropsFilePath(),eh.accessSync(e,eh.constants.F_OK|eh.constants.R_OK),nO=!0;let t=ek(e);return pn[ie.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ie.HDB_SETTINGS_NAMES.INSTALL_USER),pn[ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),pn[ql]=e,!0}catch{return tc.trace(`Environment manager found no properties file at ${e}`),!1}}a(ik,"doesPropFileExist");function ok(e=!1){try{(nO||ik()||ec.noBootFile())&&(Gl.initConfig(e),pn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Gl.getConfigValue(ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){tc.error(tk),tc.error(t),console.error(t),process.exit(1)}}a(ok,"initSync");function ak(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ys.join(__dirname,"../../","unitTests");pn[ql]=ys.join(u,"hdb_boot_properties.file"),me(ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ys.join(u,"settings.test")),me(ie.HDB_SETTINGS_NAMES.INSTALL_USER,sO.userInfo()?sO.userInfo().username:void 0),me(ie.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ys.join(u,"envDir","utility","keys","privateKey.pem")),me(ie.HDB_SETTINGS_NAMES.CERT_KEY,ys.join(u,"envDir","utility","keys","certificate.pem")),me(ie.CONFIG_PARAMS.TLS_PRIVATEKEY,ys.join(u,"envDir","utility","keys","privateKey.pem")),me(ie.CONFIG_PARAMS.TLS_CERTIFICATE,ys.join(u,"envDir","utility","keys","certificate.pem")),me(ie.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),me(ie.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ys.join(u,"envDir","log")),me(ie.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),me(ie.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),me(ie.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),me(ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,ys.join(u,"envDir")),me(ie.CONFIG_PARAMS.STORAGE_PATH,ys.join(u,"envDir")),n&&(me(ie.CONFIG_PARAMS.HTTP_SECUREPORT,iO(ie.CONFIG_PARAMS.HTTP_PORT)),me(ie.CONFIG_PARAMS.HTTP_PORT,null)),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!n),me(ie.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),me(ie.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ec.isEmpty(i)?!1:i),me(ie.CONFIG_PARAMS.HTTP_CORS,ec.isEmpty(i)?!1:i),me(ie.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),me(ie.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),me(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),me(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),me(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,ys.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),me(ie.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ec.isEmpty(c)?!1:c),o&&(me("CORS_ACCESSLIST",o),me(ie.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(me(ie.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),me(ie.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(me(ie.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),me(ie.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(me(ie.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),me(ie.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ql}. Please check your boot props and settings files`;tc.fatal(r),tc.error(t)}}a(ak,"initTestEnvironment")});var Ye=T((xne,fO)=>{"use strict";var oc=w(),ck=z(),ir=j(),ac=require("path"),uk=require("minimist"),aO=require("fs-extra"),cO=require("lodash");ir.initSync();var{CONFIG_PARAMS:Wn,DATABASES_PARAM_CONFIG:rc,SYSTEM_SCHEMA_NAME:kl}=oc,sc,nc,ic;function uO(){if(sc!==void 0)return sc;if(ir.getHdbBasePath()!==void 0)return sc=ir.get(Wn.STORAGE_PATH)||ac.join(ir.getHdbBasePath(),oc.DATABASES_DIR_NAME),sc}a(uO,"getBaseSchemaPath");function lO(){if(nc!==void 0)return nc;if(ir.getHdbBasePath()!==void 0)return nc=dO(kl),nc}a(lO,"getSystemSchemaPath");function _O(){if(ic!==void 0)return ic;if(ir.getHdbBasePath()!==void 0)return ic=ir.get(oc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ac.join(ir.getHdbBasePath(),oc.TRANSACTIONS_DIR_NAME),ic}a(_O,"getTransactionAuditStoreBasePath");function lk(e,t){let r=ir.get(Wn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ac.join(_O(),e.toString())}a(lk,"getTransactionAuditStorePath");function dO(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(oc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ac.join(uO(),e)}a(dO,"getSchemaPath");function _k(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,uk(process.argv));let s=r[Wn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ck.isObject(s))throw o;i=s}for(let o of i){let c=o[kl];if(!c)continue;let u=ir.get(Wn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[rc.PATH];if(_)return cO.set(u,[kl,rc.TABLES,t,rc.PATH],_),ir.setProperty(Wn.DATABASES,u),_;let l=c?.[rc.PATH];if(l)return cO.set(u,[kl,rc.PATH],l),ir.setProperty(Wn.DATABASES,u),l}}let n=r[Wn.STORAGE_PATH.toUpperCase()];if(n){if(!aO.pathExistsSync(n))throw new Error(n+" does not exist");let i=ac.join(n,e);return aO.mkdirsSync(i),ir.setProperty(Wn.STORAGE_PATH,n),i}return lO()}a(_k,"initSystemSchemaPaths");function dk(){sc=void 0,nc=void 0,ic=void 0}a(dk,"resetPaths");fO.exports={getBaseSchemaPath:uO,getSystemSchemaPath:lO,getTransactionAuditStorePath:lk,getTransactionAuditStoreBasePath:_O,getSchemaPath:dO,initSystemSchemaPaths:_k,resetPaths:dk}});var Lr=T((kne,SO)=>{"use strict";var fk=yr().LMDB_ERRORS_ENUM,Gne=require("lmdb"),Ek=ft(),qne=require("buffer").Buffer,{OVERFLOW_MARKER:EO,MAX_SEARCH_KEY_LENGTH:Vl}=Ek,hO=["number","string","symbol","boolean","bigint"];function hk(e){if(e=e?.primaryStore||e,!e)throw new Error(fk.ENV_REQUIRED)}a(hk,"validateEnv");function mk(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(mk,"stringifyData");function pk(e){return e instanceof Date?e.valueOf():e}a(pk,"convertKeyValueToWrite");function Sk(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hO.includes(typeof e))return e.length>Vl?[e.slice(0,Vl)+EO]:[e];let r;if(Array.isArray(e)){r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s];if(hO.includes(typeof i))i.length>Vl?r.push(i.slice(0,Vl)+EO):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(Sk,"getIndexedValues");var $l=0,mO=0;function pO(){mO=Date.now()-performance.now()}a(pO,"adjustStartTime");pO();var Tk=6e4;setInterval(pO,Tk).unref();function gk(){let e=performance.now()+mO;return e>$l?($l=e,e):($l+=488e-6,$l)}a(gk,"getNextMonotonicTime");SO.exports={validateEnv:hk,stringifyData:mk,convertKeyValueToWrite:pk,getNextMonotonicTime:gk,getIndexedValues:Sk}});var TO,Is,th,cc=ge(()=>{TO=require("events"),Is=class extends TO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new th;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)}},th=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Dr(e){return e[Wt]||(e[Wt]=Object.create(null))}function Ql(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[pe])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new ts.ClientError(`${c} must be a string, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new ts.ClientError(`${c} must be a string, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new ts.ClientError(`${c} must be a number, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new ts.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new ts.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new ts.ClientError(`${c} must be a number, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new ts.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new ts.ClientError(`${c} must be a Date, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new ts.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Dr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Dr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new ts.ClientError(`${c} must be an object, attempt to assign ${l}`);Dr(this)[c]=l},"set")}_={get(){let l=this[Wt];if(l&&c in l)return l[c];let d=this[ye]?.[c];if(d&&typeof d=="object"){let f=gO(d,o);if(f)return l||(l=this[Wt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,s[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Wt];return u?.[o]!==void 0?u[o]:this[ye]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ts.ClientError("Can not add a property to a sealed table schema");Dr(this)[o]=c}),i("deleteProperty",function(o){Dr(this)[o]=void 0}),i("toJSON",function(){let o=this[Wt],c;for(let _ in o)c||(c=Object.assign({},this[ye])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ye])),Object.assign(c,this)),c||this[ye]}),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 gO(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ye]=n}},Ql(r,t)),new r(e)):new Yl(e);case Array:let s=new Wl(e.length);s[ye]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=gO(o,t?.elements)),s[n]=o}return s}}function zl(e){let t=e[Wt],r;for(let n in t){r||(r=Object.assign({},e[ye]));let i=t[n];i&&typeof i=="object"&&(i=zl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function uc(e){let t;if(e[ye]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=uc(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Wt];for(let s in r){t||(t=Object.assign({},e[ye]));let n=r[s];n&&typeof n=="object"&&(n=uc(n)),t[s]=n}return t?Object.freeze(t):e[ye]||(e.buffer?e:Object.freeze(e))}function Kl(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ii]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ye]===n){if(Kl(i))return!0}else return!0}}else{let r=e[Wt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ye]===i){if(Kl(n))return!0}else return!0}else return!0}}return!1}var ts,Wt,Yl,Ii,Wl,Jl=ge(()=>{ws();ts=M(Z()),Wt=Symbol("own-data");a(Dr,"getChanges");a(Ql,"assignTrackedAccessors");a(gO,"trackObject");Yl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};Ql(Yl,{});a(zl,"collapseData");a(uc,"deepFreeze");a(Kl,"hasChanges");Ii=Symbol.for("has-array-changes"),Wl=class extends Array{static{a(this,"TrackedArray")}[Ii];constructor(t){super(t)}splice(...t){return this[Ii]=!0,super.splice(...t)}push(...t){return this[Ii]=!0,super.push(...t)}pop(){return this[Ii]=!0,super.pop()}unshift(...t){return this[Ii]=!0,super.unshift(...t)}shift(){return this[Ii]=!0,super.shift()}};Wl.prototype.constructor=Array});function bk(){Ok=setInterval(function(){for(let e of rh)if(e.stale){let t=e[pe]?.url;RO.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},Ak).unref()}var sh,RO,Rk,rh,wi,Xl,Ak,Ok,nh=ge(()=>{sh=M(Lr()),RO=M(q());ws();Rk=100,rh=new Set,wi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),rh.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(rh.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,sh.getNextMonotonicTime)());let s=t.retries||0;if(this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}s||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<Rk>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(t){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},Xl=class extends wi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,sh.getNextMonotonicTime)())}getReadTxn(){}},Ak=3e4;a(bk,"startMonitoringTxns");bk()});function Ke(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new wi;e.timestamp&&(s.timestamp=e.timestamp),s[pe]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit(r?.resetTransaction?{prepared(){s.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw s.abort({}),c}}var AO,Ci=ge(()=>{AO=require("../../index");ws();nh();a(Ke,"transaction");(0,AO._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[pe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[pe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function _c(e,t,r,s,n,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let A=o[0],O=Sn(s.attributes,A);if(O.relationship){if(o.length<2)throw new Li.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let y=O.definition?.tableClass||O.elements?.definition?.tableClass,F=new Map,K=_c({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,y,n,F);if(O.relationship.to){i[o[0]]=F;let H=!!Sn(y.attributes,O.relationship.to)?.elements;K=wk(K,O,y.primaryStore,H,F)}if(O.relationship.from){let H=a(D=>_c({attribute:O.relationship.from,value:D},t,r,s,n,F),"searchEntry");O.elements?(i[o[0]]=F,K=Ck(K,O,y.primaryStore,F,H)):K=K.flatMap(H)}return K}else if(o.length===1)o=o[0];else throw new Li.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(bO[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=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,l=c.slice(0),l[l.length-1]=Ys.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case Je.SEARCH_TYPES.EQUALS:case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new Li.ClientError(`Unknown query comparator "${u}"`)}if(r){let A=_;_=l,l=A,A=!f,f=!d,d=A}let h=o===s.primaryKey||o==null,p=h?s.primaryStore:s.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!n)throw new Li.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let A=dc(e);if(!A)throw new Li.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:O,value:y})=>new Promise((F,K)=>setImmediate(()=>{try{F(y&&A(y)?O:ih.SKIP)}catch(H){K(H)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let A=p.getRange(S).map(O=>O.value==null?ih.SKIP:O);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function Sn(e,t){if(Array.isArray(t))if(t.length>1){let r=Sn(e,t[0]),s=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return s?Sn(s,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function wk(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=zn(d),o=!0);let h=n.get(E);h?h.push(f):n.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!n.filters?.some(h=>!h(f))){if(s)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}return i=(o?n:n.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 Ck(e,t,r,s,n){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){let c;if(o&&(c=o.next(),!c.done))return c;if(!i)return(async()=>{let u=new Map;s.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(zn(d)));let _=0;for await(let l of e){if(s.filters){let d=r.get(l);if(s.filters.some(f=>!f(d)))continue}u.set(zn(l),l),_++>100&&(await new Promise(setImmediate),_=0)}return i=u.values()[Symbol.iterator](),this.next()})();do{let u=i.next();return u.done?u:(o=n(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function dc(e,t,r,s){if(e.conditions){let c=e.conditions.map(dc);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let n=e.comparator,i=e[0]??e.attribute,o=e[1]??e.value;if(Array.isArray(i)){if(i.length===0)return()=>!0;if(i.length===1)i=i[0];else if(i.length>1){let c=i[0],u=Sn(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=s?.[c],d=dc({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:n},t,r,l?.[c]?.joined);if(!d)return;if(l){l.filters||(l.filters=[]),l.filters.push(d);return}let f=t.propertyResolvers?.[c];return(E,h)=>{let p,S;return f?(S=f(E,r,h),p=S?.value):p=E[c],p?Array.isArray(p)?p.some(d):d(p,S):!1}}}switch(o instanceof Date&&(o=o.getTime()),bO[n]||n){case Je.SEARCH_TYPES.EQUALS:case void 0:return $s(i,c=>c===o);case Je.SEARCH_TYPES.CONTAINS:return $s(i,c=>c?.toString().includes(o));case Je.SEARCH_TYPES.ENDS_WITH:case Je.SEARCH_TYPES._ENDS_WITH:return $s(i,c=>c?.toString().endsWith(o));case Je.SEARCH_TYPES.STARTS_WITH:case Je.SEARCH_TYPES._STARTS_WITH:return $s(i,c=>typeof c=="string"&&c.startsWith(o));case Je.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),$s(i,c=>(0,Ys.compareKeys)(c,o[0])>=0&&(0,Ys.compareKeys)(c,o[1])<=0);case"gt":case Je.SEARCH_TYPES.GREATER_THAN:case Je.SEARCH_TYPES._GREATER_THAN:return $s(i,c=>(0,Ys.compareKeys)(c,o)>0);case"ge":case Je.SEARCH_TYPES.GREATER_THAN_EQUAL:case Je.SEARCH_TYPES._GREATER_THAN_EQUAL:return $s(i,c=>(0,Ys.compareKeys)(c,o)>=0);case Je.SEARCH_TYPES.LESS_THAN:case"lt":case Je.SEARCH_TYPES._LESS_THAN:return $s(i,c=>(0,Ys.compareKeys)(c,o)<0);case"le":case Je.SEARCH_TYPES.LESS_THAN_EQUAL:case Je.SEARCH_TYPES._LESS_THAN_EQUAL:return $s(i,c=>(0,Ys.compareKeys)(c,o)<=0);case"ne":return $s(i,c=>(0,Ys.compareKeys)(c,o)!==0);default:throw new Li.ClientError(`Unknown query comparator "${n}"`)}}function $s(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function oh(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let s;if(t.operator==="or"){s=0;for(let n of t.conditions)s+=n.estimated_count}else{s=1/0;for(let n of t.conditions)s=1/(1/s+1/n.estimated_count)}return t.estimated_count=s,t.estimated_count}let r=t.comparator||t.search_type;if(r===Je.SEARCH_TYPES.EQUALS){let s=t[0]??t.attribute;if(s==null||s===e.primaryKey)t.estimated_count=1;else if(Array.isArray(s)){let n=Sn(e.attributes,s[0]),i=n.definition?.tableClass||n.elements.definition?.tableClass,o=oh(i)({value:t.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[n.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let n=e.indices[s];t.estimated_count=n?n.getValuesCount(t[1]??t.value):1/0}}else r===Je.SEARCH_TYPES.CONTAINS||r===Je.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=OO:t.estimated_count=1/0:r===Je.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=OO:r===Je.SEARCH_TYPES.BETWEEN?t.estimated_count=yk:t.estimated_count=Nk;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function jl(e){if(e)if(Qn=e,Co.lastIndex=0,Lk.test(e))try{let t=lc(new Do,"");if(or!==Qn.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 '${Qn}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function lc(e,t){let r=Co,s,n,i,o,c;for(;s=r.exec(Qn);){or=r.lastIndex;let[,u,_]=s;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(n)u.length<=2&&(i=u);else{if(i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");n=Lo(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=Ik[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);n=Lo(u);break;case"=*":i="ends_with",n=Lo(u);break;case"*":o=!0;case"*&":e.conditions?e.conditions.push({comparator:i==="ends_with"?"contains":"starts_with",attribute:n,value:decodeURIComponent(u)}):e.push(u+_),n=null;break;case"|":e.operator="or";case"":case void 0:case"&":if(n==null){if(n===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.conditions.push({comparator:i,attribute:n,value:decodeURIComponent(u)})}n=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Lo(u)),n=void 0;break;case"(":Co.lastIndex=or;let d=lc(u?[]:new Do,")");switch(u){case"":e.conditions.push(d);break;case"limit":switch(d.length){case 1:e.limit=+d[0];break;case 2:e.offset=+d[0],e.limit=d[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(d[0])&&d.length===1&&!d[0].name?(e.select=d[0],e.select.asArray=!0):d.length===1?e.select=d[0]:d.length===2&&d[1]===""?e.select=d.slice(0,1):e.select=d;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=NO(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Qn[or]===","?r.lastIndex=++or:o=!0,n=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");Co.lastIndex=or,l=lc([],"}"),l.name=u,e.push(l),Qn[or]===","?r.lastIndex=++or:o=!0;break;case"[":Co.lastIndex=or,u?(l=lc(new Do,"]"),l.name=u):l=lc(e.conditions?new Do:[],"]"),e.conditions?(e.conditions.push(l),n=null):e.push(l),Qn[or]===","?r.lastIndex=++or:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(n)e.conditions.push({comparator:i||"equals",attribute:n,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Lo(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=n?Dk:Co,r.lastIndex=or),or===Qn.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Lo(e){return e.indexOf(".")>-1?e.split(".").map(Lo):decodeURIComponent(e)}function NO(e){let t=yO(e[0]);return e.length>1&&(t.next=NO(e.slice(1))),t}function yO(e){if(Array.isArray(e)){let t=yO(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 zn(e){return Array.isArray(e)?e.join("\0"):e}var Li,Je,Ys,ih,Nk,yk,OO,Ik,bO,Lk,Co,Dk,or,Qn,Do,Zl=ge(()=>{Li=M(Z()),Je=M(ft()),Ys=require("ordered-binary"),ih=require("lmdb"),Nk=1e8,yk=15e6,OO=1e7,Ik={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(_c,"searchByIndex");a(Sn,"findAttribute");a(wk,"joinTo");a(Ck,"joinFrom");bO={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(dc,"filterByType");a($s,"attributeComparator");a(oh,"estimateCondition");Lk=/[()[\]*|!<>.]|(=\w+=)/,Co=/([^?&|=<>!([{}\])*,]*)([([{}\])|,&]|[=<>!*]*)/g,Dk=/([^&|*=[\]{}]+)([[\]{}]|[&|*=]*)/g;a(jl,"parseQuery");a(lc,"parseBlock");a(Lo,"decodeProperty");a(NO,"toSortObject");a(yO,"toSortEntry");Do=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}};a(zn,"flattenKey")});var uh={};ze(uh,{CONTEXT:()=>pe,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>ns,RECORD_PROPERTY:()=>ye,Resource:()=>xt,SAVE_UPDATES_PROPERTY:()=>DO,snake_case:()=>Mk,transformForSelect:()=>t_});function Mk(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function IO(e,t){if(fc=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(fc=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),s=new ch;for(let n=0;n<r.length;n++){let i=r[n];if(!i&&n===r.length-1){fc=!0;break}s[n]=t.coerceId(decodeURIComponent(i))}return s}function rs(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_,l;if(r?o?(l=i,o=o[pe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[pe]||i):l=i:(l=n,c=l[Le]??l[this.primaryKey]??null):i?o=i[pe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[],_=!0;for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=n.id??null,c==null&&(_=!0))}else c=n??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.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 d.resetTransaction=!0,Ke(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(t.type==="read"&&(E[DO]=!1),o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new e_(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new e_(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function ss(e,t){let r=new LO.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function ah(e,t,r){let s=e[ye];if(s){let n=e[Wt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:n&&i in n?n[i]:(c=t?.[i])?c(e,r):s[i]}}else return t?n=>{let i=t[n];return i?i(e,r):e[n]}:n=>e[n]}function t_(e,t){let r=t?.propertyResolvers,s=t[pe],n;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):ah(c,r,s)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(ah(u,r,s));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(ah(u,r,s)),d;for(let f of e){let E=l(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){n||(n={});let u=n[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=n[c.name]=t_(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var wO,CO,LO,pe,Le,ns,DO,ye,Uk,xt,e_,fc,ch,ws=ge(()=>{wO=require("crypto");cc();CO=require("../../index"),LO=M(Z());Jl();Ci();Zl();pe=Symbol.for("context"),Le=Symbol.for("primary-key"),ns=Symbol("is-collection"),DO=Symbol("save-updates"),ye=Symbol("stored-record"),Uk={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},xt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let s=r?.[pe];this[pe]=s!==void 0?s:r||null}static get=rs(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=t_(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=rs(function(t,r,s,n){if(Array.isArray(n)&&t[ns]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):ss(t,"put")},{hasContent:!0,type:"update"});static delete=rs(function(t,r,s,n){return t.delete?t.delete(r):ss(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,wO.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ke(s,()=>{let i=new this(n,s),o=i.update?i.update(r):ss(i,"update");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=rs(function(t,r,s,n){return t.invalidate?t.invalidate(r):ss(t,"delete")},{hasContent:!1,type:"update"});static post=rs(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=rs(function(t,r,s,n){return t.connect?t.connect(n,r):ss(t,"connect")},{hasContent:!0,type:"read"});static subscribe=rs(function(t,r,s,n){return t.subscribe?t.subscribe(r):ss(t,"subscribe")},{type:"read"});static publish=rs(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.publish?t.publish(n,r):ss(t,"publish")},{hasContent:!0,type:"create"});static search=rs(function(t,r,s,n){let i=t.search?t.search(r):ss(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=t_(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=rs(function(t,r,s,n){return t.search?t.search(n,r):ss(t,"search")},{hasContent:!0,type:"read"});static copy=rs(function(t,r,s,n){return t.copy?t.copy(n,r):ss(t,"copy")},{type:"create"});static move=rs(function(t,r,s,n){return t.move?t.move(n,r):ss(t,"move")},{type:"delete"});post(t){if(this[ns])return this.constructor.create(this[Le],t,this[pe]);ss(this,"post")}static isCollection(t){return t?.[ns]}static coerceId(t){return t}static parseQuery(t){return jl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let o=t.slice(n+1);t=t.slice(0,n);let c=r?.headers&&Uk[o];if(c)r.headers.set("accept",c);else if(s)s.property=o;else return{query:{property:o},id:IO(t,this),isCollection:fc}}let i=IO(t,this);return fc?{id:i,isCollection:!0}:i}static getResource(t,r,s){let n,i=r[pe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=s?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Le]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[ns]=!0),n}subscribe(t){return new Is}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Is}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[Le]}getContext(){return this[pe]}};xt.prototype[pe]=null;(0,CO._assignPackageExport)("Resource",xt);a(Mk,"snake_case");e_=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(IO,"pathToId");ch=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(rs,"transactional");a(ss,"missingMethod");a(ah,"selectFromObject");a(t_,"transformForSelect")});var _h={};ze(_h,{loadGQLSchema:()=>Bk,start:()=>lh,startOnMainThread:()=>vk});function lh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let K=function(H){if(H.kind==="NonNullType"){let V=K(H.type);return V.nullable=!1,V}if(H.kind==="ListType")return{type:"array",elements:K(H.type)};let $={type:H.name?.value};return Object.defineProperty($,"location",{value:H.loc.startToken}),$};a(K,"getProperty");let A=S.name.value,O=[],y={table:null,database:null,properties:O};f.set(A,y);for(let H of S.directives){if(H.name.value==="table"){for(let D of H.arguments)y[D.name.value]=D.value.value;y.schema&&(y.database=y.schema),y.table||(y.table=A),y.audit&&(y.audit=y.audit!=="false"),y.attributes=y.properties,E.push(y)}if(H.name.value==="sealed"&&(y.sealed=!0),H.name.value==="export"){y.export=!0;for(let D of H.arguments)D.name.value==="name"&&(y.export={name:D.value.value})}}let F=!1;for(let H of S.fields){let D=K(H.type);D.name=H.name.value,O.push(D);for(let $ of H.directives)if($.name.value==="primaryKey")F?console.warn("Can not define two attributes as a primary key"):(D.isPrimaryKey=!0,F=!0);else if($.name.value==="indexed")D.indexed=!0;else if($.name.value==="relationship"){let V={};for(let W of $.arguments)V[W.name.value]=W.value.value;D.relationship=V}else if($.name.value==="createdTime")D.assignCreatedTime=!0;else if($.name.value==="updatedTime")D.assignUpdatedTime=!0;else if($.name.value==="expiresAt")D.expiresAt=!0;else if($.name.value==="allow"){let V=D.authorizedRoles=[];for(let W of $.arguments)W.name.value==="role"&&V.push(W.value.value)}}y.type=A,A==="Query"&&(h=y)}function p(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?p(S.elements):Pk.includes(S.type)||(0,UO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,r_.dirname)(s),S.tableClass):i.set((0,r_.dirname)(s)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,r_.dirname)(s)+"/"+S.name,A.tableClass)}}}var r_,UO,Pk,vk,Bk,MO=ge(()=>{r_=require("path");Se();UO=M(at()),Pk=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(lh,"start");vk=lh,Bk=lh({ensureTable:ct}).handleFile});async function s_(e){return Hk?(Ec||(Ec=xk(Gk)),(await(await Ec).import(e)).namespace):import(e)}async function xk(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ec=new Compartment({console,Math,Date,fetch:Fk,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,vO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:xt,tables:Ur,databases:Ze})}};let s=await(0,PO.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ec}function Fk(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 Gk(){return{Resource:xt,tables:Ur}}var PO,vO,Hk,Ec,dh=ge(()=>{ws();Se();PO=require("fs/promises"),vO=require("path"),Hk=!1;a(s_,"secureImport");a(xk,"getCompartment");a(Fk,"secureOnlyFetch");a(Gk,"getGlobalVars")});var Eh={};ze(Eh,{handleFile:()=>qk});async function qk(e,t,r,s){let n=new Map,i=(0,BO.pathToFileURL)(r).toString(),o=await s_(i);u(o.default)&&s.set((0,fh.dirname)(t),o.default),c(o,(0,fh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var BO,fh,HO=ge(()=>{BO=require("url");dh();fh=require("path");a(qk,"handleFile")});var mh={};ze(mh,{start:()=>kk});function kk({resources:e}){e.set("login",hh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var hh,xO=ge(()=>{ws();a(kk,"start");hh=class extends xt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var YO={};ze(YO,{parse:()=>Sh,streamAsJSON:()=>hc,stringify:()=>Di});function hc(e){return new ph({value:e})}function FO(e){return console.error(e),JSON.stringify(e.toString())}function GO(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Di(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===VO)return $O(e);if(t.resolution)return t.resolution.then(()=>Di(e));throw t}}function $O(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 s=0;s<e.length;s++)s>0&&(r+=","),r+=$O(e[s]);return r+"]"}else{r="{";let s=!0;for(let n in e)s?s=!1:r+=",",r+=JSON.stringify(n)+":"+Di(e[n]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Sh(e){return Yk.test(e)?Vk.parse(e):JSON.parse(e)}var qO,kO,Vk,$k,VO,ph,Yk,Th=ge(()=>{qO=require("stream"),kO=M(require("json-bigint-fixes")),Vk=(0,kO.default)({useNativeBigInt:!0}),$k=1e4,VO={};BigInt.prototype.toJSON=function(){throw VO};a(hc,"streamAsJSON");ph=class extends qO.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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),FO)}catch(n){yield FO(n)}else yield Di(t)}else yield Di(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);GO(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>$k?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 GO(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};a(FO,"handleError");a(GO,"when");a(Di,"stringify");a($O,"jsStringify");Yk=/-?\d{16,}/;a(Sh,"parse")});var nb=T((Nie,sb)=>{"use strict";var gh=require("recursive-iterator"),Kk=require("alasql"),Rh=require("clone"),KO=z(),{handleHDBError:WO,hdb_errors:Wk}=Z(),{HDB_ERROR_MSGS:QO,HTTP_STATUS_CODES:zO}=Wk,{getDatabases:Qk}=(Se(),te(Ge)),zk=["DISTINCT_ARRAY"],JO=Symbol("validateTables"),Ah=Symbol("validateTable"),bie=Symbol("getAllColumns"),XO=Symbol("validateAllColumns"),n_=Symbol("findColumn"),jO=Symbol("validateOrderBy"),mc=Symbol("validateSegment"),Oh=Symbol("validateColumn"),ZO=Symbol("setColumnsForTable"),eb=Symbol("checkColumnsForAsterisk"),tb=Symbol("validateGroupBy"),rb=Symbol("hasColumns"),bh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[JO](),this[eb](),this[XO]()}[JO](){if(this[rb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ah](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ah](t.table)})}}[rb](){let t=!1,r=new gh(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ah](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Qk();if(!r[t.databaseid])throw WO(new Error,QO.SCHEMA_NOT_FOUND(t.databaseid),zO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw WO(new Error,QO.TABLE_NOT_FOUND(t.databaseid,t.tableid),zO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Rh(n);i.table=Rh(t),this.attributes.push(i)})}[n_](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)}[eb](){let t=new gh(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ZO](r.tableid)}[ZO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Kk.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[XO](){this[mc](this.statement.columns,!1),this[mc](this.statement.joins,!1),this[mc](this.statement.where,!1),this[tb](this.statement.group,!1),this[mc](this.statement.order,!0)}[mc](t,r){if(!t)return;let s=new gh(t),n=[];for(let{node:i,path:o}of s)!KO.isEmpty(i)&&!KO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jO](i):n.push(this[Oh](i)));return n}[tb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&zk.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Rh(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[n_](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[n_](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[jO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Oh](t)}[Oh](t){let r=this[n_](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};sb.exports=bh});var ob=T((Iie,ib)=>{"use strict";var Nh=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")}};ib.exports=Nh});var cb=T((Cie,ab)=>{"use strict";var yh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ab.exports=yh});var gb={};ze(gb,{AUDIT_STORE_OPTIONS:()=>Sb,createAuditEntry:()=>a_,openAuditStore:()=>o_,readAuditEntry:()=>Mr,setAuditRetention:()=>Jk,transactionKeyEncoder:()=>pb});function o_(e){let t=e.auditStore=e.openDB(fb.AUDIT_STORE_NAME,Sb);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,hb.getWorkerIndex)()===0&&e.on("aftercommit",()=>{pc||(pc=setTimeout(()=>{if(pc=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-Ih})){if((n[0]&15)===Ch){let i=Mr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},Ih/10).unref())}),t}function Jk(e){clearTimeout(pc),pc=null,Ih=e}function a_(e,t,r,s,n,i,o){let c=Tb[i],u=1;s&&(s>1?Uo.setFloat64(0,s):is.set(Uh),u=9),f(0),f(t),d(r),Uo.setFloat64(u,e),u+=8,n?d(n):is[u++]=0,is[s?8:0]=c;let l=is.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Mo.writeKey)(E,is,u);let p=u-h-1;p>127?p>16383?(Dh.error("Key or username was too large for audit entry",E),u=h+1,is[h]=0):(is.copyWithin(h+2,h+1,u),Uo.setUint16(h,p|32768),u++):is[h]=p}function f(E){E<128?is[u++]=E:E<16384?(Uo.setUint16(u,E|32768),u+=2):E<1056964608?(Uo.setUint32(u,E|3221225472),u+=4):(is[u]=255,Uo.setUint32(u+1,E),u+=5)}}function Mr(e){try{let t=e.dataView||(e.dataView=new Lh(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:Tb[s&7],tableId:i,get recordId(){return db(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?db(e,l,d):void 0},getValue(f){return s&wh?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return Dh.error("Reading audit entry error",e),{}}}function db(e,t,r){let s=e.subarray(t,r);return(0,Mo.readKey)(s,0,r-t)}var Mo,i_,fb,Eb,hb,mb,Dh,is,Uo,pb,Sb,Ih,pc,wh,ub,Ch,lb,_b,Tb,Lh,Po=ge(()=>{Mo=require("ordered-binary"),i_=M(j()),fb=M(ft()),Eb=M(w()),hb=M(at()),mb=M(z());Tc();Dh=M(q());(0,i_.initSync)();is=Buffer.alloc(1024),Uo=new DataView(is.buffer,is.byteOffset,1024),pb={writeKey(e,t,r){return e===Sc?(t.set(Sc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Mo.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,Mo.readKey)(e,t,r)}},Sb={encoding:"binary",keyEncoder:pb},Ih=(0,mb.convertToMS)((0,i_.get)(Eb.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,pc=null;a(o_,"openAuditStore");a(Jk,"setAuditRetention");wh=16,ub=1,Ch=2,lb=3,_b=4,Tb={put:ub|wh,[ub]:"put",delete:Ch,[Ch]:"delete",message:lb|wh,[lb]:"message",invalidate:_b,[_b]:"invalidate"};a(a_,"createAuditEntry");a(Mr,"readAuditEntry");Lh=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(db,"readKeySafely")});var yb={};ze(yb,{HAS_EXPIRATION:()=>xh,LAST_TIMESTAMP_PLACEHOLDER:()=>Sc,LOCAL_TIMESTAMP:()=>Xk,METADATA:()=>gc,NO_TIMESTAMP:()=>Mh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Uh,RecordEncoder:()=>Hh,TIMESTAMP_ASSIGN_LAST:()=>Zk,TIMESTAMP_ASSIGN_NEW:()=>Ob,TIMESTAMP_ASSIGN_PREVIOUS:()=>bb,TIMESTAMP_PLACEHOLDER:()=>c_,TIMESTAMP_RECORD_PREVIOUS:()=>Ph,getUpdateRecord:()=>Fh,handleLocalTimeForGets:()=>__});function Nb(){return Bo[0]=Bo[0]^64,jk.getFloat64(0)}function __(e){let t=e.getEntry;e.readCount=0,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[gc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[gc]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[gc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=eV.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(Bo,0,d),l.timestampBytes=null,l.localTime=Nb())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ui.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ui.length;u++){let _=Ui[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ui.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Fh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?vo=i?.localTime?Ph|bb:Mh:vo=u?i?.localTime?Ph|16384:Ob|16384:Mh,l>0&&(c|=xh),l_=c,Bh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:vo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=vh,A.timestampOffset=vh.start||0))}if(u){let A=_?.user?.username;if(E&&(u_=e.encoder.encode(E)),f&&i?.localTime){let O=i?.localTime,y=r.get(O);if(y){let F=Mr(y).previousLocalTime;return r.put(O,a_(o,t,s,F,A,d,u_),{ifVersion:p}),S}}r.put(Sc,a_(o,t,s,i?.localTime?1:0,A,d,u_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var Rb,Ab,c_,Sc,Uh,Xk,gc,Bo,jk,Mh,Ob,Zk,bb,Ph,xh,vh,u_,vo,l_,Bh,Hh,eV,Ui,Tc=ge(()=>{Rb=require("msgpackr");Po();Ab=M(q()),c_=new Uint8Array([1,1,1,1,4,64,0,0]),Sc=new Uint8Array([1,1,1,1,1,0,0,0]),Uh=new Uint8Array([1,1,1,1,3,64,0,0]),Xk=Symbol("local-timestamp"),gc=Symbol("metadata"),Bo=new Uint8Array(8),jk=new DataView(Bo.buffer,0,8),Mh=0,Ob=0,Zk=1,bb=3,Ph=4,xh=16,vo=0,l_=-1,Bh=0,Hh=class extends Rb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,n){if(vo||l_>=0){let i=0,o=vo;o&&(i+=8,vo=0);let c=l_,u=Bh;c>=0&&(i+=2,l_=-1,u&&(i+=8,Bh=0));let _=vh=r.call(this,s,n|2048|i);u_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(c_[4]=o,c_[5]=o>>8,_.set(c_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Bo,0,c),c+=8;else for(let d=0;d<8;d++)Bo[d]=t[c++];u=Nb(),i=t[c]}let _;i<32&&(o=i,c+=2,o&xh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[gc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Nb,"getTimestamp");eV=Map.prototype.get;a(__,"handleLocalTimeForGets");Ui=[];setInterval(()=>{for(let e=0;e<Ui.length;e++){let t=Ui[e].deref();!t||t.isDone||t.isCommitted?Ui.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Ab.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(Fh,"getUpdateRecord")});var d_=T((vie,Ib)=>{"use strict";var qh=j(),kh=w(),{RecordEncoder:tV}=(Tc(),te(yb));qh.initSync();var rV=qh.get(kh.CONFIG_PARAMS.STORAGE_COMPRESSION),sV=qh.get(kh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,nV=kh.UPDATES_PROPERTY,Gh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=rV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=sV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:tV},this.alwaysLazyProperty=s=>s===nV)}};Ib.exports=Gh});var E_=T((Hie,Cb)=>{"use strict";var Ho=j(),Rc=w();Ho.initSync();var iV=Ho.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ho.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ho.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",wb=Ho.get(Rc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),oV=Ho.get(Rc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),f_=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=iV,this.noFSAccess=!0,wb!==void 0&&(this.overlappingSync=wb),this.noReadAhead=oV}};Cb.exports=f_;f_.MAX_DBS=1e4});var Ve=T((Fie,Fb)=>{"use strict";var $h=require("lmdb"),Cs=require("fs-extra"),Pr=require("path"),h_=Lr(),Ub=q(),ar=yr().LMDB_ERRORS_ENUM,m_=cb(),Yh=d_(),Mb=E_(),Jn=ft(),Lb=w(),{table:aV,resetDatabases:cV}=(Se(),te(Ge)),Db=j(),Ls=Jn.INTERNAL_DBIS_NAME,Pb=Jn.DBI_DEFINITION_NAME,uV="data.mdb",lV="lock.mdb",Ac=".mdb",_V="-lock",Vh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=os(t,r),this.key_type=this.dbi[Jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new $h.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function p_(e,t){if(e===void 0)throw new Error(ar.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ar.ENV_NAME_REQUIRED)}a(p_,"pathEnvNameValidation");async function Kh(e,t,r=!0){try{await Cs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ar.INVALID_BASE_PATH):s}try{let s=Pr.join(e,t+Ac);return await Cs.access(s,Cs.constants.R_OK|Cs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Cs.access(Pr.join(e,t,uV),Cs.constants.R_OK|Cs.constants.F_OK),Pr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ar.INVALID_ENVIRONMENT)}else throw new Error(ar.INVALID_ENVIRONMENT);throw s}}a(Kh,"validateEnvironmentPath");function S_(e,t){if(h_.validateEnv(e),t===void 0)throw new Error(ar.DBI_NAME_REQUIRED)}a(S_,"validateEnvDBIName");async function dV(e,t,r=!1,s=!1){p_(e,t);let n=Pr.basename(e);t=t.toString();let i=Db.get(Lb.CONFIG_PARAMS.DATABASES);i||Db.setProperty(Lb.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Kh(e,t,s),vb(e,t,r)}catch(o){if(o.message===ar.INVALID_ENVIRONMENT){let c=Pr.join(e,t);await Cs.mkdirp(s?c:e);let u=new Mb(s?c:c+Ac,!1),_=$h.open(u);_.dbis=Object.create(null);let l=new Yh(!1);_.openDB(Ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Wh(e,t,r);return _[Jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(dV,"createEnvironment");async function fV(e,t,r,s=!0){p_(e,t),t=t.toString();let n=Pr.join(e,t);return aV({table:t,database:Pr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(fV,"copyEnvironment");async function vb(e,t,r=!1){p_(e,t),t=t.toString();let s=Wh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Kh(e,t),i=Pr.join(e,t+Ac),o=n!=i,c=new Mb(n,o),u=$h.open(c);u.dbis=Object.create(null);let _=Hb(u);for(let l=0;l<_.length;l++)os(u,_[l]);return u[Jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(vb,"openEnvironment");async function EV(e,t,r=!1){p_(e,t),t=t.toString();let s=Pr.join(e,t+Ac),n=await Kh(e,t);if(global.lmdb_map!==void 0){let i=Wh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Bb(o),delete global.lmdb_map[i]}}await Cs.remove(n),await Cs.remove(n===s?n+_V:Pr.join(Pr.dirname(n),lV))}a(EV,"deleteEnvironment");async function Bb(e){h_.validateEnv(e);let t=e[Jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Bb,"closeEnvironment");function Wh(e,t,r=!1){let n=`${Pr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Wh,"getCachedEnvironmentName");function hV(e){h_.validateEnv(e);let t=Object.create(null),r=os(e,Ls);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ls)try{t[s]=Object.assign(new m_,n)}catch{Ub.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(hV,"listDBIDefinitions");function Hb(e){h_.validateEnv(e);let t=[],r=os(e,Ls);for(let{key:s}of r.getRange({start:!1}))s!==Ls&&t.push(s);return t}a(Hb,"listDBIs");function mV(e,t){let s=os(e,Ls).getEntry(t),n=new m_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Ub.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(mV,"getDBIDefinition");function xb(e,t,r,s=!r){if(S_(e,t),t=t.toString(),t===Ls)throw new Error(ar.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return os(e,t)}catch(n){if(n.message===ar.DBI_DOES_NOT_EXIST){let i=new Yh(r,s===!0),o=e.openDB(t,i),c=new m_(r===!0,s);return o[Pb]=c,os(e,Ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(xb,"createDBI");function os(e,t){if(S_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ls?r=mV(e,t):r=new m_,r===void 0)throw new Error(ar.DBI_DOES_NOT_EXIST);let s;try{let n=new Yh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ar.DBI_DOES_NOT_EXIST):n}return s[Pb]=r,e.dbis[t]=s,s}a(os,"openDBI");function pV(e,t){S_(e,t),t=t.toString();let r=os(e,t),s=r.getStats();return r[Jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(pV,"statDBI");async function SV(e,t){try{let r=Pr.join(e,t+Ac);return(await Cs.stat(r)).size}catch{throw new Error(ar.INVALID_ENVIRONMENT)}}a(SV,"environmentDataSize");function TV(e,t){if(S_(e,t),t=t.toString(),t===Ls)throw new Error(ar.CANNOT_DROP_INTERNAL_DBIS_NAME);os(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],os(e,Ls).removeSync(t)}a(TV,"dropDBI");function gV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{os(e,i)}catch(o){if(o.message===ar.DBI_DOES_NOT_EXIST)xb(e,i,i!==t,i===t),s=!0;else throw o}}s&&cV()}a(gV,"initializeDBIs");Fb.exports={openDBI:os,openEnvironment:vb,createEnvironment:dV,listDBIs:Hb,listDBIDefinitions:hV,createDBI:xb,dropDBI:TV,statDBI:pV,deleteEnvironment:EV,initializeDBIs:gV,TransactionCursor:Vh,environmentDataSize:SV,copyEnvironment:fV,closeEnvironment:Bb}});var qb=T((qie,Gb)=>{"use strict";var Qh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Gb.exports=Qh});var Vb=T((Vie,kb)=>{"use strict";var zh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};kb.exports=zh});var Yb=T((Yie,$b)=>{"use strict";var Jh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};$b.exports=Jh});var xo=T((Jie,Qb)=>{"use strict";var RV=Ve(),AV=qb(),OV=Vb(),bV=Yb(),Ks=Lr(),Oc=yr().LMDB_ERRORS_ENUM,NV=ft(),Tn=w(),yV=z(),IV=require("uuid"),Wie=require("lmdb"),{handleHDBError:wV,hdb_errors:CV}=Z(),{OVERFLOW_MARKER:Qie,MAX_SEARCH_KEY_LENGTH:zie}=NV,Kb=j();Kb.initSync();var T_=Kb.get(Tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Xh=Tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Mi=Tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function LV(e,t,r,s,n=Ks.getNextMonotonicTime()){tm(e,t,r,s),jh(e,t,r);let i=new AV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];Wb(_,!0,n);let l=DV(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Zh(o,c,s,i,n)}a(LV,"insertRecords");function DV(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Tn.FUNC_VAL],s[o]=c)}let u=Ks.getIndexedValues(c),_=e.dbis[o];if(u){T_&&_.prefetch(u.map(l=>({key:l,value:n})),g_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}T_&&e.dbis[t].prefetch([n],g_),e.dbis[t].put(n,s,s[Mi])})}a(DV,"insertRecord");function UV(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(UV,"removeSkippedRecords");function Wb(e,t,r){let s=r>0;(s||!Number.isInteger(e[Mi]))&&(e[Mi]=r||(r=Ks.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Xh]))&&(e[Xh]=r||Ks.getNextMonotonicTime()):delete e[Xh]}a(Wb,"setTimestamps");function jh(e,t,r){r.indexOf(Tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),RV.initializeDBIs(e,t,r)}a(jh,"initializeTransaction");async function MV(e,t,r,s,n=Ks.getNextMonotonicTime()){tm(e,t,r,s),jh(e,t,r);let i=new OV,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=em(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Zh(c,u,s,i,n,o)}a(MV,"updateRecords");async function PV(e,t,r,s,n=Ks.getNextMonotonicTime()){try{tm(e,t,r,s)}catch(u){throw wV(u,u.message,CV.HTTP_STATUS_CODES.BAD_REQUEST)}jh(e,t,r);let i=new bV,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;yV.isEmpty(_[t])?(l=IV.v4(),_[t]=l):l=_[t];let d=em(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Zh(o,c,s,i,n)}a(PV,"upsertRecords");async function Zh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ks.getNextMonotonicTime(),UV(r,i),s}a(Zh,"finalizeWrite");function em(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Wb(r,!l,o),Number.isInteger(r[Mi])&&_[Mi]>r[Mi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let y=p([[_]]);Array.isArray(y)&&(p=y[0][Tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let O=Ks.getIndexedValues(A);if(O){T_&&S.prefetch(O.map(y=>({key:y,value:s})),g_);for(let y=0,F=O.length;y<F;y++)S.remove(O[y],s)}if(O=Ks.getIndexedValues(p),O){T_&&S.prefetch(O.map(y=>({key:y,value:s})),g_);for(let y=0,F=O.length;y<F;y++)S.put(O[y],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Mi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:em(e,t,r,s,n,i,o))}a(em,"updateUpsertRecord");function vV(e,t,r){if(Ks.validateEnv(e),t===void 0)throw new Error(Oc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Oc.WRITE_ATTRIBUTES_REQUIRED):new Error(Oc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(vV,"validateBasic");function tm(e,t,r,s){if(vV(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Oc.RECORDS_REQUIRED):new Error(Oc.RECORDS_MUST_BE_ARRAY)}a(tm,"validateWrite");function g_(){}a(g_,"noop");Qb.exports={insertRecords:LV,updateRecords:MV,upsertRecords:PV}});var Pi=T((jie,BV)=>{BV.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Qs=T((Zie,Xb)=>{"use strict";var Jb=z(),zb=w(),Fo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ws=require("joi"),Xn={schema_format:{pattern:Fo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},HV=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number(),Ws.array()).required(),xV=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()),FV=Ws.alternatives(Ws.string().min(1).max(Xn.schema_length.maximum).pattern(Fo).messages({"string.pattern.base":"{:#label} "+Xn.schema_format.message}),Ws.number()).required();function GV(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xn.schema_length.maximum?`'${e}' maximum of 250 characters`:Fo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(GV,"checkValidTable");function qV(e,t){return Jb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(qV,"validateSchemaExists");function kV(e,t){let r=t.state.ancestors[0].schema;return Jb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(kV,"validateTableExists");function VV(e,t){return e.toLowerCase()===zb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${zb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(VV,"validateSchemaName");Xb.exports={common_validators:Xn,schema_regex:Fo,hdb_schema_table:HV,validateSchemaExists:qV,validateTableExists:kV,validateSchemaName:VV,checkValidTable:GV,hdb_database:xV,hdb_table:FV}});var R_=T((toe,jb)=>{var{common_validators:zs}=Qs(),Nc=je(),bc="is required",Et={database:{presence:!1,format:zs.schema_format,length:zs.schema_length},schema:{presence:!1,format:zs.schema_format,length:zs.schema_length},table:{presence:!0,format:zs.schema_format,length:zs.schema_length},attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length},hash_attribute:{presence:!0,format:zs.schema_format,length:zs.schema_length}};function yc(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(yc,"makeAttributesStrings");function $V(e){return e=yc(e),Et.table.presence=!1,Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Nc.validateObject(e,Et)}a($V,"schema_object");function YV(e){return e=yc(e),Et.table.presence={message:bc},Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Nc.validateObject(e,Et)}a(YV,"table_object");function KV(e){return e=yc(e),Et.table.presence={message:bc},Et.attribute.presence=!1,Nc.validateObject(e,Et)}a(KV,"create_table_object");function WV(e){return e=yc(e),Et.table.presence={message:bc},Et.attribute.presence={message:bc},Et.hash_attribute.presence=!1,Nc.validateObject(e,Et)}a(WV,"attribute_object");function QV(e){return e=yc(e),Et.table.presence={message:bc},Et.attribute.presence=!1,Et.hash_attribute.presence=!1,Nc.validateObject(e,Et)}a(QV,"describe_table");function zV(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(zV,"validateTableResidence");jb.exports={schema_object:$V,create_table_object:KV,table_object:YV,attribute_object:WV,describe_table:QV,validateTableResidence:zV}});var eN=T((soe,Zb)=>{"use strict";var JV=require("uuid"),rm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||JV.v4(),this.schema_table=`${this.schema}.${this.table}`}};Zb.exports=rm});var A_=T((ioe,tN)=>{"use strict";var XV=eN(),sm=class extends XV{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};tN.exports=sm});var sN=T((aoe,rN)=>{"use strict";rN.exports=ZV;var jV="inserted";function ZV(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===jV?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(ZV,"returnObject")});var O_=T((uoe,cN)=>{"use strict";var e$=w(),nm=Ve(),t$=xo(),{getSystemSchemaPath:r$,getSchemaPath:s$}=Ye(),n$=Pi(),i$=R_(),o$=A_(),a$=sN(),{handleHDBError:nN,hdb_errors:oN}=Z(),iN=z(),{HTTP_STATUS_CODES:c$}=oN,im=n$.hdb_attribute,aN=[];for(let e=0;e<im.attributes.length;e++)aN.push(im.attributes[e].attribute);var u$="inserted";cN.exports=l$;async function l$(e){let t=i$.attribute_object(e);if(t)throw nN(new Error,t.message,oN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&iN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw nN(new Error,r,c$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=iN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new o$(e.schema,e.table,e.attribute,e.id);try{let i=await nm.openEnvironment(s$(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}`);nm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await nm.openEnvironment(r$(),e$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await t$.insertRecords(o,im.hash_attribute,aN,[n]);return a$(u$,c,{records:[n]},u)}catch(i){throw i}}a(l$,"lmdbCreateAttribute")});var am=T((_oe,lN)=>{var{hdb_table:_$,hdb_database:uN}=Qs(),d$=je(),om=require("joi"),f$={undefined:"undefined",null:"null"},E$=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||f$[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),h$=om.object({database:uN,schema:uN,table:_$,records:om.array().items(om.object().custom(E$)).required()});lN.exports=function(e){return d$.validateBySchema(e,h$)}});var Ic=T((Eoe,dN)=>{"use strict";var gn=z(),_N=q(),foe=am(),{getDatabases:m$}=(Se(),te(Ge)),{ClientError:vi}=Z();dN.exports=p$;function p$(e){if(gn.isEmpty(e))throw new vi("invalid update parameters defined.");if(gn.isEmptyOrZeroLength(e.schema))throw new vi("invalid schema specified.");if(gn.isEmptyOrZeroLength(e.table))throw new vi("invalid table specified.");if(!Array.isArray(e.records))throw new vi("records must be an array");let t=m$()[e.schema]?.[e.table];if(gn.isEmpty(t))throw new vi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&gn.isEmptyOrZeroLength(o[r]))throw _N.error("a valid hash attribute must be provided with update record:",o),new vi("a valid hash attribute must be provided with update record, check log for more info");if(!gn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw _N.error(`a valid hash value must be provided with ${e.operation} record:`,o),new vi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!gn.isEmpty(o[r])&&o[r]!==""&&s.has(gn.autoCast(o[r]))&&(o.skip=!0),s.add(gn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(p$,"insertUpdateValidate")});var wc=T((moe,fN)=>{"use strict";var S$=w().OPERATIONS_ENUM,cm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=S$.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};fN.exports=cm});var Uc=T((Toe,EN)=>{"use strict";var Soe=wc(),b_=w(),lm=z(),um=q(),T$=require("uuid"),{handleHDBError:Cc,hdb_errors:g$}=Z(),{HDB_ERROR_MSGS:Lc,HTTP_STATUS_CODES:Dc}=g$;EN.exports=R$;function R$(e,t,r){for(let n=0;n<t.length;n++)A$(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];O$(i,r,e.operation)}}a(R$,"processRows");function A$(e){if(Buffer.byteLength(String(e))>b_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Cc(new Error,Lc.ATTR_NAME_LENGTH_ERR(e),Dc.BAD_REQUEST,void 0,void 0,!0);if(lm.isEmptyOrZeroLength(e)||lm.isEmpty(e.trim()))throw Cc(new Error,Lc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(A$,"validateAttribute");function O$(e,t,r){if(!e.hasOwnProperty(t)||lm.isEmptyOrZeroLength(e[t])){if(r===b_.OPERATIONS_ENUM.INSERT||r===b_.OPERATIONS_ENUM.UPSERT){e[t]=T$.v4();return}throw um.error("Update transaction aborted due to record with no hash value:",e),Cc(new Error,Lc.RECORD_MISSING_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>b_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw um.error(e),Cc(new Error,Lc.HASH_VAL_LENGTH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw um.error(e),Cc(new Error,Lc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(O$,"validateHash")});var mN=T((Roe,hN)=>{"use strict";var _m=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};hN.exports=_m});var TN=T((Ooe,SN)=>{"use strict";var dm=Ve(),b$=q(),pN=yr().LMDB_ERRORS_ENUM;SN.exports=N$;async function N$(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 dm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==pN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await dm.closeEnvironment(global.lmdb_map[s]),await dm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==pN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){b$.error(t)}}a(N$,"cleanLMDBMap")});var Rn=T((Noe,ON)=>{"use strict";var Mc=require("crypto"),y$=j(),{CONFIG_PARAMS:I$}=w(),RN="aes-256-cbc",w$=32,C$=16,fm=64,AN=32,L$=fm+AN,gN=new Map;ON.exports={encrypt:D$,decrypt:U$,createNatsTableStreamName:M$};function D$(e){let t=Mc.randomBytes(w$),r=Mc.randomBytes(C$),s=Mc.createCipheriv(RN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(D$,"encrypt");function U$(e){let t=e.substr(0,fm),r=e.substr(fm,AN),s=e.substr(L$,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Mc.createDecipheriv(RN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(U$,"decrypt");function M$(e,t){let r=y$.get(I$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=gN.get(r);return s||(s=Mc.createHash("md5").update(r).digest("hex"),gN.set(r,s)),s}a(M$,"createNatsTableStreamName")});var Bi=T((woe,NN)=>{"use strict";var Ioe=as(),N_=q(),bN=R_(),P$=Rn(),y_=z(),{handleHDBError:I_,hdb_errors:v$}=Z(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Em}=v$,B$=j();B$.initSync();var{getDatabases:hm}=(Se(),te(Ge));NN.exports={describeAll:H$,describeTable:C_,describeSchema:x$};async function H$(e){try{let t=y_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=hm(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await C_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await C_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){N_.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return N_.error("Got an error in describeAll"),N_.error(t),I_(new Error,w_.DESCRIBE_ALL_ERR)}}a(H$,"describeAll");async function C_(e,t){y_.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=bN.describe_table(e);if(i)throw i;let c=hm()[r];if(!c)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Em.NOT_FOUND);let u=c[s];if(!u)throw I_(new Error,w_.TABLE_NOT_FOUND(e.schema,e.table),Em.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=P$.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){N_.warn(`unable to stat table dbi due to ${f}`)}return d}a(C_,"descTable");async function x$(e){y_.transformReq(e);let t=bN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=hm()[s];if(!i)throw I_(new Error,w_.SCHEMA_NOT_FOUND(e.schema),Em.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),y_.isEmpty(u)||u.describe){let _=await C_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(x$,"describeSchema")});var An=T((Uoe,LN)=>{var F$=Pi(),{callbackify:IN,promisify:G$}=require("util"),{getDatabases:wN}=(Se(),te(Ge));LN.exports={setSchemaDataToGlobal:yN,getTableSchema:q$,getSystemSchema:k$,setSchemaDataToGlobalAsync:G$(yN)};var CN=Bi(),Loe=IN(CN.describeAll),Doe=IN(CN.describeTable);function yN(e){global.hdb_schema=wN(),e&&e()}a(yN,"setSchemaDataToGlobal");function q$(e,t,r){let s=wN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(q$,"getTableSchema");function k$(){return F$}a(k$,"getSystemSchema")});var cs=T((Poe,PN)=>{"use strict";var D_=am(),Ft=z(),V$=require("util"),U_=Ds(),$$=An(),DN=q(),{handleHDBError:Hi,hdb_errors:Y$}=Z(),{HTTP_STATUS_CODES:xi}=Y$,K$=V$.promisify($$.getTableSchema),W$="updated",UN="inserted",MN="upserted";PN.exports={insert:z$,update:J$,upsert:X$,validation:Q$,flush:j$};async function Q$(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await K$(e.schema,e.table),r=D_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ft.isEmptyOrZeroLength(c[s]))throw DN.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(!Ft.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw DN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ft.isEmpty(c[s])&&c[s]!==""&&n.has(Ft.autoCast(c[s]))&&(c.skip=!0),n.add(Ft.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Q$,"validation");async function z$(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=D_(e);if(t)throw Hi(new Error,t.message,xi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,xi.BAD_REQUEST);let s=await U_.createRecords(e);return L_(UN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(z$,"insertData");async function J$(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=D_(e);if(t)throw Hi(new Error,t.message,xi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,xi.BAD_REQUEST);let s=await U_.updateRecords(e);return Ft.isEmpty(s.existing_rows)?L_(W$,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):L_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(J$,"updateData");async function X$(e){if(e.operation!=="upsert")throw Hi(new Error,"invalid operation, must be upsert",xi.INTERNAL_SERVER_ERROR);let t=D_(e);if(t)throw Hi(new Error,t.message,xi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,xi.BAD_REQUEST);let s=await U_.upsertRecords(e);return L_(MN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(X$,"upsertData");function L_(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===UN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===MN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(L_,"returnObject");function j$(e){return Ft.transformReq(e),U_.flush(e.schema,e.table)}a(j$,"flush")});var pm=T((Boe,HN)=>{var Z$=je(),mm=require("joi"),{hdb_table:e1,hdb_database:vN}=Qs(),BN={schema:vN,database:vN,table:e1},t1={date:mm.date().iso().required()},r1={timestamp:mm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};HN.exports=function(e,t){let r=t==="timestamp"?{...BN,...r1}:{...BN,...t1},s=mm.object(r);return Z$.validateBySchema(e,s)}});var GN=T((Hoe,FN)=>{var s1=je(),Sm=require("joi"),{hdb_table:n1,hdb_database:xN}=Qs(),i1=Sm.object({schema:xN,database:xN,table:n1,hash_values:Sm.array().required(),ids:Sm.array()});FN.exports=function(e){return s1.validateBySchema(e,i1)}});var kN=T((xoe,qN)=>{"use strict";var Tm=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},gm=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Rm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};qN.exports={InsertObject:Tm,NoSQLSeachObject:gm,DeleteResponseObject:Rm}});var qi=T((Goe,WN)=>{"use strict";var $N=pm(),o1=GN(),Fi=z(),VN=require("moment"),YN=q(),{promisify:a1,callbackify:c1}=require("util"),Gi=w(),u1=An(),Am=a1(u1.getTableSchema),Om=Ds(),{DeleteResponseObject:l1}=kN(),{handleHDBError:jn,hdb_errors:_1}=Z(),{HDB_ERROR_MSGS:M_,HTTP_STATUS_CODES:Zn}=_1,d1="records successfully deleted",f1=c1(KN);WN.exports={delete:f1,deleteRecord:KN,deleteFilesBefore:E1,deleteAuditLogsBefore:h1};async function E1(e){let t=$N(e,"date");if(t)throw jn(t,t.message,Zn.BAD_REQUEST,void 0,void 0,!0);if(Fi.transformReq(e),!VN(e.date,VN.ISO_8601).isValid())throw jn(new Error,M_.INVALID_DATE,Zn.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,M_.INVALID_DATE,!0);let s=Fi.checkSchemaTableExist(e.schema,e.table);if(s)throw jn(new Error,s,Zn.NOT_FOUND,Gi.LOG_LEVELS.ERROR,s,!0);let n=await Om.deleteRecordsBefore(e);if(await Am(e.schema,e.table),YN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(E1,"deleteFilesBefore");async function h1(e){let t=$N(e,"timestamp");if(t)throw jn(t,t.message,Zn.BAD_REQUEST,void 0,void 0,!0);if(Fi.transformReq(e),isNaN(e.timestamp))throw jn(new Error,M_.INVALID_VALUE("Timestamp"),Zn.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,M_.INVALID_VALUE("Timestamp"),!0);let r=Fi.checkSchemaTableExist(e.schema,e.table);if(r)throw jn(new Error,r,Zn.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);let s=await Om.deleteAuditLogsBefore(e);return await Am(e.schema,e.table),YN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(h1,"deleteAuditLogsBefore");async function KN(e){e.ids&&(e.hash_values=e.ids);let t=o1(e);if(t)throw jn(t,t.message,Zn.BAD_REQUEST,void 0,void 0,!0);Fi.transformReq(e);let r=Fi.checkSchemaTableExist(e.schema,e.table);if(r)throw jn(new Error,r,Zn.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);try{await Am(e.schema,e.table);let s=await Om.deleteRecords(e);return Fi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${d1}`),s}catch(s){if(s.message===Gi.SEARCH_NOT_FOUND_MESSAGE){let n=new l1;return n.message=Gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(KN,"deleteRecord")});var P_=T((koe,JN)=>{var m1=require("crypto"),QN=9;function p1(e){let t=T1(QN),r=zN(e+t);return t+r}a(p1,"createHash");function S1(e,t){let r=e?.substr(0,QN),s=r+zN(t+r);return e===s}a(S1,"validateHash");function T1(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(T1,"generateSalt");function zN(e){return m1.createHash("md5").update(e).digest("hex")}a(zN,"md5");JN.exports={hash:p1,validate:S1}});var jN=T(($oe,XN)=>{var bm=je(),Qt={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 g1(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,bm.validateObject(e,Qt)}a(g1,"addUserValidation");function R1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,bm.validateObject(e,Qt)}a(R1,"alterUserValidation");function A1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,bm.validateObject(e,Qt)}a(A1,"dropUserValidation");XN.exports={addUserValidation:g1,alterUserValidation:R1,dropUserValidation:A1}});var et=T((Woe,ey)=>{"use strict";var{platform:Koe}=require("os"),O1="nats-server.zip",Nm="nats-server",b1=process.platform==="win32"?`${Nm}.exe`:Nm,ym="HDB",N1=/^[^\s.,*>]+$/,ZN="__request__",y1=a(e=>`${e}.${ZN}`,"REQUEST_SUBJECT"),I1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},w1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},C1={HUB:"hub.pid",LEAF:"leaf.pid"},L1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},D1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ym,deliver_subject:"__HDB__.WORKQUEUE"},U1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ym,deliver_subject:"HDB.SCHEMAQUEUE"},M1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ym,deliver_subject:"HDB.USERQUEUE"},P1={SUCCESS:"success",ERROR:"error"},v1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},B1={TXN:"txn",MSGID:"msgid"},Go={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},H1={[Go.ERR]:1,[Go.WRN]:2,[Go.INF]:3,[Go.DBG]:4,[Go.TRC]:5},x1={debug:"-D",trace:"-DVV"};ey.exports={NATS_SERVER_ZIP:O1,NATS_SERVER_NAME:Nm,NATS_BINARY_NAME:b1,PID_FILES:C1,NATS_CONFIG_FILES:w1,SERVER_SUFFIX:L1,WORK_QUEUE_CONSUMER_NAMES:D1,SCHEMA_QUEUE_CONSUMER_NAMES:U1,USER_QUEUE_CONSUMER_NAMES:M1,NATS_TERM_CONSTRAINTS_RX:N1,REQUEST_SUFFIX:ZN,UPDATE_REMOTE_RESPONSE_STATUSES:P1,CLUSTER_STATUS_STATUSES:v1,REQUEST_SUBJECT:y1,SUBJECT_PREFIXES:B1,MSG_HEADERS:I1,LOG_LEVELS:Go,LOG_LEVEL_FLAGS:x1,LOG_LEVEL_HIERARCHY:H1}});var ry=T((zoe,ty)=>{"use strict";var v_=w(),B_=class{static{a(this,"BaseLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,s=v_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Im=class extends B_{static{a(this,"ExtendedLicense")}constructor(t=0,r=v_.RAM_ALLOCATION_ENUM.DEFAULT,s=v_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};ty.exports={BaseLicense:B_,ExtendedLicense:Im}});var Vo=T((Xoe,cy)=>{"use strict";var ko=require("fs-extra"),ny=P_(),iy=require("crypto"),F1=require("moment"),G1=require("uuid").v4,zt=q(),Cm=require("path"),q1=z(),ei=w(),{totalmem:sy}=require("os"),k1=ry().ExtendedLicense,qo="invalid license key format",V1="061183",$1="mofi25",Y1="aes-256-cbc",K1=16,W1=32,oy=j();oy.initSync();var wm;cy.exports={validateLicense:ay,generateFingerPrint:z1,licenseSearch:Um,getLicense:j1,checkMemoryLimit:Z1};function Lm(){return Cm.join(oy.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(Lm,"getLicenseDirPath");function Q1(){let e=Lm();return Cm.join(e,ei.LICENSE_FILE_NAME)}a(Q1,"getLicenseFilePath");function Dm(){let e=Lm();return Cm.join(e,ei.REG_KEY_FILE_NAME)}a(Dm,"getFingerPrintFilePath");async function z1(){let e=Dm();try{return await ko.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await J1();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(z1,"generateFingerPrint");async function J1(){let e=G1(),t=ny.hash(e),r=Dm();try{await ko.mkdirp(Lm()),await ko.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(s),new Error("There was an error generating the fingerprint")}return t}a(J1,"writeFingerprint");function ay(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ei.RAM_ALLOCATION_ENUM.DEFAULT,version:ei.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let s=Dm(),n=!1;try{n=ko.statSync(s)}catch(i){zt.error(i)}if(n){let i;try{i=ko.readFileSync(s,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split($1),c=o[1];c=Buffer.concat([Buffer.from(c)],K1);let u=Buffer.concat([Buffer.from(i)],W1),_=iy.createDecipheriv(Y1,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=X1(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(qo),zt.error(qo),new Error(qo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(qo),zt.error(qo),new Error(qo)}else r.exp_date=l;r.exp_date<F1().valueOf()&&(r.valid_date=!1),ny.validate(o[1],`${V1}${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||zt.error("Invalid licence"),r}a(ay,"validateLicense");function X1(e,t){try{let r=iy.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{zt.warn("Check old license failed")}}a(X1,"checkOldLicense");function Um(){let e=new k1,t=[];try{t=ko.readFileSync(Q1(),"utf-8").split(ei.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(q1.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ay(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){zt.error("There was an error parsing the license string."),zt.error(n),e.ram_allocation=ei.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return wm=e,e}a(Um,"licenseSearch");async function j1(){return wm||await Um(),wm}a(j1,"getLicense");function Z1(){let e=Um().ram_allocation,t=process.constrainedMemory?.()||sy();if(t=Math.round(Math.min(t,sy())/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(Z1,"checkMemoryLimit")});var Br=T((rae,by)=>{"use strict";var dy="username is required",fy="nothing to update, must supply active, role or password to update",Ey="password cannot be an empty string",hy="If role is specified, it cannot be empty.",my="active must be true or false";by.exports={addUser:cY,alterUser:uY,dropUser:_Y,getSuperUser:hY,userInfo:dY,listUsers:x_,listUsersExternal:fY,setUsersToGlobal:Yo,findAndValidateUser:Ay,getClusterUser:mY,USERNAME_REQUIRED:dy,ALTERUSER_NOTHING_TO_UPDATE:fy,EMPTY_PASSWORD:Ey,EMPTY_ROLE:hy,ACTIVE_BOOLEAN:my};var py=cs(),eY=qi(),vm=P_(),Sy=jN(),Ty=as(),Bm=On(),vr=z(),gy=require("validate.js"),Ee=q(),{promisify:tY}=require("util"),Hm=Rn(),uy=w(),ly=et(),rY=Cr(),Zoe=j(),eae=Vo(),sY=Pi(),{table:tae}=(Se(),te(Ge)),{handleHDBError:Js,hdb_errors:nY}=Z(),{HTTP_STATUS_CODES:Xs,AUTHENTICATION_ERROR_MSGS:Mm,HDB_ERROR_MSGS:$o}=nY,{UserEventMsg:xm}=Us(),Pm=require("lodash"),{server:Fm}=(es(),te(Io)),iY=q();Fm.getUser=(e,t)=>Ay(e,t,t!=null);var Ry={username:!0,active:!0,role:!0,password:!0},_y=new Map,H_=Ty.searchByValue,oY=Ty.searchByHash,aY=tY(eY.delete);async function cY(e){let t=gy.cleanAttributes(e,Ry),r=Sy.addUserValidation(t);if(r)throw Js(new Error,r.message,Xs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await H_(s),n=n&&Array.from(n)}catch(u){throw Ee.error("There was an error searching for a role in add user"),Ee.error(u),u}if(!n||n.length<1)throw Js(new Error,$o.ROLE_NAME_NOT_FOUND(t.role),Xs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Js(new Error,$o.DUP_ROLES_FOUND(t.role),Xs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Hm.encrypt(t.password)),t.password=vm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await py.insert(i)}catch(u){throw Ee.error("There was an error searching for a user."),Ee.error(u),u}Ee.debug(o);try{await Yo()}catch(u){throw Ee.error("Got an error setting users to global"),Ee.error(u),u}if(o.skipped_hashes.length===1)throw Js(new Error,$o.USER_ALREADY_EXISTS(t.username),Xs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Bm.signalUserChange(new xm(process.pid)),`${c.username} successfully added`}a(cY,"addUser");async function uY(e){let t=gy.cleanAttributes(e,Ry);if(vr.isEmptyOrZeroLength(t.username))throw new Error(dy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(fy);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Ey);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(my);let r=lY(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Hm.encrypt(t.password)),t.password=vm.hash(t.password)),t.role==="")throw new Error(hy);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 H_(i)||[])}catch(c){throw Ee.error("Got an error searching for a role."),Ee.error(c),c}if(!o||o.length===0){let c=$o.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ee.error(c),Js(new Error,c,Xs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$o.ALTER_USER_DUP_ROLES(t.role);throw Ee.error(c),Js(new Error,c,Xs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await py.update(s)}catch(i){throw Ee.error("Error during update."),Ee.error(i),i}try{await Yo()}catch(i){throw Ee.error("Got an error setting users to global"),Ee.error(i),i}return Bm.signalUserChange(new xm(process.pid)),n}a(uY,"alterUser");function lY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(lY,"isClusterUser");async function _Y(e){try{let t=Sy.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(vr.isEmpty(global.hdb_users.get(e.username)))throw Js(new Error,$o.USER_NOT_EXIST(e.username),Xs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await aY(r)}catch(n){throw Ee.error("Got an error deleting a user."),Ee.error(n),n}Ee.debug(s);try{await Yo()}catch(n){throw Ee.error("Got an error setting users to global."),Ee.error(n),n}return Bm.signalUserChange(new xm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(_Y,"dropUser");async function dY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Pm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await oY(r)}catch(n){throw Ee.error("Got an error searching for a role."),Ee.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ee.error(r),r}return t}a(dY,"userInfo");async function fY(){let e;try{e=await x_()}catch(t){throw Ee.error("Got an error listing users."),Ee.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(fY,"listUsersExternal");async function x_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await H_(e)}catch(o){throw Ee.error("Got an error searching for roles."),Ee.error(o),o}let r={};for(let o of t)r[o.id]=Pm.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await H_(s)}catch(o){throw Ee.error("Got an error searching for users."),Ee.error(o),o}let i=new Map;for(let o of n)o=Pm.cloneDeep(o),o.role=r[o.role],EY(o.role),i.set(o.username,o);return i}catch(e){throw Ee.error("got an error listing users"),Ee.error(e),vr.errorizeMessage(e)}return null}a(x_,"listUsers");function EY(e){try{if(!e){Ee.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(sY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ee.error("Got an error trying to set system permissions."),Ee.error(t)}}a(EY,"appendSystemTablesToRole");async function Yo(){try{let e=await x_();global.hdb_users=e}catch(e){throw Ee.error(e),e}}a(Yo,"setUsersToGlobal");async function Ay(e,t,r=!0){global.hdb_users||await Yo();let s=global.hdb_users.get(e);if(!s){if(!r)return{username:e};throw Js(new Error,Mm.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}if(s&&!s.active)throw Js(new Error,Mm.USER_INACTIVE,Xs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(_y.get(t)===s.password)return n;if(vm.validate(s.password,t))_y.set(t,s.password);else throw Js(new Error,Mm.GENERIC_AUTH_FAIL,Xs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ay,"findAndValidateUser");async function hY(){global.hdb_users||await Yo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(hY,"getSuperUser");async function mY(){let e=await x_(),t=rY.getConfigFromFile(uy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===uy.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Hm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+ly.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+ly.SERVER_SUFFIX.ADMIN,r}a(mY,"getClusterUser");var Oy=[];Fm.invalidateUser=function(e){for(let t of Oy)try{t(e)}catch(r){iY.error("Error invalidating user",r)}};Fm.onInvalidatedUser=function(e){Oy.push(e)}});var vc=T((oae,wy)=>{"use strict";var ki=q(),Hr=w(),pY=TN(),nae=An(),iae=Bi(),SY=Br(),{validateEvent:Ny}=Us(),Pc=Ds(),TY=require("process"),{resetDatabases:gY}=(Se(),te(Ge)),RY={[Hr.ITC_EVENT_TYPES.SCHEMA]:AY,[Hr.ITC_EVENT_TYPES.USER]:Iy};async function AY(e){let t=Ny(e);if(t){ki.error(t);return}ki.trace("ITC schemaHandler received schema event:",e),await pY(e.message),await OY(e.message)}a(AY,"schemaHandler");async function OY(e){try{Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=gY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ki.error(t)}}a(OY,"syncSchemaMetadata");var yy=[];async function Iy(e){try{try{Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Pc.resetReadTxn(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ki.warn(r)}let t=Ny(e);if(t){ki.error(t);return}ki.trace(`ITC userHandler ${Hr.HDB_ITC_CLIENT_PREFIX}${TY.pid} received user event:`,e),await SY.setUsersToGlobal();for(let r of yy)r()}catch(t){ki.error(t)}}a(Iy,"userHandler");Iy.addListener=function(e){yy.push(e)};wy.exports=RY});var Us=T((dae,Ly)=>{"use strict";var cae=q(),Gm=z(),bY=w(),{ITC_ERRORS:Bc}=yr(),{parentPort:uae,threadId:NY,isMainThread:yY,workerData:lae}=require("worker_threads"),{onMessageFromWorkers:IY,broadcast:_ae,broadcastWithAcknowledgement:wY}=at();Ly.exports={sendItcEvent:CY,validateEvent:Cy,SchemaEventMsg:LY,UserEventMsg:DY};var F_;IY(async(e,t)=>{F_=F_||vc(),Cy(e),F_[e.type]&&await F_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function CY(e){return!yY&&e.message&&(e.message.originator=NY),wY(e)}a(CY,"sendItcEvent");function Cy(e){if(typeof e!="object")return Bc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Gm.isEmpty(e.type))return Bc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Gm.isEmpty(e.message))return Bc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Gm.isEmpty(e.message.originator))return Bc.MISSING_ORIGIN;if(bY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bc.INVALID_EVENT(e.type)}a(Cy,"validateEvent");function LY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(LY,"SchemaEventMsg");function DY(e){this.originator=e}a(DY,"UserEventMsg")});var On=T((hae,Py)=>{"use strict";var Dy=w(),Eae=z(),G_=q(),Uy=mN(),Ko,{sendItcEvent:My}=Us();function UY(e){try{G_.trace("signalSchemaChange called with message:",e),Ko=Ko||vc();let t=new Uy(Dy.ITC_EVENT_TYPES.SCHEMA,e);return Ko.schema(t),My(t)}catch(t){G_.error(t)}}a(UY,"signalSchemaChange");function MY(e){try{G_.trace("signalUserChange called with message:",e),Ko=Ko||vc();let t=new Uy(Dy.ITC_EVENT_TYPES.USER,e);return Ko.user(t),My(t)}catch(t){G_.error(t)}}a(MY,"signalUserChange");Py.exports={signalSchemaChange:UY,signalUserChange:MY}});var q_=T((pae,By)=>{"use strict";var vy=z(),PY=w(),vY=q(),BY=O_(),HY=A_(),xY=On(),{SchemaEventMsg:FY}=Us(),GY="already exists in";By.exports=qY;async function qY(e,t,r){if(vy.isEmptyOrZeroLength(r))return r;let s=[];vy.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await kY(e,t.schema,t.name,i)})),n}a(qY,"lmdbCheckForNewAttributes");async function kY(e,t,r,s){let n=new HY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await VY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(GY))vY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(kY,"createNewAttribute");async function VY(e){let t;return t=await BY(e),xY.signalSchemaChange(new FY(process.pid,PY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(VY,"createAttribute")});var Wo=T((Tae,Hy)=>{"use strict";var qm=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Hy.exports=qm});var Fy=T((Rae,xy)=>{"use strict";var $Y=Wo(),YY=w().OPERATIONS_ENUM,km=class extends $Y{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(YY.INSERT,r,s,n,i),this.records=t}};xy.exports=km});var qy=T((Oae,Gy)=>{"use strict";var KY=Wo(),WY=w().OPERATIONS_ENUM,Vm=class extends KY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(WY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Gy.exports=Vm});var Vy=T((Nae,ky)=>{"use strict";var QY=Wo(),zY=w().OPERATIONS_ENUM,$m=class extends QY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(zY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};ky.exports=$m});var Yy=T((Iae,$y)=>{"use strict";var JY=Wo(),XY=w().OPERATIONS_ENUM,Ym=class extends JY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(XY.DELETE,s,n,t,i),this.original_records=r}};$y.exports=Ym});var Hc=T((Lae,zy)=>{"use strict";var Cae=require("path"),Ky=Ve(),jY=Fy(),ZY=qy(),eK=Vy(),tK=Yy(),Qo=ft(),Wy=z(),{CONFIG_PARAMS:rK}=w(),Qy=j();Qy.initSync();var k_=w().OPERATIONS_ENUM,{getTransactionAuditStorePath:sK}=Ye();zy.exports=nK;async function nK(e,t){if(Qy.get(rK.LOGGING_AUDITLOG)===!1)return;let r=sK(e.schema,e.table),s=await Ky.openEnvironment(r,e.table,!0),n=iK(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Ky.initializeDBIs(s,Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qo.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Wy.isEmpty(n.user_name)||s.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(nK,"writeTransaction");function iK(e,t){let r=Wy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===k_.INSERT)return new jY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPDATE)return new ZY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.UPSERT)return new eK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===k_.DELETE)return new tK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(iK,"createTransactionObject")});var Km=T((Mae,Jy)=>{"use strict";var oK=Ic(),Uae=wc(),xc=w(),aK=Uc(),cK=xo().insertRecords,uK=Ve(),lK=q(),_K=q_(),{getSchemaPath:dK}=Ye(),fK=Hc();Jy.exports=EK;async function EK(e){try{let{schema_table:t,attributes:r}=oK(e);aK(e,r,t.hash_attribute),e.schema!==xc.SYSTEM_SCHEMA_NAME&&(r.includes(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await _K(e.hdb_auth_header,t,r),n=dK(e.schema,e.table),i=await uK.openEnvironment(n,e.table),o=await cK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await fK(e,o)}catch(c){lK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(EK,"lmdbCreateRecords")});var Zy=T((vae,jy)=>{"use strict";var Xy=w(),hK=Km(),mK=wc(),pK=require("fs-extra"),{getSchemaPath:SK}=Ye();jy.exports=TK;async function TK(e){let t=[{name:e.schema,createddate:Date.now()}],r=new mK(Xy.SYSTEM_SCHEMA_NAME,Xy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await hK(r),await pK.mkdirp(SK(e.schema))}a(TK,"lmdbCreateSchema")});var tI=T((Hae,eI)=>{"use strict";var Wm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};eI.exports=Wm});var iI=T((kae,nI)=>{"use strict";var rI=Ve(),Qm=Lr(),zm=yr().LMDB_ERRORS_ENUM,gK=ft(),sI=q(),Fae=z(),RK=require("lmdb"),AK=tI(),OK=w(),{OVERFLOW_MARKER:Gae,MAX_SEARCH_KEY_LENGTH:qae}=gK,bK=OK.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function NK(e,t,r,s){if(Qm.validateEnv(e),t===void 0)throw new Error(zm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zm.IDS_REQUIRED):new Error(zm.IDS_MUST_BE_ITERABLE);try{let n=rI.listDBIs(e);rI.initializeDBIs(e,t,n);let i=new AK,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[bK]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,RK.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let O=e.dbis[A],y=h[A];if(y!=null)try{let F=Qm.getIndexedValues(y);if(F)for(let K=0,H=F.length;K<H;K++)O.remove(F[K],o)}catch{sI.warn(`cannot delete from attribute: ${A}, ${y}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){sI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Qm.getNextMonotonicTime(),i}catch(n){throw n}}a(NK,"deleteRecords");nI.exports={deleteRecords:NK}});var Fc=T(($ae,aI)=>{"use strict";var zo=z(),yK=iI(),IK=Ve(),{getSchemaPath:wK}=Ye(),CK=Hc(),LK=q();aI.exports=DK;async function DK(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zo.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zo.isEmptyOrZeroLength(e.hash_values)&&!zo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zo.isEmpty(u)||e.hash_values.push(u)}}if(zo.isEmptyOrZeroLength(e.hash_values))return oI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zo.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=wK(e.schema,e.table),i=await IK.openEnvironment(n,e.table),o=await yK.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await CK(e,o)}catch(c){LK.error(`unable to write transaction due to ${c.message}`)}return oI(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(DK,"lmdbDeleteRecords");function oI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(oI,"createDeleteResponse")});var Xm=T((Wae,cI)=>{"use strict";var UK=w(),Kae=Lr();function Jm(e,t){let r=Object.create(null);if(t.length===1&&UK.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Jm,"parseRow");function MK(e,t,r,s){let n=Jm(r,e);s.push(n)}a(MK,"searchAll");function PK(e,t,r,s){let n=Jm(r,e);s[t]=n}a(PK,"searchAllToMap");function vK(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(vK,"iterateDBI");function Vi(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Vi,"pushResults");function BK(e,t,r,s,n,i){t.toString().endsWith(e)&&Vi(t,r,s,n,i)}a(BK,"endsWith");function HK(e,t,r,s,n,i){t.toString().includes(e)&&Vi(t,r,s,n,i)}a(HK,"contains");function xK(e,t,r,s,n,i){t>e&&Vi(t,r,s,n,i)}a(xK,"greaterThanCompare");function FK(e,t,r,s,n,i){t>=e&&Vi(t,r,s,n,i)}a(FK,"greaterThanEqualCompare");function GK(e,t,r,s,n,i){t<e&&Vi(t,r,s,n,i)}a(GK,"lessThanCompare");function qK(e,t,r,s,n,i){t<=e&&Vi(t,r,s,n,i)}a(qK,"lessThanEqualCompare");cI.exports={parseRow:Jm,searchAll:MK,searchAllToMap:PK,iterateDBI:vK,endsWith:BK,contains:HK,greaterThanCompare:xK,greaterThanEqualCompare:FK,lessThanCompare:GK,lessThanEqualCompare:qK,pushResults:Vi}});var Jo=T((jae,hI)=>{"use strict";var ti=Ve(),zae=q(),xr=Lr(),V_=ft(),ut=yr().LMDB_ERRORS_ENUM,Jae=z(),kK=w(),$_=Xm(),{parseRow:VK}=$_,Xae=require("lmdb"),{OVERFLOW_MARKER:uI,MAX_SEARCH_KEY_LENGTH:$K}=V_;function lI(e,t,r,s=!1,n=void 0,i=void 0){return $i(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(lI,"iterateFullIndex");function Gc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return $i(e,t,r,(l,d,f,E)=>{let O={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(O.values=!1,d.getRange(O).map(y=>({value:y}))):d.getRange(O)})}a(Gc,"iterateRangeBetween");function $i(e,t,r,s){let n=e.database||e,i=ti.openDBI(n,r);i[V_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ti.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a($i,"setupTransaction");function _I(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(uI)){if(!n)if(r)n=ti.openDBI(e,r);else{let u=ti.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=ti.openDBI(e,u[_]),!n[V_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(_I,"getOverflowCheck");function YK(e,t,r,s=!1,n=void 0,i=void 0){if(xr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return $i(e,t,t,(o,c,u)=>(Y_(r),r=qc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>VK(_.value,r))))}a(YK,"searchAll");function KK(e,t,r,s=!1,n=void 0,i=void 0){if(xr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);Y_(r),r=qc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of lI(e,t,t,s,n,i))o.set(c,$_.parseRow(u,r));return o}a(KK,"searchAllToMap");function WK(e,t,r=!1,s=void 0,n=void 0){if(xr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=lI(e,void 0,t,r,s,n),c=o.transaction,u=_I(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(WK,"iterateDBI");function QK(e,t){if(xr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(QK,"countAll");function zK(e,t,r,s,n=!1,i=void 0,o=void 0){return ri(e,r,s),$i(e,t,r,(c,u,_,l)=>(s=xr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(zK,"equals");function JK(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(JK,"count");function XK(e,t,r,s,n=!1,i=void 0,o=void 0){return ri(e,r,s),$i(e,null,r,(c,u)=>{s=xr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(XK,"startsWith");function jK(e,t,r,s,n=!1,i=void 0,o=void 0){return dI(e,t,r,s,n,i,o,!0)}a(jK,"endsWith");function dI(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ri(e,r,s),$i(e,null,r,(u,_,l,d)=>{let f=_I(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(uI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[V_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(dI,"contains");function ZK(e,t,r,s,n=!1,i=void 0,o=void 0){ri(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,s,u,n,i,o,!0,!1)}a(ZK,"greaterThan");function eW(e,t,r,s,n=!1,i=void 0,o=void 0){ri(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,s,u,n,i,o,!1,!1)}a(eW,"greaterThanEqual");function tW(e,t,r,s,n=!1,i=void 0,o=void 0){ri(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,s,n,i,o,!1,!0)}a(tW,"lessThan");function rW(e,t,r,s,n=!1,i=void 0,o=void 0){ri(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,s,n,i,o,!1,!1)}a(rW,"lessThanEqual");function sW(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(xr.validateEnv(e),r===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ut.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ut.END_VALUE_REQUIRED);if(s=xr.convertKeyValueToWrite(s),n=xr.convertKeyValueToWrite(n),s>n)throw new Error(ut.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Gc(e,t,r,s,n,i,o,c)}a(sW,"between");function nW(e,t,r,s){xr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),r=qc(n,r),s===void 0)throw new Error(ut.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=$_.parseRow(c,r)),o}a(nW,"searchByHash");function iW(e,t,r){xr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(iW,"checkHashExists");function oW(e,t,r,s,n=[]){return EI(e,t,r,s,n),fI(e,t,r,s,n).map(i=>i[1])}a(oW,"batchSearchByHash");function aW(e,t,r,s,n=[]){EI(e,t,r,s,n);let i=new Map;for(let[o,c]of fI(e,t,r,s,n))i.set(o,c);return i}a(aW,"batchSearchByHashToMap");function fI(e,t,r,s,n=[]){return $i(e,t,t,(i,o,c)=>{r=qc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,$_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(fI,"batchHashSearch");function EI(e,t,r,s,n){if(xr.validateEnv(e),t===void 0)throw new Error(ut.HASH_ATTRIBUTE_REQUIRED);if(Y_(r),s==null)throw new Error(ut.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ut.IDS_MUST_BE_ITERABLE)}a(EI,"initializeBatchSearchByHash");function Y_(e){if(!Array.isArray(e))throw e===void 0?new Error(ut.FETCH_ATTRIBUTES_REQUIRED):new Error(ut.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Y_,"validateFetchAttributes");function ri(e,t,r){if(xr.validateEnv(e),t===void 0)throw new Error(ut.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ut.SEARCH_VALUE_REQUIRED);if(r?.length>$K)throw new Error(ut.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function qc(e,t){return t.length===1&&kK.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(qc,"setGetWholeRowAttributes");hI.exports={searchAll:YK,searchAllToMap:KK,count:JK,countAll:QK,equals:zK,startsWith:XK,endsWith:jK,contains:dI,searchByHash:nW,setGetWholeRowAttributes:qc,batchSearchByHash:oW,batchSearchByHashToMap:aW,checkHashExists:iW,iterateDBI:WK,greaterThan:ZK,greaterThanEqual:eW,lessThan:tW,lessThanEqual:rW,between:sW}});var Xo=T((ece,gI)=>{var mI=require("lodash"),pI=je(),ue=require("joi"),cW=z(),{hdb_schema_table:kc,checkValidTable:SI,hdb_table:TI,hdb_database:K_}=Qs(),{handleHDBError:uW,hdb_errors:lW}=Z(),{getDatabases:_W}=(Se(),te(Ge)),{HTTP_STATUS_CODES:dW}=lW,fW=ue.object({database:K_,schema:K_,table:TI,search_attribute:kc,search_value:ue.any().required(),get_attributes:ue.array().min(1).items(ue.alternatives(kc,ue.object())).optional(),desc:ue.bool(),limit:ue.number().integer().min(1),offset:ue.number().integer().min(0)}),EW=ue.object({database:K_,schema:K_,table:TI,operator:ue.string().valid("and","or").default("and").lowercase(),offset:ue.number().integer().min(0),limit:ue.number().integer().min(1),get_attributes:ue.array().min(1).items(ue.alternatives(kc,ue.object())).optional(),sort:ue.object({attribute:ue.alternatives(kc,ue.array().min(1)),descending:ue.bool().optional()}).optional(),conditions:ue.array().min(1).items(ue.alternatives(ue.object({operator:ue.string().valid("and","or").default("and").lowercase(),conditions:ue.array()}),ue.object({search_attribute:ue.alternatives(kc,ue.array().min(1)),search_type:ue.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:ue.when("search_type",{switch:[{is:"equals",then:ue.any()},{is:"between",then:ue.array().items(ue.alternatives([ue.string(),ue.number()])).length(2)}],otherwise:ue.alternatives(ue.string(),ue.number())}).required()}))).required()});gI.exports=function(e,t){let r=null;switch(t){case"value":r=pI.validateBySchema(e,fW);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(SI("database",e.schema)),i(SI("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=pI.validateBySchema(e,EW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=cW.checkGlobalSchemaTable(e.schema,e.table);if(n)return uW(new Error,n,dW.NOT_FOUND);let o=_W()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=mI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!mI.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var jm=T((rce,RI)=>{"use strict";var hW=Ve(),mW=Xo(),{getSchemaPath:pW}=Ye();RI.exports=SW;function SW(e){let t=mW(e,"hashes");if(t)throw t;let r=pW(e.schema,e.table);return hW.openEnvironment(r,e.table)}a(SW,"initialize")});var Zm=T((nce,AI)=>{"use strict";var TW=Jo(),gW=jm();AI.exports=RW;async function RW(e){let t=await gW(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return TW.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(RW,"lmdbGetDataByHash")});var jo=T((oce,OI)=>{"use strict";var ep=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};OI.exports=ep});var NI=T((uce,bI)=>{"use strict";var cce=jo(),AW=Jo(),OW=jm();bI.exports=bW;async function bW(e){let t=await OW(e),r=global.hdb_schema[e.schema][e.table];return AW.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(bW,"lmdbSearchByHash")});var js=T((_ce,yI)=>{"use strict";var tp=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};yI.exports=tp});var W_=T((fce,UI)=>{"use strict";var Jt=Jo(),NW=Ve(),yW=z(),le=ft(),Yi=w(),IW=Pi(),II=yr().LMDB_ERRORS_ENUM,{getSchemaPath:wW}=Ye(),bn=Yi.SEARCH_WILDCARDS;async function CW(e,t,r){let s;e.schema===Yi.SYSTEM_SCHEMA_NAME?s=IW[e.table]:s=global.hdb_schema[e.schema][e.table];let n=DI(e,s.hash_attribute,r,t);return CI(e,n,s.hash_attribute,r)}a(CW,"prepSearch");async function CI(e,t,r,s){let n=wW(e.schema,e.table),i=await NW.openEnvironment(n,e.table),o=LI(i,e,t,r),c=o.transaction||i;if([le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,le.SEARCH_TYPES.SEARCH_ALL,le.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(LW(e,r)===!1){let l=e.search_attribute;if(l===r)return s?wI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?wI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(CI,"executeSearch");function LI(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case le.SEARCH_TYPES.EQUALS:n=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.CONTAINS:n=Jt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.ENDS_WITH:case le.SEARCH_TYPES._ENDS_WITH:n=Jt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.STARTS_WITH:case le.SEARCH_TYPES._STARTS_WITH:n=Jt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Jt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Jt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case le.SEARCH_TYPES.SEARCH_ALL:return Jt.searchAll(e,s,t.get_attributes,o,c,u);case le.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,s,t.get_attributes,o,c,u);case le.SEARCH_TYPES.BETWEEN:n=Jt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case le.SEARCH_TYPES.GREATER_THAN:case le.SEARCH_TYPES._GREATER_THAN:n=Jt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.GREATER_THAN_EQUAL:case le.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Jt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.LESS_THAN:case le.SEARCH_TYPES._LESS_THAN:n=Jt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.LESS_THAN_EQUAL:case le.SEARCH_TYPES._LESS_THAN_EQUAL:n=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(LI,"searchByType");function wI(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(wI,"createMapFromIterable");function LW(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(LW,"checkToFetchMore");function DI(e,t,r,s){if(yW.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),bn.indexOf(n)>-1)return r===!0?le.SEARCH_TYPES.SEARCH_ALL_TO_MAP:le.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(bn[0])<0&&n.indexOf(bn[1])<0)return c===!0?r===!0?le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:le.SEARCH_TYPES.EQUALS;if(bn.indexOf(i)>=0&&bn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),le.SEARCH_TYPES.CONTAINS;if(bn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),le.SEARCH_TYPES.ENDS_WITH;if(bn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),le.SEARCH_TYPES.STARTS_WITH;if(n.includes(bn[0])||n.includes(bn[1]))return le.SEARCH_TYPES.EQUALS;throw new Error(II.UNKNOWN_SEARCH_TYPE)}else switch(s){case Yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return le.SEARCH_TYPES.BETWEEN;case Yi.VALUE_SEARCH_COMPARATORS.GREATER:return le.SEARCH_TYPES.GREATER_THAN;case Yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return le.SEARCH_TYPES.GREATER_THAN_EQUAL;case Yi.VALUE_SEARCH_COMPARATORS.LESS:return le.SEARCH_TYPES.LESS_THAN;case Yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return le.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(II.UNKNOWN_SEARCH_TYPE)}}a(DI,"createSearchTypeFromSearchObject");UI.exports={executeSearch:CI,createSearchTypeFromSearchObject:DI,prepSearch:CW,searchByType:LI}});var PI=T((mce,MI)=>{"use strict";var hce=js(),DW=Xo(),UW=z(),MW=w(),PW=W_();MI.exports=vW;function vW(e,t){if(!UW.isEmpty(t)&&MW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=DW(e,"value");if(s)throw s;let n=!0;return PW.prepSearch(e,t,n)}a(vW,"lmdbGetDataByValue")});var Vc=T((Tce,vI)=>{"use strict";var Sce=js(),BW=Xo(),HW=z(),xW=w(),FW=W_();vI.exports=GW;async function GW(e,t){if(!HW.isEmpty(t)&&xW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=BW(e,"value");if(s)throw s;return FW.prepSearch(e,t,!1)}a(GW,"lmdbSearchByValue")});var HI=T((Ace,BI)=>{"use strict";var Rce=ft(),rp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},sp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},np=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};BI.exports={SearchByConditionsObject:rp,SearchCondition:sp,SortAttribute:np}});var kI=T((yce,qI)=>{"use strict";var bce=HI().SearchByConditionsObject,qW=js(),kW=Xo(),ip=Jo(),Q_=ft(),{Resource:Nce}=(ws(),te(uh)),GI=W_(),VW=Xm(),$W=require("lodash"),{getSchemaPath:YW}=Ye(),xI=Ve(),{handleHDBError:KW,hdb_errors:WW}=Z(),{HTTP_STATUS_CODES:QW}=WW,zW=1e8;qI.exports=JW;async function JW(e){let t=kW(e,"conditions");if(t)throw KW(t,t.message,QW.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=YW(e.schema,e.table),s=await xI.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)xI.openDBI(s,_.search_attribute);let i=$W.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Q_.SEARCH_TYPES.EQUALS?_.estimated_count=ip.count(s,_.search_attribute,_.search_value):l===Q_.SEARCH_TYPES.CONTAINS||l===Q_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=zW}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await FI(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(GI.filterByType),d=l.length,f=ip.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>VW.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await FI(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=ip.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(JW,"lmdbSearchByConditions");async function FI(e,t,r,s){let n=new qW(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Q_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,GI.searchByType(e,n,i,s).map(o=>o.value)}a(FI,"executeConditionSearch")});var $c=T((wce,VI)=>{"use strict";var XW=w().OPERATIONS_ENUM,op=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=XW.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};VI.exports=op});var ap=T((Lce,XI)=>{"use strict";var WI=js(),QI=$c(),zI=Vc(),JI=Fc(),cr=w(),$I=z(),YI=Ve(),{getTransactionAuditStorePath:jW,getSchemaPath:ZW}=Ye(),KI=q();XI.exports=eQ;async function eQ(e){try{if($I.isEmpty(global.hdb_schema[e.schema])||$I.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await tQ(e),await rQ(e);let t=ZW(e.schema,e.table);try{await YI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")KI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=jW(e.schema,e.table);await YI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")KI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(eQ,"lmdbDropTable");async function tQ(e){let t=new WI(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await zI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new QI(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await JI(n)}a(tQ,"deleteAttributesFromSystem");async function rQ(e){let t=new WI(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,cr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await zI(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new QI(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await JI(n)}catch(i){throw i}}a(rQ,"dropTableFromSystem")});var ZI=T((Uce,jI)=>{"use strict";var sQ=require("fs-extra"),nQ=js(),iQ=jo(),oQ=$c(),aQ=ap(),cQ=Fc(),uQ=Zm(),lQ=Vc(),Nn=w(),{getSchemaPath:_Q}=Ye(),{handleHDBError:dQ,hdb_errors:fQ}=Z(),{HDB_ERROR_MSGS:EQ,HTTP_STATUS_CODES:hQ}=fQ;jI.exports=mQ;async function mQ(e){let t;try{t=await pQ(e.schema);let r=new nQ(Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Nn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Nn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await lQ(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await aQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new oQ(Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await cQ(n);let i=_Q(t);await sQ.remove(i)}catch(r){throw r}}a(mQ,"lmdbDropSchema");async function pQ(e){let t=new iQ(Nn.SYSTEM_SCHEMA_NAME,Nn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Nn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await uQ(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw dQ(new Error,EQ.SCHEMA_NOT_FOUND(e),hQ.NOT_FOUND,void 0,void 0,!0);return s}a(pQ,"validateDropSchema")});var up=T((Pce,ew)=>{"use strict";var cp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};ew.exports=cp});var rw=T((Hce,tw)=>{"use strict";var SQ=require("fs-extra"),z_=Ve(),{getTransactionAuditStorePath:TQ}=Ye(),lp=ft(),Bce=up();tw.exports=gQ;async function gQ(e){let t;try{let r=TQ(e.schema,e.table);await SQ.mkdirp(r),t=await z_.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{z_.createDBI(t,lp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),z_.createDBI(t,lp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),z_.createDBI(t,lp.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(gQ,"createTransactionsAuditEnvironment")});var ow=T((Fce,iw)=>{"use strict";var _p=w(),sw=Ve(),RQ=xo(),{getSystemSchemaPath:AQ,getSchemaPath:OQ}=Ye(),bQ=Pi(),NQ=O_(),dp=A_(),yQ=q(),IQ=rw(),Ep=bQ.hdb_table,nw=[];for(let e=0;e<Ep.attributes.length;e++)nw.push(Ep.attributes[e].attribute);iw.exports=wQ;async function wQ(e,t){let r=OQ(t.schema,t.table),s=new dp(t.schema,t.table,_p.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new dp(t.schema,t.table,_p.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new dp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await sw.createEnvironment(r,t.table),e!==void 0){let o=await sw.openEnvironment(AQ(),_p.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await RQ.insertRecords(o,Ep.hash_attribute,nw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await fp(s),await fp(n),await fp(i)}await IQ(t)}catch(o){throw o}}a(wQ,"lmdbCreateTable");async function fp(e){try{await NQ(e)}catch(t){yQ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(fp,"createAttribute")});var cw=T((qce,aw)=>{"use strict";var CQ=Ic(),LQ=Uc(),DQ=q_(),Yc=w(),UQ=xo().updateRecords,MQ=Ve(),{getSchemaPath:PQ}=Ye(),vQ=Hc(),BQ=q();aw.exports=HQ;async function HQ(e){try{let{schema_table:t,attributes:r}=CQ(e);LQ(e,r,t.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(r.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await DQ(e.hdb_auth_header,t,r),n=PQ(e.schema,e.table),i=await MQ.openEnvironment(n,e.table),o=await UQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vQ(e,o)}catch(c){BQ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(HQ,"lmdbUpdateRecords")});var lw=T((Vce,uw)=>{"use strict";var xQ=w().OPERATIONS_ENUM,hp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=xQ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};uw.exports=hp});var dw=T((Kce,_w)=>{"use strict";var Yce=lw(),FQ=Ic(),GQ=Uc(),qQ=q_(),Kc=w(),kQ=xo().upsertRecords,VQ=Ve(),{getSchemaPath:$Q}=Ye(),YQ=Hc(),KQ=q(),{handleHDBError:WQ,hdb_errors:QQ}=Z();_w.exports=zQ;async function zQ(e){let t;try{t=FQ(e)}catch(u){throw WQ(u,u.message,QQ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;GQ(e,s,r.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(s.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await qQ(e.hdb_auth_header,r,s),i=$Q(e.schema,e.table),o=await VQ.openEnvironment(i,e.table),c=await kQ(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await YQ(e,c)}catch(u){KQ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(zQ,"lmdbUpsertRecords")});var Ew=T((Qce,fw)=>{"use strict";var mp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};fw.exports=mp});var mw=T((Jce,hw)=>{"use strict";var pp=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};hw.exports=pp});var Tw=T((Zce,Sw)=>{"use strict";var Sp=Ve(),{getTransactionAuditStorePath:JQ}=Ye(),jce=Ew(),Wc=ft(),XQ=z(),pw=mw(),jQ=require("util").promisify,ZQ=jQ(setTimeout),ez=1e4,tz=100;Sw.exports=rz;async function rz(e){let t=JQ(e.schema,e.table),r=await Sp.openEnvironment(t,e.table,!0),s=Sp.listDBIs(r);Sp.initializeDBIs(r,Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new pw;do n=await sz(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await ZQ(tz);while(n.transactions_deleted>0);return i}a(rz,"deleteAuditLogsBefore");async function sz(e,t){let r=new pw;try{let s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];XQ.isEmpty(c)||(n=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ez)break}return await n,r}catch(s){throw s}}a(sz,"deleteTransactions")});var Rw=T((tue,gw)=>{"use strict";var Tp=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};gw.exports=Tp});var Ow=T((nue,Aw)=>{"use strict";var nz=js(),iz=$c(),sue=Rw(),Zs=w(),oz=z(),gp=Ve(),az=Pi(),cz=Vc(),uz=Fc(),{getSchemaPath:lz}=Ye();Aw.exports=_z;async function _z(e,t=!0){let r;e.schema===Zs.SYSTEM_SCHEMA_NAME?r=az[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await fz(e),n=lz(e.schema,e.table),i=await gp.openEnvironment(n,e.table);return t===!0&&await dz(e,i,r.hash_attribute),gp.dropDBI(i,e.attribute),s}a(_z,"lmdbDropAttribute");async function dz(e,t,r){let s=gp.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(dz,"removeAttributeFromAllObjects");async function fz(e){let t=new nz(Zs.SYSTEM_SCHEMA_NAME,Zs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await cz(t)).filter(o=>o[Zs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(oz.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new iz(Zs.SYSTEM_SCHEMA_NAME,Zs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return uz(i)}a(fz,"dropAttributeFromSystem")});var Cw=T((aue,ww)=>{"use strict";var Rp=Ve(),Zo=ft(),oue=Lr(),Ap=w(),bw=z(),{getTransactionAuditStorePath:Ez}=Ye(),hz=Jo(),J_=Wo(),mz=q();ww.exports=pz;async function pz(e){let t=Ez(e.schema,e.table),r=await Rp.openEnvironment(t,e.table,!0),s=Rp.listDBIs(r);Rp.initializeDBIs(r,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Ap.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Nw(r,e.search_values);case Ap.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Tz(r,e.search_values,n);case Ap.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Sz(r,e.search_values);default:return Nw(r)}}a(pz,"readAuditLog");function Nw(e,t=[0,Date.now()]){bw.isEmpty(t[0])&&(t[0]=0),bw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new J_,n))}a(Nw,"searchTransactionsByTimestamp");function Sz(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Iw(e,i))}return Object.fromEntries(r)}a(Sz,"searchTransactionsByUsername");function Tz(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=hz.equals(e,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=Iw(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);yw(u,"records",r,l,o),yw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Tz,"searchTransactionsByHashValues");function yw(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new J_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new J_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(yw,"loopRecords");function Iw(e,t){let r=[];try{let s=e.dbis[Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new J_,i);r.push(o)}}catch(i){mz.warn(i)}return r}catch(s){throw s}}a(Iw,"batchSearchTransactions")});var Dw=T((_ue,Lw)=>{"use strict";var{getSchemaPath:uue}=Ye(),lue=Ve(),{database:gz}=(Se(),te(Ge));Lw.exports={writeTransaction:Rz};async function Rz(e,t,r){return gz({database:e,table:t}).transaction(r)}a(Rz,"writeTransaction")});var vw=T((fue,Pw)=>{"use strict";var{getSchemaPath:Uw}=Ye(),Mw=Ve();Pw.exports={flush:Az,resetReadTxn:Oz};async function Az(e,t){return(await Mw.openEnvironment(Uw(e,t),t.toString())).flushed}a(Az,"flush");async function Oz(e,t){try{(await Mw.openEnvironment(Uw(e,t),t.toString())).resetReadTxn()}catch{}}a(Oz,"resetReadTxn")});var Fw=T((hue,xw)=>{"use strict";var{Readable:bz}=require("stream"),{getDatabases:Nz}=(Se(),te(Ge)),{readSync:yz,openSync:Iz,createReadStream:Bw}=require("fs"),{open:wz}=require("lmdb"),Hw=d_(),Cz=E_(),{AUDIT_STORE_OPTIONS:Lz}=(Po(),te(gb)),{INTERNAL_DBIS_NAME:Dz,AUDIT_STORE_NAME:Uz}=ft();xw.exports=Pz;var Op=32768,Mz=100;async function Pz(e){let t=e.database||e.schema||"data",r=Nz()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=wz({noSync:!0,maxDbs:Cz.MAX_DBS}),f,E=d.openDB(Dz,new Hw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(O,y){y.encoding="binary",y.encoder=void 0;let F=d.openDB(O,y),K=l.openDB(O,y);for(let{key:H,version:D,value:$}of K.getRange({transaction:h,versions:K.useVersions}))f=F.put(H,$,D),p++%Mz===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:O,value:y}of l.getRange({transaction:h,start:!1}))if(n.some(F=>O.startsWith?.(F+"/"))){E.put(O,y);let[,F]=O.split("/"),K=!F,H=new Hw(!K,K);await S(O,H)}e.include_audit&&await S(Uz,Object.assign({},Lz)),await f;let A=Bw(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=Iz(o.path);return o.transaction(()=>{let _=Buffer.alloc(Op);yz(c,_,0,Op),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Bw(null,{fd:c,start:Op}),f=new bz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(Pz,"getBackup")});var kw=T((pue,qw)=>{"use strict";var vz=q(),{handleHDBError:Bz}=Z(),Hz=ob(),xz=O_(),Fz=Km(),Gz=Zy(),qz=Fc(),kz=Zm(),Vz=NI(),$z=PI(),Yz=Vc(),Kz=kI(),Wz=ZI(),Qz=ow(),zz=cw(),Jz=dw(),Xz=Tw(),jz=ap(),Zz=Ow(),eJ=Cw(),tJ=Dw(),Gw=vw(),rJ=Fw(),bp=class extends Hz{static{a(this,"LMDBBridge")}async searchByConditions(t){return Kz(t)}async getDataByHash(t){return await kz(t)}async searchByHash(t){return await Vz(t)}async getDataByValue(t,r){return await $z(t,r)}async searchByValue(t){return await Yz(t)}async createSchema(t){return await Gz(t)}async dropSchema(t){return await Wz(t)}async createTable(t,r){return await Qz(t,r)}async dropTable(t){return await jz(t)}async createAttribute(t){return await xz(t)}async createRecords(t){return await Fz(t)}async updateRecords(t){return await zz(t)}async upsertRecords(t){try{return await Jz(t)}catch(r){throw Bz(r,null,null,vz.ERR,r)}}async deleteRecords(t){return await qz(t)}async dropAttribute(t){return await Zz(t)}async deleteAuditLogsBefore(t){return await Xz(t)}async readAuditLog(t){return await eJ(t)}writeTransaction(t,r,s){return tJ.writeTransaction(t,r,s)}flush(t,r){return Gw.flush(t,r)}resetReadTxn(t,r){return Gw.resetReadTxn(t,r)}getBackup(t){return rJ(t)}};qw.exports=bp});var Xw={};ze(Xw,{ResourceBridge:()=>Ip});function wp({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 $w(e,t){let r=en(e),s=wp(e,r);if(!r)throw new Ms.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ke(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&zl(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function en(e){let t=e.database||e.schema||nJ,r=Ps()[t];if(!r)throw(0,Ms.handleHDBError)(new Error,sJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Yw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*Kw(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var Ww,X_,Ms,Qw,zw,vs,Np,yp,Jw,sJ,nJ,iJ,oJ,Vw,Ip,jw=ge(()=>{"use strict";Ww=M(kw()),X_=M(Xo()),Ms=M(Z());Se();Qw=M(Ic()),zw=M(Uc()),vs=M(w()),Np=M(On()),yp=M(Us()),Jw=M(z());Ci();Jl();({HDB_ERROR_MSGS:sJ}=Ms.hdb_errors),nJ="data",iJ=1e4,oJ=10,Ip=class extends Ww.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Vw=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,X_.default)(t,"conditions");if(r)throw(0,Ms.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=en(t);if(!s)throw new Ms.ClientError(`Table ${t.table} not found`);let n=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"),s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:wp(t,s),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ms.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ct({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await en(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=en(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){en(t).dropTable()}createSchema(t){return Qc({database:t.schema,table:null}),Np.signalSchemaChange(new yp.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Cp(t.schema),Np.signalSchemaChange(new yp.SchemaEventMsg(process.pid,vs.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,Vw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Qw.default)(t);(0,zw.default)(t,s,r.primaryKey);let n,i=Ps()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ke(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=zl(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Ps()[t.schema][t.table],s={user:t.hdb_user};return Ke(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return Yw(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ps()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ms.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:vs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,Jw.async_set_timeout)(oJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%iJ===0&&await _();return u.length>0&&await _(),n?Yw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,X_.default)(t,"hashes");if(r)throw r;return $w(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of $w(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&vs.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 s=(0,X_.default)(t,"value");if(s)throw s;let n=en(t);if(!n)throw new Ms.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===vs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:wp(t,n)})}async getDataByValue(t,r){let s=new Map,n=en(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){en({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return en(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=en(t),s={};switch(t.search_type){case vs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case vs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Kw(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Kw(r,t.search_values?.[0],t.search_values?.[1])}}};a(wp,"getSelect");a($w,"getRecords");a(en,"getTable");a(Yw,"createDeleteResponse");a(Kw,"groupRecordsInHistory")});var Ds=T((Oue,Zw)=>{"use strict";var{ResourceBridge:aJ}=(jw(),te(Xw)),cJ=j();cJ.initSync();var j_;function uJ(){return j_||(j_=new aJ,j_)}a(uJ,"getBridge");Zw.exports=uJ()});var sC=T((Nue,rC)=>{"use strict";var eC=require("lodash"),zc=require("mathjs"),lJ=require("jsonata"),tC=z();rC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?eC.uniqWith(e,eC.isEqual):e,searchJSON:_J,mad:Jc.bind(null,zc.mad),mean:Jc.bind(null,zc.mean),mode:Jc.bind(null,zc.mode),prod:Jc.bind(null,zc.prod),median:Jc.bind(null,zc.median)};function Jc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Jc,"aggregateFunction");function _J(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(tC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),tC.isEmpty(this.__ala__.res[r])){let s=lJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(_J,"searchJSON")});var iC=T((Iue,nC)=>{"use strict";var ht=require("moment"),Lp="YYYY-MM-DDTHH:mm:ss.SSSZZ";ht.suppressDeprecationWarnings=!0;nC.exports={current_date:()=>ht().utc().format("YYYY-MM-DD"),current_time:()=>ht().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ht(e).utc().format("YYYY");case"month":return ht(e).utc().format("MM");case"day":return ht(e).utc().format("DD");case"hour":return ht(e).utc().format("HH");case"minute":return ht(e).utc().format("mm");case"second":return ht(e).utc().format("ss");case"millisecond":return ht(e).utc().format("SSS");default:break}},date:e=>ht(e).utc().format(Lp),date_format:(e,t)=>ht(e).utc().format(t),date_add:(e,t,r)=>ht(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ht(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ht(e).utc(),n=ht(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ht().utc().valueOf(),get_server_time:()=>ht().format(Lp),offset_utc:(e,t)=>ht(e).utc().utcOffset(t).format(Lp)}});var uC=T((wue,cC)=>{"use strict";var dJ=require("@turf/area"),fJ=require("@turf/length"),EJ=require("@turf/circle"),hJ=require("@turf/difference"),mJ=require("@turf/distance"),pJ=require("@turf/boolean-contains"),SJ=require("@turf/boolean-equal"),TJ=require("@turf/boolean-disjoint"),gJ=require("@turf/helpers"),oC=w(),de=z(),yn=q();cC.exports={geoArea:RJ,geoLength:AJ,geoCircle:OJ,geoDifference:bJ,geoDistance:aC,geoNear:NJ,geoContains:yJ,geoEqual:IJ,geoCrosses:wJ,geoConvert:CJ};function RJ(e){if(de.isEmpty(e))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e));try{return dJ.default(e)}catch(t){return yn.trace(t,e),NaN}}a(RJ,"geoArea");function AJ(e,t){if(de.isEmpty(e))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e));try{return fJ.default(e,{units:t||"kilometers"})}catch(r){return yn.trace(r,e),NaN}}a(AJ,"geoLength");function OJ(e,t,r){if(de.isEmpty(e))return NaN;if(de.isEmpty(t))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e));try{return EJ.default(e,t,{units:r||"kilometers"})}catch(s){return yn.trace(s,e,t),NaN}}a(OJ,"geoCircle");function bJ(e,t){if(de.isEmpty(e))return NaN;if(de.isEmpty(t))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return hJ(e,t)}catch(r){return yn.trace(r,e,t),NaN}}a(bJ,"geoDifference");function aC(e,t,r){if(de.isEmpty(e))return NaN;if(de.isEmpty(t))return NaN;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return mJ.default(e,t,{units:r||"kilometers"})}catch(s){return yn.trace(s,e,t),NaN}}a(aC,"geoDistance");function NJ(e,t,r,s){if(de.isEmpty(e)||de.isEmpty(t))return!1;if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return aC(e,t,s)<=r}catch(n){return yn.trace(n,e,t),!1}}a(NJ,"geoNear");function yJ(e,t){if(de.isEmpty(e)||de.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return pJ.default(e,t)}catch(r){return yn.trace(r,e,t),!1}}a(yJ,"geoContains");function IJ(e,t){if(de.isEmpty(e)||de.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return SJ.default(e,t)}catch(r){return yn.trace(r,e,t),!1}}a(IJ,"geoEqual");function wJ(e,t){if(de.isEmpty(e)||de.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t));try{return!TJ.default(e,t)}catch(r){return yn.trace(r,e,t),!1}}a(wJ,"geoCrosses");function CJ(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(oC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(oC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=de.autoCastJSON(e)),gJ[t](e,r)}a(CJ,"geoConvert")});var Z_=T((Lue,lC)=>{var Ki=sC(),Fr=iC(),tn=uC();lC.exports=e=>{e.aggr.mad=e.aggr.MAD=Ki.mad,e.aggr.mean=e.aggr.MEAN=Ki.mean,e.aggr.mode=e.aggr.MODE=Ki.mode,e.aggr.prod=e.aggr.PROD=Ki.prod,e.aggr.median=e.aggr.MEDIAN=Ki.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ki.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ki.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Fr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Fr.current_time,e.fn.extract=e.fn.EXTRACT=Fr.extract,e.fn.date=e.fn.DATE=Fr.date,e.fn.date_format=e.fn.DATE_FORMAT=Fr.date_format,e.fn.date_add=e.fn.DATE_ADD=Fr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Fr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Fr.date_diff,e.fn.now=e.fn.NOW=Fr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Fr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Fr.get_server_time,e.fn.getdate=e.fn.GETDATE=Fr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Fr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tn.geoNear}});var EC=T((Due,fC)=>{"use strict";var Xc=require("lodash"),ur=require("alasql");ur.options.cache=!1;var LJ=Z_(),_C=require("clone"),ed=require("recursive-iterator"),ae=q(),Ie=z(),ea=Ds(),DJ=w(),{hdb_errors:UJ}=Z(),{getDatabases:dC}=(Se(),te(Ge)),MJ="IS NULL",Bs="There was a problem performing this search. Please check the logs and try again.";LJ(ur);var Dp=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ie.isEmpty(t))throw ae.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),Ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!Ie.isEmptyOrZeroLength(s))return ae.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ae.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ae.error(s),new Error(Bs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ae.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ae.error(s),new Error(Bs)}if(Object.keys(this.data).length===0)return ae.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ae.error("Error thrown from processJoins in SQLSearch class method search."),ae.error(s),new Error(Bs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ae.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ae.error(s),new Error(Bs)}try{return t=await this._finalSQL(),t}catch(s){throw ae.error("Error thrown from finalSQL in SQLSearch class method search."),ae.error(s),new Error(Bs)}}_getColumns(){let t=new ed(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(_C(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Xc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=dC()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ie.isEmpty(this.statement.where)){ae.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ed(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ie.isEmpty(r)&&r.right)if(Ie.isNotEmptyAndHasValue(r.right.value)){let s=Ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new ur.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=Ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ur.yy.LogicValue({value:i}):s instanceof ur.yy.StringValue&&Ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ur.yy.NumValue({value:i}))});if(t){ae.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ed(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Ie.isEmpty(DJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ie.isEmptyOrZeroLength(r.left.columnid)||Ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Ie.isEmpty(r.right.value)||!Ie.isEmpty(r.left.value)?s.add(Ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from)&&Ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Xc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(Ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);Ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&!Ie.isEmptyOrZeroLength(this.columns.columns))return t;if(Ie.isEmptyOrZeroLength(this.all_table_attributes)&&Ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ur.promise(r)}catch(r){throw ae.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ae.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(_C(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(Ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(MJ)>-1&&this.tables.forEach(n=>{let i={columnid:dC()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Xc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!Ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ea.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ae.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ae.error(l),new Error(Bs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ea.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,E))}))}catch(l){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ae.error(l),new Error(Bs)}else if(!Ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ea.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ae.error(l),new Error(Bs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ea.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ae.error(l),new Error(Bs)}}}_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 ur.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new ur.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ur.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new ur.yy.FuncValue:new ur.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await ur.promise(h,t),t=null}catch(E){throw ae.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ae.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Xc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let O=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new ed(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Xc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ae.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ae.error(i),new Error(Bs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ea.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw ae.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ae.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let s;try{let n=this._buildSQL();ae.trace(`Final SQL: ${n}`),s=await ur.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ae.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ae.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ae.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ae.error(UJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ae.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(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ea.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ae.error("There was an error when processing this SQL operation. Check your logs"),ae.error(o),new Error(Bs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};fC.exports=Dp});var as=T((Mue,hC)=>{"use strict";var PJ=nb();hC.exports={searchByConditions:BJ,searchByHash:HJ,searchByValue:xJ,search:FJ};var Up=Ds(),{transformReq:Mp}=z(),vJ=EC();async function BJ(e){return Mp(e),Up.searchByConditions(e)}a(BJ,"searchByConditions");async function HJ(e){Mp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Up.searchByHash(e))r&&t.push(r);return t}a(HJ,"searchByHash");async function xJ(e){Mp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Up.searchByValue(e))t.push(r);return t}a(xJ,"searchByValue");function FJ(e,t){try{let r=new PJ(e);r.validate(),new vJ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(FJ,"search")});var td=T((vue,mC)=>{"use strict";var GJ=Ds();mC.exports={writeTransaction:qJ};function qJ(e,t,r){return GJ.writeTransaction(e,t,r)}a(qJ,"writeTransaction")});var gC=T((xue,TC)=>{"use strict";var kJ=as(),VJ=An(),pC=q(),$J=cs(),Hue=td(),YJ=require("clone"),vp=require("alasql"),KJ=Z_(),SC=require("util"),WJ=SC.promisify(VJ.getTableSchema),QJ=SC.promisify(kJ.search),zJ=w(),Pp=z();KJ(vp);TC.exports={update:XJ};var JJ="There was a problem performing this update. Please check the logs and try again.";async function XJ({statement:e,hdb_user:t}){let r=await WJ(e.table.databaseid,e.table.tableid),s=jJ(e.columns);Pp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=YJ(n),c=Pp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=vp.parse(u).statements[0],l=await QJ(_),d=ZJ(s,l);return e2(o,d,t)}a(XJ,"update");function jJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vp.compile(`SELECT ${r.expression.toString()} AS [${zJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw pC.error(t),new Error(JJ)}}a(jJ,"createUpdateRecord");function ZJ(e,t){return Pp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(ZJ,"buildUpdateRecords");async function e2(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await $J.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){pC.error(`Error delete new_attributes from update response: ${i}`)}return n}a(e2,"updateRecords")});var AC=T((kue,RC)=>{var t2=require("alasql"),r2=as(),s2=q(),n2=Ds(),Hp=require("util"),Bp=z(),i2=w(),o2=An(),Gue=td(),que=cs(),a2="record",c2="successfully deleted",u2=Hp.callbackify(f2),l2=Hp.promisify(r2.search),_2=Hp.promisify(o2.getTableSchema);RC.exports={convertDelete:u2};function d2(e){return`${e.deleted_hashes.length} ${a2}${e.deleted_hashes.length===1?"":"s"} ${c2}`}a(d2,"generateReturnMessage");async function f2({statement:e,hdb_user:t}){let r=await _2(e.table.databaseid,e.table.tableid);Bp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=t2.parse(o).statements[0],u={operation:i2.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await l2(c);let _=await n2.deleteRecords(u);return Bp.isEmptyOrZeroLength(_.message)&&(_.message=d2(_)),delete _.txn_time,_}catch(_){throw s2.error(_),_.hdb_code?_.message:_}}a(f2,"convertDelete")});var IC=T(($ue,yC)=>{"use strict";var E2=Bi(),{hdb_errors:OC}=Z(),{getDatabases:bC}=(Se(),te(Ge));yC.exports={checkSchemaExists:NC,checkSchemaTableExists:h2,schema_describe:E2};async function NC(e){if(!bC()[e])return OC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(NC,"checkSchemaExists");async function h2(e,t){let r=await NC(e);if(r)return r;if(!bC()[e][t])return OC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(h2,"checkSchemaTableExists")});var jc=T((Kue,m2)=>{m2.exports={name:"harperdb",version:"4.3.0-alpha.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.2",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.0",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var id={};ze(id,{addAnalyticsListener:()=>tu,recordAction:()=>Gr,recordActionBinary:()=>us,setAnalyticsEnabled:()=>p2});function p2(e){HC=e}function Gr(e,t,r,s,n){if(!HC)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=nd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},nd.set(i,o)}rd||S2()}function us(e,t,r,s,n){Gr(!!e,t,r,s,n)}function tu(e){GC.push(e)}function S2(){rd=performance.now(),setTimeout(async()=>{let e=performance.now()-rd;rd=0;let t=[],r={time:Date.now(),period:e,threadId:Wi.threadId,metrics:t};for(let[n,i]of nd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of qC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await kC()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Wi.threadId,byThread:!0,...s});for(let n of GC)n(t);nd=new Map,Wi.parentPort?Wi.parentPort.postMessage({type:FC,report:r}):YC({report:r})},xC).unref()}async function T2(e,t=6e4){let r=Gp(),s=VC(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let O of S||[]){let{path:y,method:F,type:K,metric:H,count:D,total:$,distribution:V,threads:W,...re}=O;D||(D=1);let be=H+(y?"-"+y:"");F!==void 0&&(be+="-"+F),K!==void 0&&(be+="-"+K);let ne=o.get(be);if(ne){if(ne.threads){let Te=ne.threads[A];if(Te)ne=Te;else{ne.threads[A]=Object.assign({},re);continue}}ne.count||(ne.count=1);let ot=ne.count;for(let Te in re){let Bt=re[Te];typeof Bt=="number"&&(ne[Te]=(ne[Te]*ot+Bt*D)/(ot+D))}ne.count+=D,$>=0&&(ne.total+=$,ne.ratio=ne.total/ne.count)}else ne=Object.assign({period:t},O),delete ne.distribution,o.set(be,ne),ne.byThread&&(ne.threads=[],ne.threads[A]=Object.assign({},re),u.push(ne));if(V){V=V.map(Te=>typeof Te=="number"?{value:Te,count:1}:Te);let ot=c.get(be);ot?ot.push(...V):c.set(be,V)}}await kC()}for(let h of u){let{path:p,method:S,type:A,metric:O,count:y,total:F,distribution:K,threads:H,...D}=h;H=H.filter($=>$);for(let $ in D){if(typeof h[$]!="number")continue;let V=0;for(let W of H){let re=W[$];typeof re=="number"&&(V+=re)}h[$]=V}h.count=H.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Te,Bt)=>Te.value>Bt.value?1:-1);let A=S.count-1,O=[],y=0,F=0,K;for(let Te of qC){let Bt=A*Te;for(;y<Bt;)K=p[F++],y+=K.count,F===1&&y--;let As=p[F>1?F-2:0];K||(K=p[0]),O.push(K.value-(K.value-As.value)*(y-Bt)/K.count)}let[H,D,$,V,W,re,be,ne,ot]=O;Object.assign(S,{p1:H,p10:D,p25:$,median:V,p75:W,p90:re,p95:be,p99:ne,p999:ot})}let l;for(let[h,p]of o)p.id=(0,sd.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,sd.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-wC,active:E-CC,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}wC=f,CC=E}async function LC(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function Gp(){return DC||(DC=ct({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function VC(){return UC||(UC=ct({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function A2(){$C=!0;let e=(0,eu.get)(Fp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await T2(xC,e),await LC(Gp(),g2),await LC(VC(),R2)},Math.min(e/2,2147483647)).unref()}function YC(e,t){let r=e.report;r.threadId=t?.threadId||Wi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(MC+=s.mean*s.count);r.totalBytesProcessed=MC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(PC.get(t))}),PC.set(t,t.performance.eventLoopUtilization())),r.id=(0,sd.getNextMonotonicTime)(),Gp().primaryStore.put(r.id,r),$C||A2(),O2&&(KC=N2(r))}async function N2(e){if(await KC,!si){let r=(0,Zc.dirname)((0,BC.getLogFilePath)());try{si=await(0,xp.open)((0,Zc.join)(r,"analytics.log"),"r+")}catch{si=await(0,xp.open)((0,Zc.join)(r,"analytics.log"),"w+")}}let t=(await si.stat()).size;if(t>b2){let r=Buffer.alloc(t);await si.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await si.write(r,{position:0}),await si.truncate(r.length),t=r.length}await si.write(JSON.stringify(e)+`
8
- `,t)}var Wi,vC,BC,Zc,xp,sd,eu,Fp,nd,HC,rd,xC,FC,GC,qC,wC,CC,kC,g2,R2,DC,UC,$C,MC,PC,O2,KC,si,b2,ni=ge(()=>{Wi=require("worker_threads"),vC=M(at());Se();BC=M(q()),Zc=require("path"),xp=require("fs/promises"),sd=M(Lr()),eu=M(j()),Fp=M(w());es();(0,eu.initSync)();nd=new Map,HC=(0,eu.get)(Fp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(p2,"setAnalyticsEnabled");a(Gr,"recordAction");Ot.recordAnalytics=Gr;a(us,"recordActionBinary");rd=0,xC=1e3,FC="analytics-report",GC=[];a(tu,"addAnalyticsListener");qC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(S2,"sendAnalytics");a(T2,"aggregation");wC=0,CC=0,kC=a(()=>new Promise(setImmediate),"rest");a(LC,"cleanup");g2=36e5,R2=31536e6;a(Gp,"getRawAnalyticsTable");a(VC,"getAnalyticsTable");(0,vC.setChildListenerByType)(FC,YC);a(A2,"startScheduledTasks");MC=0,PC=new Map,O2=!1;a(YC,"recordAnalytics");b2=1e6;a(N2,"logAnalytics")});var mt=T((ole,dL)=>{"use strict";var Gt=j();Gt.initSync();var y2=require("fs-extra"),I2=require("semver"),nu=require("path"),{monotonicFactory:w2}=require("ulidx"),QC=w2(),C2=require("util"),zC=require("child_process"),L2=C2.promisify(zC.exec),D2=zC.spawn,Re=et(),De=w(),$p=z(),qr=q(),od=Rn(),U2=td(),ru=Cr(),{onMessageByType:M2}=at(),{isMainThread:P2}=require("worker_threads"),{Encoder:v2,decode:Yp}=require("msgpackr"),JC=new v2,{isEmpty:Xi}=$p,XC=Br(),B2=48*36e11,H2=5e9;P2&&M2(De.ITC_EVENT_TYPES.RESTART,()=>{ls=void 0,Ji=void 0});var{connect:x2,StorageType:jC,RetentionPolicy:ZC,AckPolicy:ad,DeliverPolicy:cd,DiscardPolicy:F2,NatsConnection:rle,JetStreamManager:sle,JetStreamClient:nle,StringCodec:ile,JSONCodec:G2,createInbox:Kp,headers:q2,ErrorCode:WC}=require("nats"),{PACKAGE_ROOT:k2}=w(),V2=jc(),{recordAction:$2}=(ni(),te(id)),eL=G2(),Y2="clustering",K2=V2.engines[Re.NATS_SERVER_NAME],W2=nu.join(k2,"dependencies"),Vp=nu.join(W2,`${process.platform}-${process.arch}`,Re.NATS_BINARY_NAME),qp,kp,su,Qi,zi;dL.exports={runCommand:tL,checkNATSServerInstalled:Q2,createConnection:Wp,getConnection:ud,getJetStreamManager:iu,getJetStream:sL,getNATSReferences:lr,getServerList:J2,createLocalStream:Qp,listStreams:nL,deleteLocalStream:X2,getServerConfig:ou,listRemoteStreams:j2,viewStream:Z2,viewStreamIterator:e4,publishToStream:t4,createWorkQueueStream:r4,addSourceToWorkStream:oL,request:n4,removeSourceFromWorkStream:cL,reloadNATS:zp,reloadNATSHub:i4,reloadNATSLeaf:o4,extractServerName:aL,requestErrorHandler:a4,updateWorkStream:c4,createLocalTableStream:lL,createTableStreams:u4,purgeTableStream:_L,purgeSchemaTableStreams:l4,getStreamInfo:_4,updateLocalStreams:f4,closeConnection:z2,getJsmServerName:au,addNatsMsgHeader:iL,updateIngestStreamConsumer:s4,clearClientCache:rL};async function tL(e,t=void 0){let{stdout:r,stderr:s}=await L2(e,{cwd:t});if(s)throw new Error(s.replace(`
6
+ `)},YG="certificate.pem",KG="privateKey.pem",WG="ca.pem";cO.exports={CERTIFICATE_VALUES:$G,CERTIFICATE_PEM_NAME:YG,PRIVATEKEY_PEM_NAME:KG,CA_PEM_NAME:WG}});var et=T((Hie,lO)=>{"use strict";var rr=require("validate.js");rr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||rr.validators.type.checks[t](e)?null:` must be a '${t}' value`};rr.validators.type.checks={Object:function(e){return rr.isObject(e)&&!rr.isArray(e)},Array:rr.isArray,Integer:rr.isInteger,Number:rr.isNumber,String:rr.isString,Date:rr.isDate,Boolean:function(e){return typeof e=="boolean"}};rr.validators.hasValidFileExt=function(e,t){return rr.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};lO.exports={validateObject:QG,validateObjectAsync:zG,validateBySchema:JG};function QG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=rr(e,t,{format:"flat"});return r?new Error(r):null}a(QG,"validateObject");async function zG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await rr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(zG,"validateObjectAsync");function JG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(JG,"validateBySchema")});var fh=T((Fie,hO)=>{"use strict";var EO=require("fs-extra"),ce=require("joi"),XG=require("os"),{boolean:Be,string:Zr,number:Pt,array:dh}=ce.types(),{totalmem:_O}=require("os"),Ii=require("path"),jG=V(),Vl=J(),qie=uO(),dO=M(),ZG=et(),fO="log",ek="components",tk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",rk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",nk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",sk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",ik="rootPath config parameter is undefined",ok="clustering.enabled config parameter is undefined",wi=Pt.min(0).required(),$l=dh.items({host:Zr.required(),port:wi}).empty(null),Vn;hO.exports={configValidator:ak,routesValidator:fk,route_constraints:$l};function ak(e){if(Vn=e.rootPath,Vl.isEmpty(Vn))throw ik;let t=Be.required(),r=Pt.min(0).max(1e3).empty(null).default(dk),n=Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(sc),s=Zr.optional().empty(null),i=Zr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(sc),c=ce.custom(uk).empty(null).default(sc),u=e.clustering?.enabled;if(Vl.isEmpty(u))throw ok;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:wi,routes:$l}).required()}).required(),leafNodes:ce.object({network:ce.object({port:wi}).required()}).required(),network:ce.object({port:wi}).required()}).required(),leafServer:ce.object({network:ce.object({port:wi,routes:$l}).required(),streams:ce.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:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required(),verify:Be.optional()}),user:Zr.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:Be.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Be,cacheTTL:Pt.required(),enableSessions:Be}),analytics:ce.object({aggregatePeriod:Pt}),componentsRoot:n.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Be.optional(),compress:Be.optional(),interval:Zr.custom(_k).optional().empty(null),maxSize:Zr.custom(lk).optional().empty(null),path:Zr.optional().empty(null).default(sc)}).required(),root:n,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Be.optional(),corsAccessList:dh.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(sc),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:wi,securePort:wi,mtls:ce.alternatives([Be.optional(),ce.object({user:Zr.optional(),certificateAuthority:s})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:ce.object({compressionThreshold:Pt.optional(),cors:Be.optional(),corsAccessList:dh.optional(),headersTimeout:Pt.min(1).optional(),port:Pt.min(0).optional().empty(null),securePort:Pt.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:Pt.min(0).optional(),storage:ce.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Be.optional(),noReadAhead:Be.optional(),path:c,prefetchWrites:Be.optional()}).required(),ignoreScripts:Be.optional(),tls:ce.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Zr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(ak,"configValidator");function ck(e){return EO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(ck,"doesPathExist");function uk(e,t){ce.assert(e,Zr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=ck(e);if(r)return t.message(r)}a(uk,"validatePath");function lk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(tk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(nk):e}a(lk,"validateRotationMaxSize");function _k(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(rk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(sk):e}a(_k,"validateRotationInterval");function dk(e,t){let r=t.state.path.join("."),n=XG.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||_O();return i=Math.round(Math.min(i,_O())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),jG.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(dk,"setDefaultThreads");function sc(e,t){let r=t.state.path.join(".");if(!Vl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Vl.isEmpty(Vn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ii.join(Vn,ek);case"logging.root":return Ii.join(Vn,fO);case"clustering.leafServer.streams.path":return Ii.join(Vn,"clustering","leaf");case"storage.path":let n=Ii.join(Vn,dO.LEGACY_DATABASES_DIR_NAME);return EO.existsSync(n)?n:Ii.join(Vn,dO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ii.join(Vn,fO);case"operationsApi.network.domainSocket":return r==null?null:Ii.join(Vn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(sc,"setDefaultRoot");function fk(e){let t=ce.object({routes:$l});return ZG.validateBySchema({routes:e},t)}a(fk,"routesValidator")});var Ci={};Ve(Ci,{server:()=>lt});var mO,lt,nr=Ae(()=>{mO=require("../../index"),lt={};(0,mO._assignPackageExport)("server",lt)});var Lr=T((Vie,NO)=>{"use strict";var Cr=M(),vt=J(),yt=V(),{configValidator:Ek,routesValidator:pO}=fh(),sr=require("fs-extra"),hk=require("yaml"),On=require("path"),mk=require("is-number"),TO=require("properties-reader"),pk=require("lodash"),{handleHDBError:Sk}=Z(),{HTTP_STATUS_CODES:Tk,HDB_ERROR_MSGS:Yl}=Ir(),kie=require("minimist"),{server:gk}=(nr(),ee(Ci)),{DATABASES_PARAM_CONFIG:ic,CONFIG_PARAMS:wr,CONFIG_PARAM_MAP:bn}=Cr,Rk="Unable to get config value because config is uninitialized",Ak="Config successfully initialized",Ok="Error backing up config file",bk="Empty parameter sent to getConfigValue",gO=On.join(Cr.PACKAGE_ROOT,"config","yaml",Cr.HDB_DEFAULT_CONFIG_FILE),Nk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",SO={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"},Kl,It,Wl;NO.exports={createConfigFile:yk,getDefaultConfig:Ik,getConfigValue:AO,initConfig:hh,flattenConfig:Ho,updateConfigValue:OO,updateConfigObject:Ck,getConfiguration:Mk,setConfiguration:Uk,readConfigFile:ph,getClusteringRoutes:Pk,initOldConfig:bO,getConfigFromFile:vk,getConfigFilePath:Li,addConfig:Bk,deleteConfigFromFile:Hk,getConfigObj:xk};function yk(e){let t=Qs(gO);Kl=Ho(t.toJSON());let r;for(let o in e){let c=bn[o.toLowerCase()];if(c===wr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Eh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){yt.error(l)}}}r&&RO(t,r),mh(t);let n=t.toJSON();It=Ho(n);let s=t.getIn(["rootPath"]),i=On.join(s,Cr.HDB_CONFIG_FILE);sr.createFileSync(i),sr.writeFileSync(i,String(t)),yt.trace(`Config file written to ${i}`)}a(yk,"createConfigFile");function RO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!vt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(ic.TABLES))for(let i in n[s][ic.TABLES])for(let o in n[s][ic.TABLES][i]){let c=n[s][ic.TABLES][i][o],u=[wr.DATABASES,s,ic.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[wr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){yt.error("Error parsing schemas CLI/env config arguments",n)}}a(RO,"setSchemasConfig");function Ik(e){if(Kl===void 0){let r=Qs(gO);Kl=Ho(r.toJSON())}let t=bn[e.toLowerCase()];if(t!==void 0)return Kl[t.toLowerCase()]}a(Ik,"getDefaultConfig");function AO(e){if(e==null){yt.error(bk);return}if(It===void 0){yt.trace(Rk);return}let t=bn[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(AO,"getConfigValue");function Li(e=vt.getPropsFilePath()){let t=vt.getEnvCliRootPath();return t?On.join(t,Cr.HDB_CONFIG_FILE):TO(e).get(Cr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Li,"getConfigFilePath");function hh(e=!1){if(It===void 0||e){let t;if(!vt.noBootFile()){t=vt.getPropsFilePath();try{sr.accessSync(t,sr.constants.F_OK|sr.constants.R_OK)}catch(i){throw yt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Li(t),n;if(r.includes("config/settings.js"))try{bO(r);return}catch(i){if(i.code!==Cr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Qs(r)}catch(i){if(i.code===Cr.NODE_ERROR_CODES.ENOENT){yt.trace(`HarperDB config file not found at ${r}.
7
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw yt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}wk(n,r),mh(n);let s=n.toJSON();if(gk.config=s,It=Ho(s),It.logging_rotation_rotate)for(let i in SO)It[i]&&yt.error(`Config ${SO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);yt.trace(Ak)}}a(hh,"initConfig");function wk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],On.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],On.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],On.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(yt.trace("Updating config file with missing config params"),sr.writeFileSync(t,String(e)))}a(wk,"checkForUpdatedConfig");function mh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=Ek(t);if(r.error)throw Yl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(mh,"validateConfig");function Ck(e,t){It===void 0&&(It={});let r=bn[e.toLowerCase()];if(r===void 0){yt.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(Ck,"updateConfigObject");function OO(e,t,r=void 0,n=!1,s=!1,i=!1){It===void 0&&hh();let o=AO(bn.hdb_root),c=On.join(o,Cr.HDB_CONFIG_FILE),u=Qs(c),_;if(r===void 0&&e.toLowerCase()===wr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=bn[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Eh(f,t);u.setIn([...E],h)}else for(let f in r){let E=bn[f.toLowerCase()];if(E===wr.HTTP_SECUREPORT&&r[f]===It[wr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===wr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===It[wr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===wr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Cr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=Eh(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(A){yt.error(A)}}}_&&RO(u,_),mh(u);let l=u.getIn(["rootPath"]),d=On.join(l,Cr.HDB_CONFIG_FILE);n===!0&&Lk(c,l),sr.writeFileSync(d,String(u)),s&&(It=Ho(u.toJSON())),yt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(OO,"updateConfigValue");function Lk(e,t){try{let r=On.join(t,"backup",`${Cr.HDB_CONFIG_FILE}.bak`);sr.copySync(e,r),yt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){yt.error(Ok),yt.error(r)}}a(Lk,"backupConfigFile");var Dk=["databases"];function Ho(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)),Wl=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])&&!Dk.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!wr[u.toUpperCase()]&&bn[u]&&(s[bn[u].toLowerCase()]=o[c]),s[u]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(Ho,"flattenConfig");function Eh(e,t){if(e===wr.CLUSTERING_NODENAME||e===wr.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(mk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||vt.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 vt.autoCast(t)}a(Eh,"castConfigValue");function Mk(){let e=vt.getPropsFilePath(),t=Li(e);return Qs(t).toJSON()}a(Mk,"getConfiguration");async function Uk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return OO(void 0,void 0,s,!0),Nk}catch(i){throw typeof i=="string"||i instanceof String?Sk(i,i,Tk.BAD_REQUEST,void 0,void 0,!0):i}}a(Uk,"setConfiguration");function ph(){let e=vt.getPropsFilePath();try{sr.accessSync(e,sr.constants.F_OK|sr.constants.R_OK)}catch(n){if(!vt.noBootFile())throw yt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Li(e);return Qs(t).toJSON()}a(ph,"readConfigFile");function Qs(e){return hk.parseDocument(sr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Qs,"parseYamlDoc");function Pk(){let e=ph(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=vt.isEmptyOrZeroLength(t)?[]:t;let r=pO(t);if(r)throw Yl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=vt.isEmptyOrZeroLength(n)?[]:n;let s=pO(n);if(s)throw Yl.CONFIG_VALIDATION(s.message);if(!vt.isEmptyOrZeroLength(n)&&!vt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!vt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Yl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Pk,"getClusteringRoutes");function bO(e){let t=TO(e);It={};for(let r in bn){let n=t.get(r.toUpperCase());if(vt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=bn[r].toLowerCase();s===wr.LOGGING_ROOT?It[s]=On.dirname(n):It[s]=n}return It}a(bO,"initOldConfig");function vk(e){let t=ph();return pk.get(t,e.replaceAll("_","."))}a(vk,"getConfigFromFile");async function Bk(e,t){let r=Qs(Li());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await sr.writeFile(Li(),String(r))}a(Bk,"addConfig");function Hk(e){let t=Li(vt.getPropsFilePath()),r=Qs(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=On.join(n,Cr.HDB_CONFIG_FILE);sr.writeFileSync(s,String(r))}a(Hk,"deleteConfigFromFile");function xk(){return Wl||(hh(),Wl)}a(xk,"getConfigObj")});var j=T((Yie,CO)=>{"use strict";var Sh=require("fs-extra"),Di=require("path"),yO=require("os"),qk=require("properties-reader"),ac=V(),oc=J(),ae=M(),Ql=Lr(),Fk="Error initializing environment manager",zl="BOOT_PROPS_FILE_PATH",IO=!1,Gk={[ae.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ps={};CO.exports={BOOT_PROPS_FILE_PATH:zl,getHdbBasePath:kk,setHdbBasePath:Vk,get:wO,initSync:Yk,setProperty:Ce,initTestEnvironment:Kk};function kk(){return ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(kk,"getHdbBasePath");function Vk(e){ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Vk,"setHdbBasePath");function wO(e){let t=Ql.getConfigValue(e);return t===void 0?ps[e]:t}a(wO,"get");function Ce(e,t){Gk[e]&&(ps[e]=t),Ql.updateConfigObject(e,t)}a(Ce,"setProperty");function $k(){let e;try{e=oc.getPropsFilePath(),Sh.accessSync(e,Sh.constants.F_OK|Sh.constants.R_OK),IO=!0;let t=qk(e);return ps[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),ps[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ps[zl]=e,!0}catch{return ac.trace(`Environment manager found no properties file at ${e}`),!1}}a($k,"doesPropFileExist");function Yk(e=!1){try{(IO||$k()||oc.noBootFile())&&(Ql.initConfig(e),ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ql.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ac.error(Fk),ac.error(t),console.error(t),process.exit(1)}}a(Yk,"initSync");function Kk(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,u=Di.join(__dirname,"../../","unitTests");ps[zl]=Di.join(u,"hdb_boot_properties.file"),Ce(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Di.join(u,"settings.test")),Ce(ae.HDB_SETTINGS_NAMES.INSTALL_USER,yO.userInfo()?yO.userInfo().username:void 0),Ce(ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ce(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Di.join(u,"envDir","log")),Ce(ae.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ce(ae.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ce(ae.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ce(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Di.join(u,"envDir")),Ce(ae.CONFIG_PARAMS.STORAGE_PATH,Di.join(u,"envDir")),s&&(Ce(ae.CONFIG_PARAMS.HTTP_SECUREPORT,wO(ae.CONFIG_PARAMS.HTTP_PORT)),Ce(ae.CONFIG_PARAMS.HTTP_PORT,null)),Ce(ae.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ce(ae.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ce(ae.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,oc.isEmpty(i)?!1:i),Ce(ae.CONFIG_PARAMS.HTTP_CORS,oc.isEmpty(i)?!1:i),Ce(ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ce(ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ce(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Di.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ce(ae.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,oc.isEmpty(c)?!1:c),o&&(Ce("CORS_ACCESSLIST",o),Ce(ae.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ce(ae.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ce(ae.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ce(ae.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ce(ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${zl}. Please check your boot props and settings files`;ac.fatal(r),ac.error(t)}}a(Kk,"initTestEnvironment")});var We=T((Wie,BO)=>{"use strict";var dc=M(),Wk=J(),ir=j(),fc=require("path"),Qk=require("minimist"),LO=require("fs-extra"),DO=require("lodash");ir.initSync();var{CONFIG_PARAMS:zs,DATABASES_PARAM_CONFIG:cc,SYSTEM_SCHEMA_NAME:Jl}=dc,uc,lc,_c;function MO(){if(uc!==void 0)return uc;if(ir.getHdbBasePath()!==void 0)return uc=ir.get(zs.STORAGE_PATH)||fc.join(ir.getHdbBasePath(),dc.DATABASES_DIR_NAME),uc}a(MO,"getBaseSchemaPath");function UO(){if(lc!==void 0)return lc;if(ir.getHdbBasePath()!==void 0)return lc=vO(Jl),lc}a(UO,"getSystemSchemaPath");function PO(){if(_c!==void 0)return _c;if(ir.getHdbBasePath()!==void 0)return _c=ir.get(dc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||fc.join(ir.getHdbBasePath(),dc.TRANSACTIONS_DIR_NAME),_c}a(PO,"getTransactionAuditStoreBasePath");function zk(e,t){let r=ir.get(zs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||fc.join(PO(),e.toString())}a(zk,"getTransactionAuditStorePath");function vO(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(dc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||fc.join(MO(),e)}a(vO,"getSchemaPath");function Jk(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Qk(process.argv));let n=r[zs.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[Jl];if(!c)continue;let u=ir.get(zs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[cc.PATH];if(_)return DO.set(u,[Jl,cc.TABLES,t,cc.PATH],_),ir.setProperty(zs.DATABASES,u),_;let l=c?.[cc.PATH];if(l)return DO.set(u,[Jl,cc.PATH],l),ir.setProperty(zs.DATABASES,u),l}}let s=r[zs.STORAGE_PATH.toUpperCase()];if(s){if(!LO.pathExistsSync(s))throw new Error(s+" does not exist");let i=fc.join(s,e);return LO.mkdirsSync(i),ir.setProperty(zs.STORAGE_PATH,s),i}return UO()}a(Jk,"initSystemSchemaPaths");function Xk(){uc=void 0,lc=void 0,_c=void 0}a(Xk,"resetPaths");BO.exports={getBaseSchemaPath:MO,getSystemSchemaPath:UO,getTransactionAuditStorePath:zk,getTransactionAuditStoreBasePath:PO,getSchemaPath:vO,initSystemSchemaPaths:Jk,resetPaths:Xk}});var Dr=T((Xie,GO)=>{"use strict";var jk=Ir().LMDB_ERRORS_ENUM,zie=require("lmdb"),Zk=ht(),Jie=require("buffer").Buffer,{OVERFLOW_MARKER:HO,MAX_SEARCH_KEY_LENGTH:Xl}=Zk,xO=["number","string","symbol","boolean","bigint"];function eV(e){if(e=e?.primaryStore||e,!e)throw new Error(jk.ENV_REQUIRED)}a(eV,"validateEnv");function tV(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(tV,"stringifyData");function rV(e){return e instanceof Date?e.valueOf():e}a(rV,"convertKeyValueToWrite");function nV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(xO.includes(typeof e))return e.length>Xl?[e.slice(0,Xl)+HO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(xO.includes(typeof i))i.length>Xl?r.push(i.slice(0,Xl)+HO):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(nV,"getIndexedValues");var jl=0,qO=0;function FO(){qO=Date.now()-performance.now()}a(FO,"adjustStartTime");FO();var sV=6e4;setInterval(FO,sV).unref();function iV(){let e=performance.now()+qO;return e>jl?(jl=e,e):(jl+=488e-6,jl)}a(iV,"getNextMonotonicTime");GO.exports={validateEnv:eV,stringifyData:tV,convertKeyValueToWrite:rV,getNextMonotonicTime:iV,getIndexedValues:nV}});var kO,Nn,Th,Ec=Ae(()=>{kO=require("events"),Nn=class extends kO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Th;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)}},Th=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 Rh={};Ve(Rh,{loadGQLSchema:()=>cV,start:()=>gh,startOnMainThread:()=>aV});function gh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=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 u.OBJECT_TYPE_DEFINITION:let K=function(q){if(q.kind==="NonNullType"){let Y=K(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:K(q.type)};let Q={type:q.name?.value};return Object.defineProperty(Q,"location",{value:q.loc.startToken}),Q};a(K,"getProperty");let A=S.name.value,I=[],w={table:null,database:null,properties:I};f.set(A,w);for(let q of S.directives){if(q.name.value==="table"){for(let P of q.arguments)w[P.name.value]=P.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=A),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,E.push(w)}if(q.name.value==="sealed"&&(w.sealed=!0),q.name.value==="export"){w.export=!0;for(let P of q.arguments)P.name.value==="name"&&(w.export={name:P.value.value})}}let B=!1;for(let q of S.fields){let P=K(q.type);P.name=q.name.value,I.push(P);for(let Q of q.directives)if(Q.name.value==="primaryKey")B?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,B=!0);else if(Q.name.value==="indexed")P.indexed=!0;else if(Q.name.value==="relationship"){let Y={};for(let z of Q.arguments)Y[z.name.value]=z.value.value;P.relationship=Y}else if(Q.name.value==="createdTime")P.assignCreatedTime=!0;else if(Q.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(Q.name.value==="expiresAt")P.expiresAt=!0;else if(Q.name.value==="allow"){let Y=P.authorizedRoles=[];for(let z of Q.arguments)z.name.value==="role"&&Y.push(z.value.value)}}w.type=A,A==="Query"&&(h=w)}function p(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?p(S.elements):oV.includes(S.type)||(0,VO.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Zl.dirname)(n),S.tableClass):i.set((0,Zl.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Zl.dirname)(n)+"/"+S.name,A.tableClass)}}}var Zl,VO,oV,aV,cV,$O=Ae(()=>{Zl=require("path");ge();VO=v(tt()),oV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(gh,"start");aV=gh,cV=gh({ensureTable:_t}).handleFile});async function e_(e){return uV?(hc||(hc=lV(dV)),(await(await hc).import(e)).namespace):import(e)}async function lV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),hc=new Compartment({console,Math,Date,fetch:_V,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,KO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qt,tables:Mr,databases:rt})}};let n=await(0,YO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),hc}function _V(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 dV(){return{Resource:qt,tables:Mr}}var YO,KO,uV,hc,Ah=Ae(()=>{yn();ge();YO=require("fs/promises"),KO=require("path"),uV=!1;a(e_,"secureImport");a(lV,"getCompartment");a(_V,"secureOnlyFetch");a(dV,"getGlobalVars")});var bh={};Ve(bh,{handleFile:()=>fV});async function fV(e,t,r,n){let s=new Map,i=(0,WO.pathToFileURL)(r).toString(),o=await e_(i);u(o.default)&&n.set((0,Oh.dirname)(t),o.default),c(o,(0,Oh.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?n.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),s}var WO,Oh,QO=Ae(()=>{WO=require("url");Ah();Oh=require("path");a(fV,"handleFile")});var yh={};Ve(yh,{start:()=>EV});function EV({resources:e}){e.set("login",Nh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Nh,zO=Ae(()=>{yn();a(EV,"start");Nh=class extends qt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var rb={};Ve(rb,{parse:()=>wh,streamAsJSON:()=>mc,stringify:()=>Mi});function mc(e){return new Ih({value:e})}function JO(e){return console.error(e),JSON.stringify(e.toString())}function XO(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Mi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===eb)return tb(e);if(t.resolution)return t.resolution.then(()=>Mi(e));throw t}}function tb(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+=tb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Mi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function wh(e){return pV.test(e)?hV.parse(e):JSON.parse(e)}var jO,ZO,hV,mV,eb,Ih,pV,Ch=Ae(()=>{jO=require("stream"),ZO=v(require("json-bigint-fixes")),hV=(0,ZO.default)({useNativeBigInt:!0}),mV=1e4,eb={};BigInt.prototype.toJSON=function(){throw eb};a(mc,"streamAsJSON");Ih=class extends jO.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),JO)}catch(s){yield JO(s)}else yield Mi(t)}else yield Mi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);XO(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>mV?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 XO(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(JO,"handleError");a(XO,"when");a(Mi,"stringify");a(tb,"jsStringify");pV=/-?\d{16,}/;a(wh,"parse")});var hb=T((foe,Eb)=>{"use strict";var Lh=require("recursive-iterator"),SV=require("alasql"),Dh=require("clone"),nb=J(),{handleHDBError:sb,hdb_errors:TV}=Z(),{HDB_ERROR_MSGS:ib,HTTP_STATUS_CODES:ob}=TV,{getDatabases:gV}=(ge(),ee(xe)),RV=["DISTINCT_ARRAY"],ab=Symbol("validateTables"),Mh=Symbol("validateTable"),doe=Symbol("getAllColumns"),cb=Symbol("validateAllColumns"),t_=Symbol("findColumn"),ub=Symbol("validateOrderBy"),pc=Symbol("validateSegment"),Uh=Symbol("validateColumn"),lb=Symbol("setColumnsForTable"),_b=Symbol("checkColumnsForAsterisk"),db=Symbol("validateGroupBy"),fb=Symbol("hasColumns"),Ph=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ab](),this[_b](),this[cb]()}[ab](){if(this[fb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mh](t.table)})}}[fb](){let t=!1,r=new Lh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Mh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=gV();if(!r[t.databaseid])throw sb(new Error,ib.SCHEMA_NOT_FOUND(t.databaseid),ob.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw sb(new Error,ib.TABLE_NOT_FOUND(t.databaseid,t.tableid),ob.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Dh(s);i.table=Dh(t),this.attributes.push(i)})}[t_](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)}[_b](){let t=new Lh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[lb](r.tableid)}[lb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new SV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[cb](){this[pc](this.statement.columns,!1),this[pc](this.statement.joins,!1),this[pc](this.statement.where,!1),this[db](this.statement.group,!1),this[pc](this.statement.order,!0)}[pc](t,r){if(!t)return;let n=new Lh(t),s=[];for(let{node:i,path:o}of n)!nb.isEmpty(i)&&!nb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ub](i):s.push(this[Uh](i)));return s}[db](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&RV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Dh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[t_](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[t_](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`}[ub](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[Uh](t)}[Uh](t){let r=this[t_](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]}};Eb.exports=Ph});var pb=T((hoe,mb)=>{"use strict";var vh=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")}};mb.exports=vh});var Tb=T((poe,Sb)=>{"use strict";var Bh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Sb.exports=Bh});var bb={};Ve(bb,{HAS_EXPIRATION:()=>kh,LAST_TIMESTAMP_PLACEHOLDER:()=>gc,LOCAL_TIMESTAMP:()=>AV,METADATA:()=>Sc,NO_TIMESTAMP:()=>Hh,PENDING_LOCAL_TIME:()=>Vh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Gh,RecordEncoder:()=>Fh,TIMESTAMP_ASSIGN_LAST:()=>bV,TIMESTAMP_ASSIGN_NEW:()=>Ab,TIMESTAMP_ASSIGN_PREVIOUS:()=>Ob,TIMESTAMP_PLACEHOLDER:()=>r_,TIMESTAMP_RECORD_PREVIOUS:()=>xh,getUpdateRecord:()=>$h,handleLocalTimeForGets:()=>o_});function yV(){return Tc[0]=Tc[0]^64,OV.getFloat64(0)}function o_(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),u=c?.value,_=u?.[Sc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Sc]>=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 u=c.value,_=u[Sc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.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,Ui.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ui.length;u++){let _=Ui[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ui.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function $h(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?xo=i?.localTime?xh|Ob:Hh:xo=u?i?.localTime?xh|16384:Ab|16384:Hh,l>0&&(c|=kh),s_=c,qh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:xo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let A=_?.user?.username;if(E&&(n_=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,w=r.get(I);if(w){let B=Bt(w).previousLocalTime;return r.put(I,i_(o,t,n,B,A,d,n_),{ifVersion:p}),S}}r.put(gc,i_(o,t,n,i?.localTime?1:0,A,d,n_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var gb,Rb,r_,gc,Gh,AV,Sc,Tc,OV,Hh,Ab,bV,Ob,xh,kh,Vh,NV,n_,xo,s_,qh,Fh,goe,Ui,Rc=Ae(()=>{gb=require("msgpackr");Pi();Rb=v(V()),r_=new Uint8Array([1,1,1,1,4,64,0,0]),gc=new Uint8Array([1,1,1,1,1,0,0,0]),Gh=new Uint8Array([1,1,1,1,3,64,0,0]),AV=Symbol("local-timestamp"),Sc=Symbol("metadata"),Tc=new Uint8Array(8),OV=new DataView(Tc.buffer,0,8),Hh=0,Ab=0,bV=1,Ob=3,xh=4,kh=16,Vh=1,xo=0,s_=-1,qh=0,Fh=class extends gb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(xo||s_>=0){let i=0,o=xo;o&&(i+=8,xo=0);let c=s_,u=qh;c>=0&&(i+=2,s_=-1,u&&(i+=8,qh=0));let _=NV=r.call(this,n,s|2048|i);n_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(r_[4]=o,r_[5]=o>>8,_.set(r_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,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,u;if(i===2){if(t.copy)t.copy(Tc,0,c),c+=8;else for(let d=0;d<8;d++)Tc[d]=t[c++];u=yV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&kh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Sc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(yV,"getTimestamp");goe=Map.prototype.get;a(o_,"handleLocalTimeForGets");Ui=[];setInterval(()=>{for(let e=0;e<Ui.length;e++){let t=Ui[e].deref();!t||t.isDone||t.isCommitted?Ui.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Rb.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($h,"getUpdateRecord")});var a_=T((Aoe,Nb)=>{"use strict";var Kh=j(),Wh=M(),{RecordEncoder:IV}=(Rc(),ee(bb));Kh.initSync();var wV=Kh.get(Wh.CONFIG_PARAMS.STORAGE_COMPRESSION),CV=Kh.get(Wh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,LV=Wh.UPDATES_PROPERTY,Yh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=wV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=CV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:IV},this.alwaysLazyProperty=n=>n===LV)}};Nb.exports=Yh});var u_=T((boe,Ib)=>{"use strict";var qo=j(),Ac=M();qo.initSync();var DV=qo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qo.get(Ac.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",yb=qo.get(Ac.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),MV=qo.get(Ac.CONFIG_PARAMS.STORAGE_NOREADAHEAD),c_=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=DV,this.noFSAccess=!0,yb!==void 0&&(this.overlappingSync=yb),this.noReadAhead=MV}};Ib.exports=c_;c_.MAX_DBS=1e4});var $e=T((yoe,Hb)=>{"use strict";var zh=require("lmdb"),In=require("fs-extra"),Ur=require("path"),l_=Dr(),Lb=V(),or=Ir().LMDB_ERRORS_ENUM,__=Tb(),Jh=a_(),Db=u_(),Js=ht(),wb=M(),{table:UV,resetDatabases:PV}=(ge(),ee(xe)),Cb=j(),wn=Js.INTERNAL_DBIS_NAME,Mb=Js.DBI_DEFINITION_NAME,vV="data.mdb",BV="lock.mdb",Oc=".mdb",HV="-lock",Qh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=en(t,r),this.key_type=this.dbi[Js.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Js.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new zh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function d_(e,t){if(e===void 0)throw new Error(or.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(or.ENV_NAME_REQUIRED)}a(d_,"pathEnvNameValidation");async function Xh(e,t,r=!0){try{await In.access(e)}catch(n){throw n.code==="ENOENT"?new Error(or.INVALID_BASE_PATH):n}try{let n=Ur.join(e,t+Oc);return await In.access(n,In.constants.R_OK|In.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await In.access(Ur.join(e,t,vV),In.constants.R_OK|In.constants.F_OK),Ur.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(or.INVALID_ENVIRONMENT)}else throw new Error(or.INVALID_ENVIRONMENT);throw n}}a(Xh,"validateEnvironmentPath");function f_(e,t){if(l_.validateEnv(e),t===void 0)throw new Error(or.DBI_NAME_REQUIRED)}a(f_,"validateEnvDBIName");async function xV(e,t,r=!1,n=!1){d_(e,t);let s=Ur.basename(e);t=t.toString();let i=Cb.get(wb.CONFIG_PARAMS.DATABASES);i||Cb.setProperty(wb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Xh(e,t,n),Ub(e,t,r)}catch(o){if(o.message===or.INVALID_ENVIRONMENT){let c=Ur.join(e,t);await In.mkdirp(n?c:e);let u=new Db(n?c:c+Oc,!1),_=zh.open(u);_.dbis=Object.create(null);let l=new Jh(!1);_.openDB(wn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=jh(e,t,r);return _[Js.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(xV,"createEnvironment");async function qV(e,t,r,n=!0){d_(e,t),t=t.toString();let s=Ur.join(e,t);return UV({table:t,database:Ur.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(qV,"copyEnvironment");async function Ub(e,t,r=!1){d_(e,t),t=t.toString();let n=jh(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 Xh(e,t),i=Ur.join(e,t+Oc),o=s!=i,c=new Db(s,o),u=zh.open(c);u.dbis=Object.create(null);let _=vb(u);for(let l=0;l<_.length;l++)en(u,_[l]);return u[Js.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(Ub,"openEnvironment");async function FV(e,t,r=!1){d_(e,t),t=t.toString();let n=Ur.join(e,t+Oc),s=await Xh(e,t);if(global.lmdb_map!==void 0){let i=jh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Pb(o),delete global.lmdb_map[i]}}await In.remove(s),await In.remove(s===n?s+HV:Ur.join(Ur.dirname(s),BV))}a(FV,"deleteEnvironment");async function Pb(e){l_.validateEnv(e);let t=e[Js.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Pb,"closeEnvironment");function jh(e,t,r=!1){let s=`${Ur.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(jh,"getCachedEnvironmentName");function GV(e){l_.validateEnv(e);let t=Object.create(null),r=en(e,wn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==wn)try{t[n]=Object.assign(new __,s)}catch{Lb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(GV,"listDBIDefinitions");function vb(e){l_.validateEnv(e);let t=[],r=en(e,wn);for(let{key:n}of r.getRange({start:!1}))n!==wn&&t.push(n);return t}a(vb,"listDBIs");function kV(e,t){let n=en(e,wn).getEntry(t),s=new __;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Lb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(kV,"getDBIDefinition");function Bb(e,t,r,n=!r){if(f_(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return en(e,t)}catch(s){if(s.message===or.DBI_DOES_NOT_EXIST){let i=new Jh(r,n===!0),o=e.openDB(t,i),c=new __(r===!0,n);return o[Mb]=c,en(e,wn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Bb,"createDBI");function en(e,t){if(f_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==wn?r=kV(e,t):r=new __,r===void 0)throw new Error(or.DBI_DOES_NOT_EXIST);let n;try{let s=new Jh(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(or.DBI_DOES_NOT_EXIST):s}return n[Mb]=r,e.dbis[t]=n,n}a(en,"openDBI");function VV(e,t){f_(e,t),t=t.toString();let r=en(e,t),n=r.getStats();return r[Js.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(VV,"statDBI");async function $V(e,t){try{let r=Ur.join(e,t+Oc);return(await In.stat(r)).size}catch{throw new Error(or.INVALID_ENVIRONMENT)}}a($V,"environmentDataSize");function YV(e,t){if(f_(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_DROP_INTERNAL_DBIS_NAME);en(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],en(e,wn).removeSync(t)}a(YV,"dropDBI");function KV(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{en(e,i)}catch(o){if(o.message===or.DBI_DOES_NOT_EXIST)Bb(e,i,i!==t,i===t),n=!0;else throw o}}n&&PV()}a(KV,"initializeDBIs");Hb.exports={openDBI:en,openEnvironment:Ub,createEnvironment:xV,listDBIs:vb,listDBIDefinitions:GV,createDBI:Bb,dropDBI:YV,statDBI:VV,deleteEnvironment:FV,initializeDBIs:KV,TransactionCursor:Qh,environmentDataSize:$V,copyEnvironment:qV,closeEnvironment:Pb}});var qb=T((woe,xb)=>{"use strict";var Zh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};xb.exports=Zh});var Gb=T((Loe,Fb)=>{"use strict";var em=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}};Fb.exports=em});var Vb=T((Moe,kb)=>{"use strict";var tm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};kb.exports=tm});var Fo=T((Hoe,Kb)=>{"use strict";var WV=$e(),QV=qb(),zV=Gb(),JV=Vb(),$n=Dr(),bc=Ir().LMDB_ERRORS_ENUM,XV=ht(),Ss=M(),jV=J(),ZV=require("uuid"),Poe=require("lmdb"),{handleHDBError:e$,hdb_errors:t$}=Z(),{OVERFLOW_MARKER:voe,MAX_SEARCH_KEY_LENGTH:Boe}=XV,$b=j();$b.initSync();var E_=$b.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rm=Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME,vi=Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function r$(e,t,r,n,s=$n.getNextMonotonicTime()){om(e,t,r,n),nm(e,t,r);let i=new QV,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Yb(_,!0,s);let l=n$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return sm(o,c,n,i,s)}a(r$,"insertRecords");function n$(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 l=c([[{}]]);Array.isArray(l)&&(c=l[0][Ss.FUNC_VAL],n[o]=c)}let u=$n.getIndexedValues(c),_=e.dbis[o];if(u){E_&&_.prefetch(u.map(l=>({key:l,value:s})),h_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}E_&&e.dbis[t].prefetch([s],h_),e.dbis[t].put(s,n,n[vi])})}a(n$,"insertRecord");function s$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(s$,"removeSkippedRecords");function Yb(e,t,r){let n=r>0;(n||!Number.isInteger(e[vi]))&&(e[vi]=r||(r=$n.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[rm]))&&(e[rm]=r||$n.getNextMonotonicTime()):delete e[rm]}a(Yb,"setTimestamps");function nm(e,t,r){r.indexOf(Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),WV.initializeDBIs(e,t,r)}a(nm,"initializeTransaction");async function i$(e,t,r,n,s=$n.getNextMonotonicTime()){om(e,t,r,n),nm(e,t,r);let i=new zV,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=im(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return sm(c,u,n,i,s,o)}a(i$,"updateRecords");async function o$(e,t,r,n,s=$n.getNextMonotonicTime()){try{om(e,t,r,n)}catch(u){throw e$(u,u.message,t$.HTTP_STATUS_CODES.BAD_REQUEST)}nm(e,t,r);let i=new JV,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;jV.isEmpty(_[t])?(l=ZV.v4(),_[t]=l):l=_[t];let d=im(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return sm(o,c,n,i,s)}a(o$,"upsertRecords");async function sm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||$n.getNextMonotonicTime(),s$(r,i),n}a(sm,"finalizeWrite");function im(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Yb(r,!l,o),Number.isInteger(r[vi])&&_[vi]>r[vi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let w=p([[_]]);Array.isArray(w)&&(p=w[0][Ss.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=$n.getIndexedValues(A);if(I){E_&&S.prefetch(I.map(w=>({key:w,value:n})),h_);for(let w=0,B=I.length;w<B;w++)S.remove(I[w],n)}if(I=$n.getIndexedValues(p),I){E_&&S.prefetch(I.map(w=>({key:w,value:n})),h_);for(let w=0,B=I.length;w<B;w++)S.put(I[w],n)}}let E=Object.assign({},_,r);c.put(n,E,E[vi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:im(e,t,r,n,s,i,o))}a(im,"updateUpsertRecord");function a$(e,t,r){if($n.validateEnv(e),t===void 0)throw new Error(bc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bc.WRITE_ATTRIBUTES_REQUIRED):new Error(bc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(a$,"validateBasic");function om(e,t,r,n){if(a$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(bc.RECORDS_REQUIRED):new Error(bc.RECORDS_MUST_BE_ARRAY)}a(om,"validateWrite");function h_(){}a(h_,"noop");Kb.exports={insertRecords:r$,updateRecords:i$,upsertRecords:o$}});var Bi=T((qoe,c$)=>{c$.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Kn=T((Foe,zb)=>{"use strict";var Qb=J(),Wb=M(),Go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Yn=require("joi"),Xs={schema_format:{pattern:Go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},u$=Yn.alternatives(Yn.string().min(1).max(Xs.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Yn.number(),Yn.array()).required(),l$=Yn.alternatives(Yn.string().min(1).max(Xs.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Yn.number()),_$=Yn.alternatives(Yn.string().min(1).max(Xs.schema_length.maximum).pattern(Go).messages({"string.pattern.base":"{:#label} "+Xs.schema_format.message}),Yn.number()).required();function d$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Xs.schema_length.maximum?`'${e}' maximum of 250 characters`:Go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(d$,"checkValidTable");function f$(e,t){return Qb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(f$,"validateSchemaExists");function E$(e,t){let r=t.state.ancestors[0].schema;return Qb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(E$,"validateTableExists");function h$(e,t){return e.toLowerCase()===Wb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Wb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(h$,"validateSchemaName");zb.exports={common_validators:Xs,schema_regex:Go,hdb_schema_table:u$,validateSchemaExists:f$,validateTableExists:E$,validateSchemaName:h$,checkValidTable:d$,hdb_database:l$,hdb_table:_$}});var m_=T((koe,Jb)=>{var{common_validators:Wn}=Kn(),yc=et(),Nc="is required",mt={database:{presence:!1,format:Wn.schema_format,length:Wn.schema_length},schema:{presence:!1,format:Wn.schema_format,length:Wn.schema_length},table:{presence:!0,format:Wn.schema_format,length:Wn.schema_length},attribute:{presence:!0,format:Wn.schema_format,length:Wn.schema_length},hash_attribute:{presence:!0,format:Wn.schema_format,length:Wn.schema_length}};function Ic(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(Ic,"makeAttributesStrings");function m$(e){return e=Ic(e),mt.table.presence=!1,mt.attribute.presence=!1,mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(m$,"schema_object");function p$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(p$,"table_object");function S$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence=!1,yc.validateObject(e,mt)}a(S$,"create_table_object");function T$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence={message:Nc},mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(T$,"attribute_object");function g$(e){return e=Ic(e),mt.table.presence={message:Nc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,yc.validateObject(e,mt)}a(g$,"describe_table");function R$(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(R$,"validateTableResidence");Jb.exports={schema_object:m$,create_table_object:S$,table_object:p$,attribute_object:T$,describe_table:g$,validateTableResidence:R$}});var jb=T(($oe,Xb)=>{"use strict";var A$=require("uuid"),am=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||A$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Xb.exports=am});var p_=T((Koe,Zb)=>{"use strict";var O$=jb(),cm=class extends O${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}};Zb.exports=cm});var tN=T((Qoe,eN)=>{"use strict";eN.exports=N$;var b$="inserted";function N$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===b$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(N$,"returnObject")});var S_=T((Joe,oN)=>{"use strict";var y$=M(),um=$e(),I$=Fo(),{getSystemSchemaPath:w$,getSchemaPath:C$}=We(),L$=Bi(),D$=m_(),M$=p_(),U$=tN(),{handleHDBError:rN,hdb_errors:sN}=Z(),nN=J(),{HTTP_STATUS_CODES:P$}=sN,lm=L$.hdb_attribute,iN=[];for(let e=0;e<lm.attributes.length;e++)iN.push(lm.attributes[e].attribute);var v$="inserted";oN.exports=B$;async function B$(e){let t=D$.attribute_object(e);if(t)throw rN(new Error,t.message,sN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&nN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw rN(new Error,r,P$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=nN.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 M$(e.schema,e.table,e.attribute,e.id);try{let i=await um.openEnvironment(C$(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}`);um.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await um.openEnvironment(w$(),y$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await I$.insertRecords(o,lm.hash_attribute,iN,[s]);return U$(v$,c,{records:[s]},u)}catch(i){throw i}}a(B$,"lmdbCreateAttribute")});var dm=T((joe,cN)=>{var{hdb_table:H$,hdb_database:aN}=Kn(),x$=et(),_m=require("joi"),q$={undefined:"undefined",null:"null"},F$=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||q$[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"),G$=_m.object({database:aN,schema:aN,table:H$,records:_m.array().items(_m.object().custom(F$)).required()});cN.exports=function(e){return x$.validateBySchema(e,G$)}});var wc=T((tae,lN)=>{"use strict";var Ts=J(),uN=V(),eae=dm(),{getDatabases:k$}=(ge(),ee(xe)),{ClientError:Hi}=Z();lN.exports=V$;function V$(e){if(Ts.isEmpty(e))throw new Hi("invalid update parameters defined.");if(Ts.isEmptyOrZeroLength(e.schema))throw new Hi("invalid schema specified.");if(Ts.isEmptyOrZeroLength(e.table))throw new Hi("invalid table specified.");if(!Array.isArray(e.records))throw new Hi("records must be an array");let t=k$()[e.schema]?.[e.table];if(Ts.isEmpty(t))throw new Hi(`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&&Ts.isEmptyOrZeroLength(o[r]))throw uN.error("a valid hash attribute must be provided with update record:",o),new Hi("a valid hash attribute must be provided with update record, check log for more info");if(!Ts.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw uN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Hi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ts.isEmpty(o[r])&&o[r]!==""&&n.has(Ts.autoCast(o[r]))&&(o.skip=!0),n.add(Ts.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(V$,"insertUpdateValidate")});var Cc=T((nae,_N)=>{"use strict";var $$=M().OPERATIONS_ENUM,fm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=$$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};_N.exports=fm});var Uc=T((oae,dN)=>{"use strict";var iae=Cc(),T_=M(),hm=J(),Em=V(),Y$=require("uuid"),{handleHDBError:Lc,hdb_errors:K$}=Z(),{HDB_ERROR_MSGS:Dc,HTTP_STATUS_CODES:Mc}=K$;dN.exports=W$;function W$(e,t,r){for(let s=0;s<t.length;s++)Q$(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];z$(i,r,e.operation)}}a(W$,"processRows");function Q$(e){if(Buffer.byteLength(String(e))>T_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Lc(new Error,Dc.ATTR_NAME_LENGTH_ERR(e),Mc.BAD_REQUEST,void 0,void 0,!0);if(hm.isEmptyOrZeroLength(e)||hm.isEmpty(e.trim()))throw Lc(new Error,Dc.ATTR_NAME_NULLISH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0)}a(Q$,"validateAttribute");function z$(e,t,r){if(!e.hasOwnProperty(t)||hm.isEmptyOrZeroLength(e[t])){if(r===T_.OPERATIONS_ENUM.INSERT||r===T_.OPERATIONS_ENUM.UPSERT){e[t]=Y$.v4();return}throw Em.error("Update transaction aborted due to record with no hash value:",e),Lc(new Error,Dc.RECORD_MISSING_HASH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>T_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Em.error(e),Lc(new Error,Dc.HASH_VAL_LENGTH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Em.error(e),Lc(new Error,Dc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Mc.BAD_REQUEST,void 0,void 0,!0)}a(z$,"validateHash")});var EN=T((cae,fN)=>{"use strict";var mm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};fN.exports=mm});var pN=T((lae,mN)=>{"use strict";var pm=$e(),J$=V(),hN=Ir().LMDB_ERRORS_ENUM;mN.exports=X$;async function X$(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 pm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==hN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await pm.closeEnvironment(global.lmdb_map[n]),await pm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==hN.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){J$.error(t)}}a(X$,"cleanLMDBMap")});var gs=T((dae,RN)=>{"use strict";var Pc=require("crypto"),j$=j(),{CONFIG_PARAMS:Z$}=M(),TN="aes-256-cbc",e1=32,t1=16,Sm=64,gN=32,r1=Sm+gN,SN=new Map;RN.exports={encrypt:n1,decrypt:s1,createNatsTableStreamName:i1};function n1(e){let t=Pc.randomBytes(e1),r=Pc.randomBytes(t1),n=Pc.createCipheriv(TN,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(n1,"encrypt");function s1(e){let t=e.substr(0,Sm),r=e.substr(Sm,gN),n=e.substr(r1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pc.createDecipheriv(TN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(s1,"decrypt");function i1(e,t){let r=j$.get(Z$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=SN.get(r);return n||(n=Pc.createHash("md5").update(r).digest("hex"),SN.set(r,n)),n}a(i1,"createNatsTableStreamName")});var xi=T((hae,ON)=>{"use strict";var Eae=tn(),g_=V(),AN=m_(),o1=gs(),R_=J(),{handleHDBError:A_,hdb_errors:a1}=Z(),{HDB_ERROR_MSGS:O_,HTTP_STATUS_CODES:Tm}=a1,c1=j();c1.initSync();var{getDatabases:gm}=(ge(),ee(xe));ON.exports={describeAll:u1,describeTable:b_,describeSchema:l1};async function u1(e){try{let t=R_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=gm(),i={},o={},c=[],u=e?.exact_count;for(let l in s){i[l]=!0,!t&&!n&&(o[l]=e.hdb_user.role.permission[l].describe);let d=s[l];for(let f in d)try{let E;if(t||n)E=await b_({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await b_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){g_.error(E)}}let _={};for(let l in c)t||n?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||n?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return g_.error("Got an error in describeAll"),g_.error(t),A_(new Error,O_.DESCRIBE_ALL_ERR)}}a(u1,"describeAll");async function b_(e,t){R_.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=AN.describe_table(e);if(i)throw i;let c=gm()[r];if(!c)throw A_(new Error,O_.SCHEMA_NOT_FOUND(e.schema),Tm.NOT_FOUND);let u=c[n];if(!u)throw A_(new Error,O_.TABLE_NOT_FOUND(e.schema,e.table),Tm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=o1.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){g_.warn(`unable to stat table dbi due to ${f}`)}return d}a(b_,"descTable");async function l1(e){R_.transformReq(e);let t=AN.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=gm()[n];if(!i)throw A_(new Error,O_.SCHEMA_NOT_FOUND(e.schema),Tm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),R_.isEmpty(u)||u.describe){let _=await b_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(l1,"describeSchema")});var Rs=T((Tae,wN)=>{var _1=Bi(),{callbackify:NN,promisify:d1}=require("util"),{getDatabases:yN}=(ge(),ee(xe));wN.exports={setSchemaDataToGlobal:bN,getTableSchema:f1,getSystemSchema:E1,setSchemaDataToGlobalAsync:d1(bN)};var IN=xi(),pae=NN(IN.describeAll),Sae=NN(IN.describeTable);function bN(e){global.hdb_schema=yN(),e&&e()}a(bN,"setSchemaDataToGlobal");function f1(e,t,r){let n=yN()[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(f1,"getTableSchema");function E1(){return _1}a(E1,"getSystemSchema")});var rn=T((Rae,MN)=>{"use strict";var y_=dm(),Ft=J(),h1=require("util"),I_=Cn(),m1=Rs(),CN=V(),{handleHDBError:qi,hdb_errors:p1}=Z(),{HTTP_STATUS_CODES:Fi}=p1,S1=h1.promisify(m1.getTableSchema),T1="updated",LN="inserted",DN="upserted";MN.exports={insert:R1,update:A1,upsert:O1,validation:g1,flush:b1};async function g1(e){if(Ft.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ft.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ft.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await S1(e.schema,e.table),r=y_(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&&Ft.isEmptyOrZeroLength(c[n]))throw CN.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(!Ft.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw CN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Ft.isEmpty(c[n])&&c[n]!==""&&s.has(Ft.autoCast(c[n]))&&(c.skip=!0),s.add(Ft.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(g1,"validation");async function R1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=y_(e);if(t)throw qi(new Error,t.message,Fi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,Fi.BAD_REQUEST);let n=await I_.createRecords(e);return N_(LN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(R1,"insertData");async function A1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=y_(e);if(t)throw qi(new Error,t.message,Fi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,Fi.BAD_REQUEST);let n=await I_.updateRecords(e);return Ft.isEmpty(n.existing_rows)?N_(T1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):N_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(A1,"updateData");async function O1(e){if(e.operation!=="upsert")throw qi(new Error,"invalid operation, must be upsert",Fi.INTERNAL_SERVER_ERROR);let t=y_(e);if(t)throw qi(new Error,t.message,Fi.BAD_REQUEST);Ft.transformReq(e);let r=Ft.checkSchemaTableExist(e.schema,e.table);if(r)throw qi(new Error,r,Fi.BAD_REQUEST);let n=await I_.upsertRecords(e);return N_(DN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(O1,"upsertData");function N_(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===LN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===DN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(N_,"returnObject");function b1(e){return Ft.transformReq(e),I_.flush(e.schema,e.table)}a(b1,"flush")});var Am=T((Oae,vN)=>{var N1=et(),Rm=require("joi"),{hdb_table:y1,hdb_database:UN}=Kn(),PN={schema:UN,database:UN,table:y1},I1={date:Rm.date().iso().required()},w1={timestamp:Rm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};vN.exports=function(e,t){let r=t==="timestamp"?{...PN,...w1}:{...PN,...I1},n=Rm.object(r);return N1.validateBySchema(e,n)}});var xN=T((bae,HN)=>{var C1=et(),Om=require("joi"),{hdb_table:L1,hdb_database:BN}=Kn(),D1=Om.object({schema:BN,database:BN,table:L1,hash_values:Om.array().required(),ids:Om.array()});HN.exports=function(e){return C1.validateBySchema(e,D1)}});var FN=T((Nae,qN)=>{"use strict";var bm=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}},Nm=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}},ym=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};qN.exports={InsertObject:bm,NoSQLSeachObject:Nm,DeleteResponseObject:ym}});var Vi=T((Iae,YN)=>{"use strict";var kN=Am(),M1=xN(),Gi=J(),GN=require("moment"),VN=V(),{promisify:U1,callbackify:P1}=require("util"),ki=M(),v1=Rs(),Im=U1(v1.getTableSchema),wm=Cn(),{DeleteResponseObject:B1}=FN(),{handleHDBError:js,hdb_errors:H1}=Z(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Zs}=H1,x1="records successfully deleted",q1=P1($N);YN.exports={delete:q1,deleteRecord:$N,deleteFilesBefore:F1,deleteAuditLogsBefore:G1};async function F1(e){let t=kN(e,"date");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Gi.transformReq(e),!GN(e.date,GN.ISO_8601).isValid())throw js(new Error,w_.INVALID_DATE,Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,w_.INVALID_DATE,!0);let n=Gi.checkSchemaTableExist(e.schema,e.table);if(n)throw js(new Error,n,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,n,!0);let s=await wm.deleteRecordsBefore(e);if(await Im(e.schema,e.table),VN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(F1,"deleteFilesBefore");async function G1(e){let t=kN(e,"timestamp");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Gi.transformReq(e),isNaN(e.timestamp))throw js(new Error,w_.INVALID_VALUE("Timestamp"),Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,w_.INVALID_VALUE("Timestamp"),!0);let r=Gi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,r,!0);let n=await wm.deleteAuditLogsBefore(e);return await Im(e.schema,e.table),VN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(G1,"deleteAuditLogsBefore");async function $N(e){e.ids&&(e.hash_values=e.ids);let t=M1(e);if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);Gi.transformReq(e);let r=Gi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,ki.LOG_LEVELS.ERROR,r,!0);try{await Im(e.schema,e.table);let n=await wm.deleteRecords(e);return Gi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${x1}`),n}catch(n){if(n.message===ki.SEARCH_NOT_FOUND_MESSAGE){let s=new B1;return s.message=ki.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a($N,"deleteRecord")});var C_=T((Cae,QN)=>{var k1=require("crypto"),KN=9;function V1(e){let t=Y1(KN),r=WN(e+t);return t+r}a(V1,"createHash");function $1(e,t){let r=e?.substr(0,KN),n=r+WN(t+r);return e===n}a($1,"validateHash");function Y1(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(Y1,"generateSalt");function WN(e){return k1.createHash("md5").update(e).digest("hex")}a(WN,"md5");QN.exports={hash:V1,validate:$1}});var JN=T((Dae,zN)=>{var Cm=et(),Qt={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 K1(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,Cm.validateObject(e,Qt)}a(K1,"addUserValidation");function W1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Cm.validateObject(e,Qt)}a(W1,"alterUserValidation");function Q1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Cm.validateObject(e,Qt)}a(Q1,"dropUserValidation");zN.exports={addUserValidation:K1,alterUserValidation:W1,dropUserValidation:Q1}});var nt=T((Pae,jN)=>{"use strict";var{platform:Uae}=require("os"),z1="nats-server.zip",Lm="nats-server",J1=process.platform==="win32"?`${Lm}.exe`:Lm,Dm="HDB",X1=/^[^\s.,*>]+$/,XN="__request__",j1=a(e=>`${e}.${XN}`,"REQUEST_SUBJECT"),Z1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},eY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},tY={HUB:"hub.pid",LEAF:"leaf.pid"},rY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},nY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Dm,deliver_subject:"__HDB__.WORKQUEUE"},sY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Dm,deliver_subject:"HDB.SCHEMAQUEUE"},iY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Dm,deliver_subject:"HDB.USERQUEUE"},oY={SUCCESS:"success",ERROR:"error"},aY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},cY={TXN:"txn",MSGID:"msgid"},ko={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},uY={[ko.ERR]:1,[ko.WRN]:2,[ko.INF]:3,[ko.DBG]:4,[ko.TRC]:5},lY={debug:"-D",trace:"-DVV"};jN.exports={NATS_SERVER_ZIP:z1,NATS_SERVER_NAME:Lm,NATS_BINARY_NAME:J1,PID_FILES:tY,NATS_CONFIG_FILES:eY,SERVER_SUFFIX:rY,WORK_QUEUE_CONSUMER_NAMES:nY,SCHEMA_QUEUE_CONSUMER_NAMES:sY,USER_QUEUE_CONSUMER_NAMES:iY,NATS_TERM_CONSTRAINTS_RX:X1,REQUEST_SUFFIX:XN,UPDATE_REMOTE_RESPONSE_STATUSES:oY,CLUSTER_STATUS_STATUSES:aY,REQUEST_SUBJECT:j1,SUBJECT_PREFIXES:cY,MSG_HEADERS:Z1,LOG_LEVELS:ko,LOG_LEVEL_FLAGS:lY,LOG_LEVEL_HIERARCHY:uY}});var ey=T((Bae,ZN)=>{"use strict";var L_=M(),D_=class{static{a(this,"BaseLicense")}constructor(t=0,r=L_.RAM_ALLOCATION_ENUM.DEFAULT,n=L_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Mm=class extends D_{static{a(this,"ExtendedLicense")}constructor(t=0,r=L_.RAM_ALLOCATION_ENUM.DEFAULT,n=L_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};ZN.exports={BaseLicense:D_,ExtendedLicense:Mm}});var $i=T((xae,oy)=>{"use strict";var $o=require("fs-extra"),ry=C_(),ny=require("crypto"),_Y=require("moment"),dY=require("uuid").v4,zt=V(),Pm=require("path"),fY=J(),ei=M(),{totalmem:ty}=require("os"),EY=ey().ExtendedLicense,Vo="invalid license key format",hY="061183",mY="mofi25",pY="aes-256-cbc",SY=16,TY=32,sy=j();sy.initSync();var Um;oy.exports={validateLicense:iy,generateFingerPrint:RY,licenseSearch:Hm,getLicense:bY,checkMemoryLimit:NY};function vm(){return Pm.join(sy.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(vm,"getLicenseDirPath");function gY(){let e=vm();return Pm.join(e,ei.LICENSE_FILE_NAME)}a(gY,"getLicenseFilePath");function Bm(){let e=vm();return Pm.join(e,ei.REG_KEY_FILE_NAME)}a(Bm,"getFingerPrintFilePath");async function RY(){let e=Bm();try{return await $o.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await AY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(RY,"generateFingerPrint");async function AY(){let e=dY(),t=ry.hash(e),r=Bm();try{await $o.mkdirp(vm()),await $o.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(n),new Error("There was an error generating the fingerprint")}return t}a(AY,"writeFingerprint");function iy(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ei.RAM_ALLOCATION_ENUM.DEFAULT,version:ei.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zt.error("empty license key passed to validate."),r;let n=Bm(),s=!1;try{s=$o.statSync(n)}catch(i){zt.error(i)}if(s){let i;try{i=$o.readFileSync(n,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(mY),c=o[1];c=Buffer.concat([Buffer.from(c)],SY);let u=Buffer.concat([Buffer.from(i)],TY),_=ny.createDecipheriv(pY,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=OY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vo),zt.error(Vo),new Error(Vo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Vo),zt.error(Vo),new Error(Vo)}else r.exp_date=l;r.exp_date<_Y().valueOf()&&(r.valid_date=!1),ry.validate(o[1],`${hY}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||zt.error("Invalid licence"),r}a(iy,"validateLicense");function OY(e,t){try{let r=ny.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{zt.warn("Check old license failed")}}a(OY,"checkOldLicense");function Hm(){let e=new EY,t=[];try{t=$o.readFileSync(gY(),"utf-8").split(ei.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(fY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=iy(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){zt.error("There was an error parsing the license string."),zt.error(s),e.ram_allocation=ei.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Um=e,e}a(Hm,"licenseSearch");async function bY(){return Um||await Hm(),Um}a(bY,"getLicense");function NY(){let e=Hm().ram_allocation,t=process.constrainedMemory?.()||ty();if(t=Math.round(Math.min(t,ty())/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(NY,"checkMemoryLimit")});var vr=T((Vae,Ay)=>{"use strict";var ly="username is required",_y="nothing to update, must supply active, role or password to update",dy="password cannot be an empty string",fy="If role is specified, it cannot be empty.",Ey="active must be true or false";Ay.exports={addUser:PY,alterUser:vY,dropUser:HY,getSuperUser:GY,userInfo:xY,listUsers:U_,listUsersExternal:qY,setUsersToGlobal:Ko,findAndValidateUser:gy,getClusterUser:kY,USERNAME_REQUIRED:ly,ALTERUSER_NOTHING_TO_UPDATE:_y,EMPTY_PASSWORD:dy,EMPTY_ROLE:fy,ACTIVE_BOOLEAN:Ey};var hy=rn(),yY=Vi(),Fm=C_(),my=JN(),py=tn(),Gm=As(),Pr=J(),Sy=require("validate.js"),Te=V(),{promisify:IY}=require("util"),km=gs(),ay=M(),cy=nt(),wY=Lr(),Fae=j(),Gae=$i(),CY=Bi(),{table:kae}=(ge(),ee(xe)),{handleHDBError:Qn,hdb_errors:LY}=Z(),{HTTP_STATUS_CODES:zn,AUTHENTICATION_ERROR_MSGS:xm,HDB_ERROR_MSGS:Yo}=LY,{UserEventMsg:Vm}=Ln(),qm=require("lodash"),{server:$m}=(nr(),ee(Ci)),DY=V();$m.getUser=(e,t)=>gy(e,t,t!=null);var Ty={username:!0,active:!0,role:!0,password:!0},uy=new Map,M_=py.searchByValue,MY=py.searchByHash,UY=IY(yY.delete);async function PY(e){let t=Sy.cleanAttributes(e,Ty),r=my.addUserValidation(t);if(r)throw Qn(new Error,r.message,zn.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 M_(n),s=s&&Array.from(s)}catch(u){throw Te.error("There was an error searching for a role in add user"),Te.error(u),u}if(!s||s.length<1)throw Qn(new Error,Yo.ROLE_NAME_NOT_FOUND(t.role),zn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Qn(new Error,Yo.DUP_ROLES_FOUND(t.role),zn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=km.encrypt(t.password)),t.password=Fm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await hy.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Ko()}catch(u){throw Te.error("Got an error setting users to global"),Te.error(u),u}if(o.skipped_hashes.length===1)throw Qn(new Error,Yo.USER_ALREADY_EXISTS(t.username),zn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Gm.signalUserChange(new Vm(process.pid)),`${c.username} successfully added`}a(PY,"addUser");async function vY(e){let t=Sy.cleanAttributes(e,Ty);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(ly);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(_y);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(dy);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(Ey);let r=BY(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=km.encrypt(t.password)),t.password=Fm.hash(t.password)),t.role==="")throw new Error(fy);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 M_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=Yo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Te.error(c),Qn(new Error,c,zn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Yo.ALTER_USER_DUP_ROLES(t.role);throw Te.error(c),Qn(new Error,c,zn.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 hy.update(n)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Ko()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Gm.signalUserChange(new Vm(process.pid)),s}a(vY,"alterUser");function BY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(BY,"isClusterUser");async function HY(e){try{let t=my.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Pr.isEmpty(global.hdb_users.get(e.username)))throw Qn(new Error,Yo.USER_NOT_EXIST(e.username),zn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await UY(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Ko()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return Gm.signalUserChange(new Vm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(HY,"dropUser");async function xY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=qm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await MY(r)}catch(s){throw Te.error("Got an error searching for a role."),Te.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Te.error(r),r}return t}a(xY,"userInfo");async function qY(){let e;try{e=await U_()}catch(t){throw Te.error("Got an error listing users."),Te.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(qY,"listUsersExternal");async function U_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await M_(e)}catch(o){throw Te.error("Got an error searching for roles."),Te.error(o),o}let r={};for(let o of t)r[o.id]=qm.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 M_(n)}catch(o){throw Te.error("Got an error searching for users."),Te.error(o),o}let i=new Map;for(let o of s)o=qm.cloneDeep(o),o.role=r[o.role],FY(o.role),i.set(o.username,o);return i}catch(e){throw Te.error("got an error listing users"),Te.error(e),Pr.errorizeMessage(e)}return null}a(U_,"listUsers");function FY(e){try{if(!e){Te.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(CY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Te.error("Got an error trying to set system permissions."),Te.error(t)}}a(FY,"appendSystemTablesToRole");async function Ko(){try{let e=await U_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Ko,"setUsersToGlobal");async function gy(e,t,r=!0){global.hdb_users||await Ko();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Qn(new Error,xm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Qn(new Error,xm.USER_INACTIVE,zn.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(uy.get(t)===n.password)return s;if(Fm.validate(n.password,t))uy.set(t,n.password);else throw Qn(new Error,xm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(gy,"findAndValidateUser");async function GY(){global.hdb_users||await Ko();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(GY,"getSuperUser");async function kY(){let e=await U_(),t=wY.getConfigFromFile(ay.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===ay.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=km.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+cy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+cy.SERVER_SUFFIX.ADMIN,r}a(kY,"getClusterUser");var Ry=[];$m.invalidateUser=function(e){for(let t of Ry)try{t(e)}catch(r){DY.error("Error invalidating user",r)}};$m.onInvalidatedUser=function(e){Ry.push(e)}});var Bc=T((Wae,yy)=>{"use strict";var Yi=V(),Br=M(),VY=pN(),Yae=Rs(),Kae=xi(),$Y=vr(),{validateEvent:Oy}=Ln(),vc=Cn(),YY=require("process"),{resetDatabases:KY}=(ge(),ee(xe)),WY={[Br.ITC_EVENT_TYPES.SCHEMA]:QY,[Br.ITC_EVENT_TYPES.USER]:Ny};async function QY(e){let t=Oy(e);if(t){Yi.error(t);return}Yi.trace("ITC schemaHandler received schema event:",e),await VY(e.message),await zY(e.message)}a(QY,"schemaHandler");async function zY(e){try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=KY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Yi.error(t)}}a(zY,"syncSchemaMetadata");var by=[];async function Ny(e){try{try{vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),vc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Yi.warn(r)}let t=Oy(e);if(t){Yi.error(t);return}Yi.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${YY.pid} received user event:`,e),await $Y.setUsersToGlobal();for(let r of by)r()}catch(t){Yi.error(t)}}a(Ny,"userHandler");Ny.addListener=function(e){by.push(e)};yy.exports=WY});var Ln=T((Zae,wy)=>{"use strict";var zae=V(),Ym=J(),JY=M(),{ITC_ERRORS:Hc}=Ir(),{parentPort:Jae,threadId:XY,isMainThread:jY,workerData:Xae}=require("worker_threads"),{onMessageFromWorkers:ZY,broadcast:jae,broadcastWithAcknowledgement:eK}=tt();wy.exports={sendItcEvent:tK,validateEvent:Iy,SchemaEventMsg:rK,UserEventMsg:nK};var P_;ZY(async(e,t)=>{P_=P_||Bc(),Iy(e),P_[e.type]&&await P_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function tK(e){return!jY&&e.message&&(e.message.originator=XY),eK(e)}a(tK,"sendItcEvent");function Iy(e){if(typeof e!="object")return Hc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ym.isEmpty(e.type))return Hc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ym.isEmpty(e.message))return Hc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ym.isEmpty(e.message.originator))return Hc.MISSING_ORIGIN;if(JY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Hc.INVALID_EVENT(e.type)}a(Iy,"validateEvent");function rK(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(rK,"SchemaEventMsg");function nK(e){this.originator=e}a(nK,"UserEventMsg")});var As=T((rce,My)=>{"use strict";var Cy=M(),tce=J(),v_=V(),Ly=EN(),Wo,{sendItcEvent:Dy}=Ln();function sK(e){try{v_.trace("signalSchemaChange called with message:",e),Wo=Wo||Bc();let t=new Ly(Cy.ITC_EVENT_TYPES.SCHEMA,e);return Wo.schema(t),Dy(t)}catch(t){v_.error(t)}}a(sK,"signalSchemaChange");function iK(e){try{v_.trace("signalUserChange called with message:",e),Wo=Wo||Bc();let t=new Ly(Cy.ITC_EVENT_TYPES.USER,e);return Wo.user(t),Dy(t)}catch(t){v_.error(t)}}a(iK,"signalUserChange");My.exports={signalSchemaChange:sK,signalUserChange:iK}});var B_=T((sce,Py)=>{"use strict";var Uy=J(),oK=M(),aK=V(),cK=S_(),uK=p_(),lK=As(),{SchemaEventMsg:_K}=Ln(),dK="already exists in";Py.exports=fK;async function fK(e,t,r){if(Uy.isEmptyOrZeroLength(r))return r;let n=[];Uy.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 EK(e,t.schema,t.name,i)})),s}a(fK,"lmdbCheckForNewAttributes");async function EK(e,t,r,n){let s=new uK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await hK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(dK))aK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(EK,"createNewAttribute");async function hK(e){let t;return t=await cK(e),lK.signalSchemaChange(new _K(process.pid,oK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(hK,"createAttribute")});var Qo=T((oce,vy)=>{"use strict";var Km=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}};vy.exports=Km});var Hy=T((cce,By)=>{"use strict";var mK=Qo(),pK=M().OPERATIONS_ENUM,Wm=class extends mK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(pK.INSERT,r,n,s,i),this.records=t}};By.exports=Wm});var qy=T((lce,xy)=>{"use strict";var SK=Qo(),TK=M().OPERATIONS_ENUM,Qm=class extends SK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(TK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};xy.exports=Qm});var Gy=T((dce,Fy)=>{"use strict";var gK=Qo(),RK=M().OPERATIONS_ENUM,zm=class extends gK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(RK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Fy.exports=zm});var Vy=T((Ece,ky)=>{"use strict";var AK=Qo(),OK=M().OPERATIONS_ENUM,Jm=class extends AK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(OK.DELETE,n,s,t,i),this.original_records=r}};ky.exports=Jm});var xc=T((pce,Wy)=>{"use strict";var mce=require("path"),$y=$e(),bK=Hy(),NK=qy(),yK=Gy(),IK=Vy(),zo=ht(),Yy=J(),{CONFIG_PARAMS:wK}=M(),Ky=j();Ky.initSync();var H_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:CK}=We();Wy.exports=LK;async function LK(e,t){if(Ky.get(wK.LOGGING_AUDITLOG)===!1)return;let r=CK(e.schema,e.table),n=await $y.openEnvironment(r,e.table,!0),s=DK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){$y.initializeDBIs(n,zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Yy.isEmpty(s.user_name)||n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[zo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(LK,"writeTransaction");function DK(e,t){let r=Yy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===H_.INSERT)return new bK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===H_.UPDATE)return new NK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===H_.UPSERT)return new yK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===H_.DELETE)return new IK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(DK,"createTransactionObject")});var Xm=T((gce,Qy)=>{"use strict";var MK=wc(),Tce=Cc(),qc=M(),UK=Uc(),PK=Fo().insertRecords,vK=$e(),BK=V(),HK=B_(),{getSchemaPath:xK}=We(),qK=xc();Qy.exports=FK;async function FK(e){try{let{schema_table:t,attributes:r}=MK(e);UK(e,r,t.hash_attribute),e.schema!==qc.SYSTEM_SCHEMA_NAME&&(r.includes(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await HK(e.hdb_auth_header,t,r),s=xK(e.schema,e.table),i=await vK.openEnvironment(s,e.table),o=await PK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qK(e,o)}catch(c){BK.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(FK,"lmdbCreateRecords")});var Xy=T((Ace,Jy)=>{"use strict";var zy=M(),GK=Xm(),kK=Cc(),VK=require("fs-extra"),{getSchemaPath:$K}=We();Jy.exports=YK;async function YK(e){let t=[{name:e.schema,createddate:Date.now()}],r=new kK(zy.SYSTEM_SCHEMA_NAME,zy.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await GK(r),await VK.mkdirp($K(e.schema))}a(YK,"lmdbCreateSchema")});var Zy=T((bce,jy)=>{"use strict";var jm=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}};jy.exports=jm});var nI=T((Cce,rI)=>{"use strict";var eI=$e(),Zm=Dr(),ep=Ir().LMDB_ERRORS_ENUM,KK=ht(),tI=V(),yce=J(),WK=require("lmdb"),QK=Zy(),zK=M(),{OVERFLOW_MARKER:Ice,MAX_SEARCH_KEY_LENGTH:wce}=KK,JK=zK.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function XK(e,t,r,n){if(Zm.validateEnv(e),t===void 0)throw new Error(ep.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ep.IDS_REQUIRED):new Error(ep.IDS_MUST_BE_ITERABLE);try{let s=eI.listDBIs(e);eI.initializeDBIs(e,t,s);let i=new QK,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[JK]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,WK.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],w=h[A];if(w!=null)try{let B=Zm.getIndexedValues(w);if(B)for(let K=0,q=B.length;K<q;K++)I.remove(B[K],o)}catch{tI.warn(`cannot delete from attribute: ${A}, ${w}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){tI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Zm.getNextMonotonicTime(),i}catch(s){throw s}}a(XK,"deleteRecords");rI.exports={deleteRecords:XK}});var Fc=T((Dce,iI)=>{"use strict";var Jo=J(),jK=nI(),ZK=$e(),{getSchemaPath:eW}=We(),tW=xc(),rW=V();iI.exports=nW;async function nW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Jo.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Jo.isEmptyOrZeroLength(e.hash_values)&&!Jo.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];Jo.isEmpty(u)||e.hash_values.push(u)}}if(Jo.isEmptyOrZeroLength(e.hash_values))return sI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Jo.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=eW(e.schema,e.table),i=await ZK.openEnvironment(s,e.table),o=await jK.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await tW(e,o)}catch(c){rW.error(`unable to write transaction due to ${c.message}`)}return sI(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(nW,"lmdbDeleteRecords");function sI(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(sI,"createDeleteResponse")});var rp=T((Pce,oI)=>{"use strict";var sW=M(),Uce=Dr();function tp(e,t){let r=Object.create(null);if(t.length===1&&sW.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(tp,"parseRow");function iW(e,t,r,n){let s=tp(r,e);n.push(s)}a(iW,"searchAll");function oW(e,t,r,n){let s=tp(r,e);n[t]=s}a(oW,"searchAllToMap");function aW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(aW,"iterateDBI");function Ki(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(Ki,"pushResults");function cW(e,t,r,n,s,i){t.toString().endsWith(e)&&Ki(t,r,n,s,i)}a(cW,"endsWith");function uW(e,t,r,n,s,i){t.toString().includes(e)&&Ki(t,r,n,s,i)}a(uW,"contains");function lW(e,t,r,n,s,i){t>e&&Ki(t,r,n,s,i)}a(lW,"greaterThanCompare");function _W(e,t,r,n,s,i){t>=e&&Ki(t,r,n,s,i)}a(_W,"greaterThanEqualCompare");function dW(e,t,r,n,s,i){t<e&&Ki(t,r,n,s,i)}a(dW,"lessThanCompare");function fW(e,t,r,n,s,i){t<=e&&Ki(t,r,n,s,i)}a(fW,"lessThanEqualCompare");oI.exports={parseRow:tp,searchAll:iW,searchAllToMap:oW,iterateDBI:aW,endsWith:cW,contains:uW,greaterThanCompare:lW,greaterThanEqualCompare:_W,lessThanCompare:dW,lessThanEqualCompare:fW,pushResults:Ki}});var Xo=T((qce,fI)=>{"use strict";var ti=$e(),Bce=V(),Hr=Dr(),x_=ht(),dt=Ir().LMDB_ERRORS_ENUM,Hce=J(),EW=M(),q_=rp(),{parseRow:hW}=q_,xce=require("lmdb"),{OVERFLOW_MARKER:aI,MAX_SEARCH_KEY_LENGTH:mW}=x_;function cI(e,t,r,n=!1,s=void 0,i=void 0){return Wi(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(cI,"iterateFullIndex");function Gc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Wi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(w=>({value:w}))):d.getRange(I)})}a(Gc,"iterateRangeBetween");function Wi(e,t,r,n){let s=e.database||e,i=ti.openDBI(s,r);i[x_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ti.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(Wi,"setupTransaction");function uI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(aI)){if(!s)if(r)s=ti.openDBI(e,r);else{let u=ti.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=ti.openDBI(e,u[_]),!s[x_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(uI,"getOverflowCheck");function pW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Wi(e,t,t,(o,c,u)=>(F_(r),r=kc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>hW(_.value,r))))}a(pW,"searchAll");function SW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);F_(r),r=kc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of cI(e,t,t,n,s,i))o.set(c,q_.parseRow(u,r));return o}a(SW,"searchAllToMap");function TW(e,t,r=!1,n=void 0,s=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=cI(e,void 0,t,r,n,s),c=o.transaction,u=uI(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(TW,"iterateDBI");function gW(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(gW,"countAll");function RW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Wi(e,t,r,(c,u,_,l)=>(n=Hr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(RW,"equals");function AW(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(AW,"count");function OW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Wi(e,null,r,(c,u)=>{n=Hr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let f of u.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.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 l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(OW,"startsWith");function bW(e,t,r,n,s=!1,i=void 0,o=void 0){return lI(e,t,r,n,s,i,o,!0)}a(bW,"endsWith");function lI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ri(e,r,n),Wi(e,null,r,(u,_,l,d)=>{let f=uI(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(aI)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[x_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(lI,"contains");function NW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,n,u,s,i,o,!0,!1)}a(NW,"greaterThan");function yW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Gc(e,t,r,n,u,s,i,o,!1,!1)}a(yW,"greaterThanEqual");function IW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,n,s,i,o,!1,!0)}a(IW,"lessThan");function wW(e,t,r,n,s=!1,i=void 0,o=void 0){ri(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Gc(e,t,r,u,n,s,i,o,!1,!1)}a(wW,"lessThanEqual");function CW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Hr.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=Hr.convertKeyValueToWrite(n),s=Hr.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Gc(e,t,r,n,s,i,o,c)}a(CW,"between");function LW(e,t,r,n){Hr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(F_(r),r=kc(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=q_.parseRow(c,r)),o}a(LW,"searchByHash");function DW(e,t,r){Hr.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(DW,"checkHashExists");function MW(e,t,r,n,s=[]){return dI(e,t,r,n,s),_I(e,t,r,n,s).map(i=>i[1])}a(MW,"batchSearchByHash");function UW(e,t,r,n,s=[]){dI(e,t,r,n,s);let i=new Map;for(let[o,c]of _I(e,t,r,n,s))i.set(o,c);return i}a(UW,"batchSearchByHashToMap");function _I(e,t,r,n,s=[]){return Wi(e,t,t,(i,o,c)=>{r=kc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,q_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(_I,"batchHashSearch");function dI(e,t,r,n,s){if(Hr.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(F_(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(dI,"initializeBatchSearchByHash");function F_(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(F_,"validateFetchAttributes");function ri(e,t,r){if(Hr.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>mW)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function kc(e,t){return t.length===1&&EW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(kc,"setGetWholeRowAttributes");fI.exports={searchAll:pW,searchAllToMap:SW,count:AW,countAll:gW,equals:RW,startsWith:OW,endsWith:bW,contains:lI,searchByHash:LW,setGetWholeRowAttributes:kc,batchSearchByHash:MW,batchSearchByHashToMap:UW,checkHashExists:DW,iterateDBI:TW,greaterThan:NW,greaterThanEqual:yW,lessThan:IW,lessThanEqual:wW,between:CW}});var jo=T((Gce,SI)=>{var EI=require("lodash"),hI=et(),fe=require("joi"),PW=J(),{hdb_schema_table:Vc,checkValidTable:mI,hdb_table:pI,hdb_database:G_}=Kn(),{handleHDBError:vW,hdb_errors:BW}=Z(),{getDatabases:HW}=(ge(),ee(xe)),{HTTP_STATUS_CODES:xW}=BW,qW=fe.object({database:G_,schema:G_,table:pI,search_attribute:Vc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),FW=fe.object({database:G_,schema:G_,table:pI,operator:fe.string().valid("and","or").default("and").lowercase(),offset:fe.number().integer().min(0),limit:fe.number().integer().min(1),get_attributes:fe.array().min(1).items(fe.alternatives(Vc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(Vc,fe.array().min(1)),descending:fe.bool().optional()}).optional(),conditions:fe.array().min(1).items(fe.alternatives(fe.object({operator:fe.string().valid("and","or").default("and").lowercase(),conditions:fe.array()}),fe.object({search_attribute:fe.alternatives(Vc,fe.array().min(1)),search_type:fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:fe.when("search_type",{switch:[{is:"equals",then:fe.any()},{is:"between",then:fe.array().items(fe.alternatives([fe.string(),fe.number()])).length(2)}],otherwise:fe.alternatives(fe.string(),fe.number())}).required()}))).required()});SI.exports=function(e,t){let r=null;switch(t){case"value":r=hI.validateBySchema(e,qW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(mI("database",e.schema)),i(mI("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=hI.validateBySchema(e,FW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=PW.checkGlobalSchemaTable(e.schema,e.table);if(s)return vW(new Error,s,xW.NOT_FOUND);let o=HW()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,f=l.conditions.length;d<f;d++){let E=l.conditions[d];E.conditions?u(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=EI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!EI.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var np=T((Vce,TI)=>{"use strict";var GW=$e(),kW=jo(),{getSchemaPath:VW}=We();TI.exports=$W;function $W(e){let t=kW(e,"hashes");if(t)throw t;let r=VW(e.schema,e.table);return GW.openEnvironment(r,e.table)}a($W,"initialize")});var sp=T((Yce,gI)=>{"use strict";var YW=Xo(),KW=np();gI.exports=WW;async function WW(e){let t=await KW(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return YW.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(WW,"lmdbGetDataByHash")});var Zo=T((Wce,RI)=>{"use strict";var ip=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};RI.exports=ip});var OI=T((Jce,AI)=>{"use strict";var zce=Zo(),QW=Xo(),zW=np();AI.exports=JW;async function JW(e){let t=await zW(e),r=global.hdb_schema[e.schema][e.table];return QW.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(JW,"lmdbSearchByHash")});var Jn=T((jce,bI)=>{"use strict";var op=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=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=u,this.limit=_,this.offset=l}};bI.exports=op});var k_=T((eue,LI)=>{"use strict";var Jt=Xo(),XW=$e(),jW=J(),Ee=ht(),Qi=M(),ZW=Bi(),NI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:eQ}=We(),Os=Qi.SEARCH_WILDCARDS;async function tQ(e,t,r){let n;e.schema===Qi.SYSTEM_SCHEMA_NAME?n=ZW[e.table]:n=global.hdb_schema[e.schema][e.table];let s=CI(e,n.hash_attribute,r,t);return II(e,s,n.hash_attribute,r)}a(tQ,"prepSearch");async function II(e,t,r,n){let s=eQ(e.schema,e.table),i=await XW.openEnvironment(s,e.table),o=wI(i,e,t,r),c=o.transaction||i;if([Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ee.SEARCH_TYPES.SEARCH_ALL,Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(rQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?yI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?yI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?Jt.batchSearchByHashToMap(c,r,e.get_attributes,_):Jt.batchSearchByHash(c,r,e.get_attributes,_)}a(II,"executeSearch");function wI(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case Ee.SEARCH_TYPES.EQUALS:s=Jt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.CONTAINS:s=Jt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.ENDS_WITH:case Ee.SEARCH_TYPES._ENDS_WITH:s=Jt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.STARTS_WITH:case Ee.SEARCH_TYPES._STARTS_WITH:s=Jt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Jt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Jt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ee.SEARCH_TYPES.SEARCH_ALL:return Jt.searchAll(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Jt.searchAllToMap(e,n,t.get_attributes,o,c,u);case Ee.SEARCH_TYPES.BETWEEN:s=Jt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN:case Ee.SEARCH_TYPES._GREATER_THAN:s=Jt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ee.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Jt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN:case Ee.SEARCH_TYPES._LESS_THAN:s=Jt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case Ee.SEARCH_TYPES.LESS_THAN_EQUAL:case Ee.SEARCH_TYPES._LESS_THAN_EQUAL:s=Jt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(wI,"searchByType");function yI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(yI,"createMapFromIterable");function rQ(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(rQ,"checkToFetchMore");function CI(e,t,r,n){if(jW.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),Os.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Os[0])<0&&s.indexOf(Os[1])<0)return c===!0?r===!0?Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ee.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ee.SEARCH_TYPES.EQUALS;if(Os.indexOf(i)>=0&&Os.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(Os.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(Os.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(Os[0])||s.includes(Os[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(NI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Qi.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ee.SEARCH_TYPES.BETWEEN;case Qi.VALUE_SEARCH_COMPARATORS.GREATER:return Ee.SEARCH_TYPES.GREATER_THAN;case Qi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ee.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qi.VALUE_SEARCH_COMPARATORS.LESS:return Ee.SEARCH_TYPES.LESS_THAN;case Qi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ee.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(NI.UNKNOWN_SEARCH_TYPE)}}a(CI,"createSearchTypeFromSearchObject");LI.exports={executeSearch:II,createSearchTypeFromSearchObject:CI,prepSearch:tQ,searchByType:wI}});var MI=T((nue,DI)=>{"use strict";var rue=Jn(),nQ=jo(),sQ=J(),iQ=M(),oQ=k_();DI.exports=aQ;function aQ(e,t){if(!sQ.isEmpty(t)&&iQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=nQ(e,"value");if(n)throw n;return oQ.prepSearch(e,t,!0)}a(aQ,"lmdbGetDataByValue")});var $c=T((oue,UI)=>{"use strict";var iue=Jn(),cQ=jo(),uQ=J(),lQ=M(),_Q=k_();UI.exports=dQ;async function dQ(e,t){if(!uQ.isEmpty(t)&&lQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=cQ(e,"value");if(n)throw n;return _Q.prepSearch(e,t,!1)}a(dQ,"lmdbSearchByValue")});var vI=T((uue,PI)=>{"use strict";var cue=ht(),ap=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}},cp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},up=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};PI.exports={SearchByConditionsObject:ap,SearchCondition:cp,SortAttribute:up}});var FI=T((fue,qI)=>{"use strict";var _ue=vI().SearchByConditionsObject,fQ=Jn(),EQ=jo(),lp=Xo(),V_=ht(),{Resource:due}=(yn(),ee(_p)),xI=k_(),hQ=rp(),mQ=require("lodash"),{getSchemaPath:pQ}=We(),BI=$e(),{handleHDBError:SQ,hdb_errors:TQ}=Z(),{HTTP_STATUS_CODES:gQ}=TQ,RQ=1e8;qI.exports=AQ;async function AQ(e){let t=EQ(e,"conditions");if(t)throw SQ(t,t.message,gQ.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=pQ(e.schema,e.table),n=await BI.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)BI.openDBI(n,_.search_attribute);let i=mQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===V_.SEARCH_TYPES.EQUALS?_.estimated_count=lp.count(n,_.search_attribute,_.search_value):l===V_.SEARCH_TYPES.CONTAINS||l===V_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=RQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await HI(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(xI.filterByType),d=l.length,f=lp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>hQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await HI(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=lp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(AQ,"lmdbSearchByConditions");async function HI(e,t,r,n){let s=new fQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===V_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,xI.searchByType(e,s,i,n).map(o=>o.value)}a(HI,"executeConditionSearch")});var Yc=T((hue,GI)=>{"use strict";var OQ=M().OPERATIONS_ENUM,dp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=OQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};GI.exports=dp});var fp=T((pue,zI)=>{"use strict";var YI=Jn(),KI=Yc(),WI=$c(),QI=Fc(),ar=M(),kI=J(),VI=$e(),{getTransactionAuditStorePath:bQ,getSchemaPath:NQ}=We(),$I=V();zI.exports=yQ;async function yQ(e){try{if(kI.isEmpty(global.hdb_schema[e.schema])||kI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await IQ(e),await wQ(e);let t=NQ(e.schema,e.table);try{await VI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$I.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bQ(e.schema,e.table);await VI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$I.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(yQ,"lmdbDropTable");async function IQ(e){let t=new YI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await WI(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 KI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await QI(s)}a(IQ,"deleteAttributesFromSystem");async function wQ(e){let t=new YI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await WI(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 KI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await QI(s)}catch(i){throw i}}a(wQ,"dropTableFromSystem")});var XI=T((Tue,JI)=>{"use strict";var CQ=require("fs-extra"),LQ=Jn(),DQ=Zo(),MQ=Yc(),UQ=fp(),PQ=Fc(),vQ=sp(),BQ=$c(),bs=M(),{getSchemaPath:HQ}=We(),{handleHDBError:xQ,hdb_errors:qQ}=Z(),{HDB_ERROR_MSGS:FQ,HTTP_STATUS_CODES:GQ}=qQ;JI.exports=kQ;async function kQ(e){let t;try{t=await VQ(e.schema);let r=new LQ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await BQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await UQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new MQ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await PQ(s);let i=HQ(t);await CQ.remove(i)}catch(r){throw r}}a(kQ,"lmdbDropSchema");async function VQ(e){let t=new DQ(bs.SYSTEM_SCHEMA_NAME,bs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await vQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw xQ(new Error,FQ.SCHEMA_NOT_FOUND(e),GQ.NOT_FOUND,void 0,void 0,!0);return n}a(VQ,"validateDropSchema")});var hp=T((Rue,jI)=>{"use strict";var Ep=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};jI.exports=Ep});var ew=T((bue,ZI)=>{"use strict";var $Q=require("fs-extra"),$_=$e(),{getTransactionAuditStorePath:YQ}=We(),mp=ht(),Oue=hp();ZI.exports=KQ;async function KQ(e){let t;try{let r=YQ(e.schema,e.table);await $Q.mkdirp(r),t=await $_.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{$_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),$_.createDBI(t,mp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),$_.createDBI(t,mp.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(KQ,"createTransactionsAuditEnvironment")});var sw=T((yue,nw)=>{"use strict";var pp=M(),tw=$e(),WQ=Fo(),{getSystemSchemaPath:QQ,getSchemaPath:zQ}=We(),JQ=Bi(),XQ=S_(),Sp=p_(),jQ=V(),ZQ=ew(),gp=JQ.hdb_table,rw=[];for(let e=0;e<gp.attributes.length;e++)rw.push(gp.attributes[e].attribute);nw.exports=ez;async function ez(e,t){let r=zQ(t.schema,t.table),n=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Sp(t.schema,t.table,pp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Sp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await tw.createEnvironment(r,t.table),e!==void 0){let o=await tw.openEnvironment(QQ(),pp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await WQ.insertRecords(o,gp.hash_attribute,rw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Tp(n),await Tp(s),await Tp(i)}await ZQ(t)}catch(o){throw o}}a(ez,"lmdbCreateTable");async function Tp(e){try{await XQ(e)}catch(t){jQ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Tp,"createAttribute")});var ow=T((wue,iw)=>{"use strict";var tz=wc(),rz=Uc(),nz=B_(),Kc=M(),sz=Fo().updateRecords,iz=$e(),{getSchemaPath:oz}=We(),az=xc(),cz=V();iw.exports=uz;async function uz(e){try{let{schema_table:t,attributes:r}=tz(e);rz(e,r,t.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(r.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await nz(e.hdb_auth_header,t,r),s=oz(e.schema,e.table),i=await iz.openEnvironment(s,e.table),o=await sz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await az(e,o)}catch(c){cz.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(uz,"lmdbUpdateRecords")});var cw=T((Lue,aw)=>{"use strict";var lz=M().OPERATIONS_ENUM,Rp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=lz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};aw.exports=Rp});var lw=T((Uue,uw)=>{"use strict";var Mue=cw(),_z=wc(),dz=Uc(),fz=B_(),Wc=M(),Ez=Fo().upsertRecords,hz=$e(),{getSchemaPath:mz}=We(),pz=xc(),Sz=V(),{handleHDBError:Tz,hdb_errors:gz}=Z();uw.exports=Rz;async function Rz(e){let t;try{t=_z(e)}catch(u){throw Tz(u,u.message,gz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;dz(e,n,r.hash_attribute),e.schema!==Wc.SYSTEM_SCHEMA_NAME&&(n.includes(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Wc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await fz(e.hdb_auth_header,r,n),i=mz(e.schema,e.table),o=await hz.openEnvironment(i,e.table),c=await Ez(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await pz(e,c)}catch(u){Sz.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(Rz,"lmdbUpsertRecords")});var dw=T((vue,_w)=>{"use strict";var Ap=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};_w.exports=Ap});var Ew=T((Hue,fw)=>{"use strict";var Op=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}};fw.exports=Op});var pw=T((Fue,mw)=>{"use strict";var bp=$e(),{getTransactionAuditStorePath:Az}=We(),que=dw(),Qc=ht(),Oz=J(),hw=Ew(),bz=require("util").promisify,Nz=bz(setTimeout),yz=1e4,Iz=100;mw.exports=wz;async function wz(e){let t=Az(e.schema,e.table),r=await bp.openEnvironment(t,e.table,!0),n=bp.listDBIs(r);bp.initializeDBIs(r,Qc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new hw;do s=await Cz(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 Nz(Iz);while(s.transactions_deleted>0);return i}a(wz,"deleteAuditLogsBefore");async function Cz(e,t){let r=new hw;try{let n=e.dbis[Qc.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[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Oz.isEmpty(c)||(s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Qc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>yz)break}return await s,r}catch(n){throw n}}a(Cz,"deleteTransactions")});var Tw=T((kue,Sw)=>{"use strict";var Np=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Sw.exports=Np});var Rw=T((Yue,gw)=>{"use strict";var Lz=Jn(),Dz=Yc(),$ue=Tw(),Xn=M(),Mz=J(),yp=$e(),Uz=Bi(),Pz=$c(),vz=Fc(),{getSchemaPath:Bz}=We();gw.exports=Hz;async function Hz(e,t=!0){let r;e.schema===Xn.SYSTEM_SCHEMA_NAME?r=Uz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await qz(e),s=Bz(e.schema,e.table),i=await yp.openEnvironment(s,e.table);return t===!0&&await xz(e,i,r.hash_attribute),yp.dropDBI(i,e.attribute),n}a(Hz,"lmdbDropAttribute");async function xz(e,t,r){let n=yp.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(xz,"removeAttributeFromAllObjects");async function qz(e){let t=new Lz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Pz(t)).filter(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Mz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Dz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return vz(i)}a(qz,"dropAttributeFromSystem")});var Iw=T((Que,yw)=>{"use strict";var Ip=$e(),ea=ht(),Wue=Dr(),wp=M(),Aw=J(),{getTransactionAuditStorePath:Fz}=We(),Gz=Xo(),Y_=Qo(),kz=V();yw.exports=Vz;async function Vz(e){let t=Fz(e.schema,e.table),r=await Ip.openEnvironment(t,e.table,!0),n=Ip.listDBIs(r);Ip.initializeDBIs(r,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Ow(r,e.search_values);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Yz(r,e.search_values,s);case wp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return $z(r,e.search_values);default:return Ow(r)}}a(Vz,"readAuditLog");function Ow(e,t=[0,Date.now()]){Aw.isEmpty(t[0])&&(t[0]=0),Aw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ea.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 Y_,s))}a(Ow,"searchTransactionsByTimestamp");function $z(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[ea.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Nw(e,i))}return Object.fromEntries(r)}a($z,"searchTransactionsByUsername");function Yz(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Gz.equals(e,ea.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ea.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=Nw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);bw(u,"records",r,l,o),bw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Yz,"searchTransactionsByHashValues");function bw(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],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Y_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Y_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(bw,"loopRecords");function Nw(e,t){let r=[];try{let n=e.dbis[ea.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 Y_,i);r.push(o)}}catch(i){kz.warn(i)}return r}catch(n){throw n}}a(Nw,"batchSearchTransactions")});var Cw=T((jue,ww)=>{"use strict";var{getSchemaPath:Jue}=We(),Xue=$e(),{database:Kz}=(ge(),ee(xe));ww.exports={writeTransaction:Wz};async function Wz(e,t,r){return Kz({database:e,table:t}).transaction(r)}a(Wz,"writeTransaction")});var Uw=T((ele,Mw)=>{"use strict";var{getSchemaPath:Lw}=We(),Dw=$e();Mw.exports={flush:Qz,resetReadTxn:zz};async function Qz(e,t){return(await Dw.openEnvironment(Lw(e,t),t.toString())).flushed}a(Qz,"flush");async function zz(e,t){try{(await Dw.openEnvironment(Lw(e,t),t.toString())).resetReadTxn()}catch{}}a(zz,"resetReadTxn")});var Hw=T((rle,Bw)=>{"use strict";var{Readable:Jz}=require("stream"),{getDatabases:Xz}=(ge(),ee(xe)),{readSync:jz,openSync:Zz,createReadStream:Pw}=require("fs"),{open:eJ}=require("lmdb"),vw=a_(),tJ=u_(),{AUDIT_STORE_OPTIONS:rJ}=(Pi(),ee(xw)),{INTERNAL_DBIS_NAME:nJ,AUDIT_STORE_NAME:sJ}=ht();Bw.exports=oJ;var Cp=32768,iJ=100;async function oJ(e){let t=e.database||e.schema||"data",r=Xz()[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 l=_.dbisDB,d=eJ({noSync:!0,maxDbs:tJ.MAX_DBS}),f,E=d.openDB(nJ,new vw(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,w){w.encoding="binary",w.encoder=void 0;let B=d.openDB(I,w),K=l.openDB(I,w);for(let{key:q,version:P,value:Q}of K.getRange({transaction:h,versions:K.useVersions}))f=B.put(q,Q,P),p++%iJ===0&&(await new Promise(Y=>setTimeout(Y,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:w}of l.getRange({transaction:h,start:!1}))if(s.some(B=>I.startsWith?.(B+"/"))){E.put(I,w);let[,B]=I.split("/"),K=!B,q=new vw(!K,K);await S(I,q)}e.include_audit&&await S(sJ,Object.assign({},rJ)),await f;let A=Pw(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=Zz(o.path);return o.transaction(()=>{let _=Buffer.alloc(Cp);jz(c,_,0,Cp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Pw(null,{fd:c,start:Cp}),f=new Jz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(oJ,"getBackup")});var Gw=T((sle,Fw)=>{"use strict";var aJ=V(),{handleHDBError:cJ}=Z(),uJ=pb(),lJ=S_(),_J=Xm(),dJ=Xy(),fJ=Fc(),EJ=sp(),hJ=OI(),mJ=MI(),pJ=$c(),SJ=FI(),TJ=XI(),gJ=sw(),RJ=ow(),AJ=lw(),OJ=pw(),bJ=fp(),NJ=Rw(),yJ=Iw(),IJ=Cw(),qw=Uw(),wJ=Hw(),Lp=class extends uJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return SJ(t)}async getDataByHash(t){return await EJ(t)}async searchByHash(t){return await hJ(t)}async getDataByValue(t,r){return await mJ(t,r)}async searchByValue(t){return await pJ(t)}async createSchema(t){return await dJ(t)}async dropSchema(t){return await TJ(t)}async createTable(t,r){return await gJ(t,r)}async dropTable(t){return await bJ(t)}async createAttribute(t){return await lJ(t)}async createRecords(t){return await _J(t)}async updateRecords(t){return await RJ(t)}async upsertRecords(t){try{return await AJ(t)}catch(r){throw cJ(r,null,null,aJ.ERR,r)}}async deleteRecords(t){return await fJ(t)}async dropAttribute(t){return await NJ(t)}async deleteAuditLogsBefore(t){return await OJ(t)}async readAuditLog(t){return await yJ(t)}writeTransaction(t,r,n){return IJ.writeTransaction(t,r,n)}flush(t,r){return qw.flush(t,r)}resetReadTxn(t,r){return qw.resetReadTxn(t,r)}getBackup(t){return wJ(t)}};Fw.exports=Lp});function MJ(){DJ=setInterval(function(){for(let e of Dp)if(e.stale){let t=e[Re]?.url;kw.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},LJ).unref()}var Mp,kw,CJ,Dp,zi,K_,LJ,DJ,Up=Ae(()=>{Mp=v(Dr()),kw=v(V());yn();CJ=100,Dp=new Set,zi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),Dp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Dp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Mp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{try{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(l){throw this.abort(),l}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,n)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){n>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);s=s||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<CJ>>n?u():s=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),s)return s.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},K_=class extends zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Mp.getNextMonotonicTime)())}getReadTxn(){}},LJ=3e4;a(MJ,"startMonitoringTxns");MJ()});function Qe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&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 zi;e.timestamp&&(n.timestamp=e.timestamp),n[Re]=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 u=n.commit(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var Vw,Ji=Ae(()=>{Vw=require("../../index");yn();Up();a(Qe,"transaction");(0,Vw._assignPackageExport)("transaction",Qe);Qe.commit=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Qe.abort=function(e){let t=(e[Re]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var jw={};Ve(jw,{ResourceBridge:()=>Bp});function Hp({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 Yw(e,t){let r=jn(e),n=Hp(e,r);if(!r)throw new Dn.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;Qe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&Q_(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function jn(e){let t=e.database||e.schema||PJ,r=Mn()[t];if(!r)throw(0,Dn.handleHDBError)(new Error,UJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Kw(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*Ww(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:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var Qw,W_,Dn,zw,Jw,Un,Pp,vp,Xw,UJ,PJ,vJ,BJ,$w,Bp,Zw=Ae(()=>{"use strict";Qw=v(Gw()),W_=v(jo()),Dn=v(Z());ge();zw=v(wc()),Jw=v(Uc()),Un=v(M()),Pp=v(As()),vp=v(Ln()),Xw=v(J());Ji();z_();({HDB_ERROR_MSGS:UJ}=Dn.hdb_errors),PJ="data",vJ=1e4,BJ=10,Bp=class extends Qw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),$w=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,W_.default)(t,"conditions");if(r)throw(0,Dn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=jn(t);if(!n)throw new Dn.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:Hp(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 Dn.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}]}_t({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await jn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=jn(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){jn(t).dropTable()}createSchema(t){return zc({database:t.schema,table:null}),Pp.signalSchemaChange(new vp.SchemaEventMsg(process.pid,Un.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xp(t.schema),Pp.signalSchemaChange(new vp.SchemaEventMsg(process.pid,Un.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,$w.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,zw.default)(t);(0,Jw.default)(t,n,r.primaryKey);let s,i=Mn()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Qe(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(f=>f.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=Q_(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Mn()[t.schema][t.table],n={user:t.hdb_user};return Qe(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return Kw(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mn()[t.schema][t.table];if(!r.createdTimeProperty)throw new Dn.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:Un.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,Xw.async_set_timeout)(BJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%vJ===0&&await _();return u.length>0&&await _(),s?Kw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,W_.default)(t,"hashes");if(r)throw r;return Yw(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Yw(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Un.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,W_.default)(t,"value");if(n)throw n;let s=jn(t);if(!s)throw new Dn.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===Un.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:Hp(t,s)})}async getDataByValue(t,r){let n=new Map,s=jn(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){jn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return jn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=jn(t),n={};switch(t.search_type){case Un.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 Un.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Ww(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Ww(r,t.search_values?.[0],t.search_values?.[1])}}};a(Hp,"getSelect");a(Yw,"getRecords");a(jn,"getTable");a(Kw,"createDeleteResponse");a(Ww,"groupRecordsInHistory")});var Cn=T((Sle,eC)=>{"use strict";var{ResourceBridge:HJ}=(Zw(),ee(jw)),xJ=j();xJ.initSync();var J_;function qJ(){return J_||(J_=new HJ,J_)}a(qJ,"getBridge");eC.exports=qJ()});var sC=T((gle,nC)=>{"use strict";var tC=require("lodash"),Jc=require("mathjs"),FJ=require("jsonata"),rC=J();nC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tC.uniqWith(e,tC.isEqual):e,searchJSON:GJ,mad:Xc.bind(null,Jc.mad),mean:Xc.bind(null,Jc.mean),mode:Xc.bind(null,Jc.mode),prod:Xc.bind(null,Jc.prod),median:Xc.bind(null,Jc.median)};function Xc(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(Xc,"aggregateFunction");function GJ(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(rC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rC.isEmpty(this.__ala__.res[r])){let n=FJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(GJ,"searchJSON")});var oC=T((Ale,iC)=>{"use strict";var pt=require("moment"),qp="YYYY-MM-DDTHH:mm:ss.SSSZZ";pt.suppressDeprecationWarnings=!0;iC.exports={current_date:()=>pt().utc().format("YYYY-MM-DD"),current_time:()=>pt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return pt(e).utc().format("YYYY");case"month":return pt(e).utc().format("MM");case"day":return pt(e).utc().format("DD");case"hour":return pt(e).utc().format("HH");case"minute":return pt(e).utc().format("mm");case"second":return pt(e).utc().format("ss");case"millisecond":return pt(e).utc().format("SSS");default:break}},date:e=>pt(e).utc().format(qp),date_format:(e,t)=>pt(e).utc().format(t),date_add:(e,t,r)=>pt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>pt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=pt(e).utc(),s=pt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>pt().utc().valueOf(),get_server_time:()=>pt().format(qp),offset_utc:(e,t)=>pt(e).utc().utcOffset(t).format(qp)}});var lC=T((Ole,uC)=>{"use strict";var kJ=require("@turf/area"),VJ=require("@turf/length"),$J=require("@turf/circle"),YJ=require("@turf/difference"),KJ=require("@turf/distance"),WJ=require("@turf/boolean-contains"),QJ=require("@turf/boolean-equal"),zJ=require("@turf/boolean-disjoint"),JJ=require("@turf/helpers"),aC=M(),me=J(),Ns=V();uC.exports={geoArea:XJ,geoLength:jJ,geoCircle:ZJ,geoDifference:e2,geoDistance:cC,geoNear:t2,geoContains:r2,geoEqual:n2,geoCrosses:s2,geoConvert:i2};function XJ(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return kJ.default(e)}catch(t){return Ns.trace(t,e),NaN}}a(XJ,"geoArea");function jJ(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return VJ.default(e,{units:t||"kilometers"})}catch(r){return Ns.trace(r,e),NaN}}a(jJ,"geoLength");function ZJ(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return $J.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(ZJ,"geoCircle");function e2(e,t){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return YJ(e,t)}catch(r){return Ns.trace(r,e,t),NaN}}a(e2,"geoDifference");function cC(e,t,r){if(me.isEmpty(e))return NaN;if(me.isEmpty(t))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return KJ.default(e,t,{units:r||"kilometers"})}catch(n){return Ns.trace(n,e,t),NaN}}a(cC,"geoDistance");function t2(e,t,r,n){if(me.isEmpty(e)||me.isEmpty(t))return!1;if(me.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cC(e,t,n)<=r}catch(s){return Ns.trace(s,e,t),!1}}a(t2,"geoNear");function r2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return WJ.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(r2,"geoContains");function n2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return QJ.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(n2,"geoEqual");function s2(e,t){if(me.isEmpty(e)||me.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=me.autoCastJSON(e)),typeof t=="string"&&(t=me.autoCastJSON(t));try{return!zJ.default(e,t)}catch(r){return Ns.trace(r,e,t),!1}}a(s2,"geoCrosses");function i2(e,t,r){if(me.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(me.isEmpty(t))throw new Error("geo_type is required");if(me.isEmpty(aC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),JJ[t](e,r)}a(i2,"geoConvert")});var X_=T((Nle,_C)=>{var Xi=sC(),xr=oC(),Zn=lC();_C.exports=e=>{e.aggr.mad=e.aggr.MAD=Xi.mad,e.aggr.mean=e.aggr.MEAN=Xi.mean,e.aggr.mode=e.aggr.MODE=Xi.mode,e.aggr.prod=e.aggr.PROD=Xi.prod,e.aggr.median=e.aggr.MEDIAN=Xi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Xi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Xi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=xr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=xr.current_time,e.fn.extract=e.fn.EXTRACT=xr.extract,e.fn.date=e.fn.DATE=xr.date,e.fn.date_format=e.fn.DATE_FORMAT=xr.date_format,e.fn.date_add=e.fn.DATE_ADD=xr.date_add,e.fn.date_sub=e.fn.DATE_SUB=xr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=xr.date_diff,e.fn.now=e.fn.NOW=xr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=xr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=xr.get_server_time,e.fn.getdate=e.fn.GETDATE=xr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=xr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Zn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Zn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Zn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Zn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Zn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Zn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Zn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Zn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Zn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Zn.geoNear}});var hC=T((yle,EC)=>{"use strict";var jc=require("lodash"),cr=require("alasql");cr.options.cache=!1;var o2=X_(),dC=require("clone"),j_=require("recursive-iterator"),ue=V(),we=J(),ta=Cn(),a2=M(),{hdb_errors:c2}=Z(),{getDatabases:fC}=(ge(),ee(xe)),u2="IS NULL",Pn="There was a problem performing this search. Please check the logs and try again.";o2(cr);var Fp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw ue.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(),we.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!we.isEmptyOrZeroLength(n))return ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ue.error(n),new Error(Pn)}if(Object.keys(this.data).length===0)return ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ue.error("Error thrown from processJoins in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ue.error(n),new Error(Pn)}try{return t=await this._finalSQL(),t}catch(n){throw ue.error("Error thrown from finalSQL in SQLSearch class method search."),ue.error(n),new Error(Pn)}}_getColumns(){let t=new j_(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(dC(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jc.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=fC()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(we.isEmpty(this.statement.where)){ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new j_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!we.isEmpty(r)&&r.right)if(we.isNotEmptyAndHasValue(r.right.value)){let n=we.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new cr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=we.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new cr.yy.LogicValue({value:i}):n instanceof cr.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new cr.yy.NumValue({value:i}))});if(t){ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new j_(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(!we.isEmpty(a2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(we.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(we.isEmptyOrZeroLength(r.left.columnid)||we.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(we.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"=":!we.isEmpty(r.right.value)||!we.isEmpty(r.left.value)?n.add(we.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from)&&we.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&&jc.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(we.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);we.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(we.isEmptyOrZeroLength(this.all_table_attributes)&&!we.isEmptyOrZeroLength(this.columns.columns))return t;if(we.isEmptyOrZeroLength(this.all_table_attributes)&&we.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await cr.promise(r)}catch(r){throw ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ue.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(dC(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(we.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(u2)>-1&&this.tables.forEach(s=>{let i={columnid:fC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=jc.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]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!we.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await ta.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await ta.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(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ue.error(l),new Error(Pn)}else if(!we.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!we.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await ta.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ue.error(l),new Error(Pn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await ta.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of l)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(l){throw ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ue.error(l),new Error(Pn)}}}_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 cr.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 cr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new cr.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 cr.yy.FuncValue:new cr.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,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.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 l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await cr.promise(h,t),t=null}catch(E){throw ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ue.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=jc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new j_(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=jc.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 ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ue.error(i),new Error(Pn)}}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 l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await ta.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ue.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,u=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===u}).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();ue.trace(`Final SQL: ${s}`),n=await cr.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ue.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 ue.error(c2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ue.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 u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});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 ta.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw ue.error("There was an error when processing this SQL operation. Check your logs"),ue.error(o),new Error(Pn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EC.exports=Fp});var tn=T((wle,mC)=>{"use strict";var l2=hb();mC.exports={searchByConditions:d2,searchByHash:f2,searchByValue:E2,search:h2};var Gp=Cn(),{transformReq:kp}=J(),_2=hC();async function d2(e){return kp(e),Gp.searchByConditions(e)}a(d2,"searchByConditions");async function f2(e){kp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gp.searchByHash(e))r&&t.push(r);return t}a(f2,"searchByHash");async function E2(e){kp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gp.searchByValue(e))t.push(r);return t}a(E2,"searchByValue");function h2(e,t){try{let r=new l2(e);r.validate(),new _2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(h2,"search")});var Z_=T((Lle,pC)=>{"use strict";var m2=Cn();pC.exports={writeTransaction:p2};function p2(e,t,r){return m2.writeTransaction(e,t,r)}a(p2,"writeTransaction")});var RC=T((Ule,gC)=>{"use strict";var S2=tn(),T2=Rs(),SC=V(),g2=rn(),Mle=Z_(),R2=require("clone"),$p=require("alasql"),A2=X_(),TC=require("util"),O2=TC.promisify(T2.getTableSchema),b2=TC.promisify(S2.search),N2=M(),Vp=J();A2($p);gC.exports={update:I2};var y2="There was a problem performing this update. Please check the logs and try again.";async function I2({statement:e,hdb_user:t}){let r=await O2(e.table.databaseid,e.table.tableid),n=w2(e.columns);Vp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=R2(s),c=Vp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=$p.parse(u).statements[0],l=await b2(_),d=C2(n,l);return L2(o,d,t)}a(I2,"update");function w2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=$p.compile(`SELECT ${r.expression.toString()} AS [${N2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw SC.error(t),new Error(y2)}}a(w2,"createUpdateRecord");function C2(e,t){return Vp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(C2,"buildUpdateRecords");async function L2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await g2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){SC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(L2,"updateRecords")});var OC=T((Hle,AC)=>{var D2=require("alasql"),M2=tn(),U2=V(),P2=Cn(),Kp=require("util"),Yp=J(),v2=M(),B2=Rs(),vle=Z_(),Ble=rn(),H2="record",x2="successfully deleted",q2=Kp.callbackify(V2),F2=Kp.promisify(M2.search),G2=Kp.promisify(B2.getTableSchema);AC.exports={convertDelete:q2};function k2(e){return`${e.deleted_hashes.length} ${H2}${e.deleted_hashes.length===1?"":"s"} ${x2}`}a(k2,"generateReturnMessage");async function V2({statement:e,hdb_user:t}){let r=await G2(e.table.databaseid,e.table.tableid);Yp.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Yp.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=D2.parse(o).statements[0],u={operation:v2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await F2(c);let _=await P2.deleteRecords(u);return Yp.isEmptyOrZeroLength(_.message)&&(_.message=k2(_)),delete _.txn_time,_}catch(_){throw U2.error(_),_.hdb_code?_.message:_}}a(V2,"convertDelete")});var wC=T((qle,IC)=>{"use strict";var $2=xi(),{hdb_errors:bC}=Z(),{getDatabases:NC}=(ge(),ee(xe));IC.exports={checkSchemaExists:yC,checkSchemaTableExists:Y2,schema_describe:$2};async function yC(e){if(!NC()[e])return bC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yC,"checkSchemaExists");async function Y2(e,t){let r=await yC(e);if(r)return r;if(!NC()[e][t])return bC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Y2,"checkSchemaTableExists")});var Zc=T((Gle,K2)=>{K2.exports={name:"harperdb",version:"4.3.0-alpha.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.3-beta.2",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var nu={};Ve(nu,{addAnalyticsListener:()=>ru,recordAction:()=>qr,recordActionBinary:()=>nn,setAnalyticsEnabled:()=>W2});function W2(e){xC=e}function qr(e,t,r,n,s){if(!xC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=rd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},rd.set(i,o)}ed||Q2()}function nn(e,t,r,n,s){qr(!!e,t,r,n,s)}function ru(e){GC.push(e)}function Q2(){ed=performance.now(),setTimeout(async()=>{let e=performance.now()-ed;ed=0;let t=[],r={time:Date.now(),period:e,threadId:ji.threadId,metrics:t};for(let[s,i]of rd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of kC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await VC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ji.threadId,byThread:!0,...n});for(let s of GC)s(t);rd=new Map,ji.parentPort?ji.parentPort.postMessage({type:FC,report:r}):KC({report:r})},qC).unref()}async function z2(e,t=6e4){let r=zp(),n=$C(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let I of S||[]){let{path:w,method:B,type:K,metric:q,count:P,total:Q,distribution:Y,threads:z,...re}=I;P||(P=1);let Ie=q+(w?"-"+w:"");B!==void 0&&(Ie+="-"+B),K!==void 0&&(Ie+="-"+K);let ne=o.get(Ie);if(ne){if(ne.threads){let de=ne.threads[A];if(de)ne=de;else{ne.threads[A]=Object.assign({},re);continue}}ne.count||(ne.count=1);let ct=ne.count;for(let de in re){let ut=re[de];typeof ut=="number"&&(ne[de]=(ne[de]*ct+ut*P)/(ct+P))}ne.count+=P,Q>=0&&(ne.total+=Q,ne.ratio=ne.total/ne.count)}else ne=Object.assign({period:t},I),delete ne.distribution,o.set(Ie,ne),ne.byThread&&(ne.threads=[],ne.threads[A]=Object.assign({},re),u.push(ne));if(Y){Y=Y.map(de=>typeof de=="number"?{value:de,count:1}:de);let ct=c.get(Ie);ct?ct.push(...Y):c.set(Ie,Y)}}await VC()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:w,total:B,distribution:K,threads:q,...P}=h;q=q.filter(Q=>Q);for(let Q in P){if(typeof h[Q]!="number")continue;let Y=0;for(let z of q){let re=z[Q];typeof re=="number"&&(Y+=re)}h[Q]=Y}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((de,ut)=>de.value>ut.value?1:-1);let A=S.count-1,I=[],w=0,B=0,K;for(let de of kC){let ut=A*de;for(;w<ut;)K=p[B++],w+=K.count,B===1&&w--;let Tn=p[B>1?B-2:0];K||(K=p[0]),I.push(K.value-(K.value-Tn.value)*(w-ut)/K.count)}let[q,P,Q,Y,z,re,Ie,ne,ct]=I;Object.assign(S,{p1:q,p10:P,p25:Q,median:Y,p75:z,p90:re,p95:Ie,p99:ne,p999:ct})}let l;for(let[h,p]of o)p.id=(0,td.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,td.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-CC,active:E-LC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}CC=f,LC=E}async function DC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function zp(){return MC||(MC=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $C(){return UC||(UC=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function j2(){YC=!0;let e=(0,tu.get)(Qp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await z2(qC,e),await DC(zp(),J2),await DC($C(),X2)},Math.min(e/2,2147483647)).unref()}function KC(e,t){let r=e.report;r.threadId=t?.threadId||ji.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(PC+=n.mean*n.count);r.totalBytesProcessed=PC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vC.get(t))}),vC.set(t,t.performance.eventLoopUtilization())),r.id=(0,td.getNextMonotonicTime)(),zp().primaryStore.put(r.id,r),YC||j2(),Z2&&(WC=t4(r))}async function t4(e){if(await WC,!ni){let r=(0,eu.dirname)((0,HC.getLogFilePath)());try{ni=await(0,Wp.open)((0,eu.join)(r,"analytics.log"),"r+")}catch{ni=await(0,Wp.open)((0,eu.join)(r,"analytics.log"),"w+")}}let t=(await ni.stat()).size;if(t>e4){let r=Buffer.alloc(t);await ni.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ni.write(r,{position:0}),await ni.truncate(r.length),t=r.length}await ni.write(JSON.stringify(e)+`
8
+ `,t)}var ji,BC,HC,eu,Wp,td,tu,Qp,rd,xC,ed,qC,FC,GC,kC,CC,LC,VC,J2,X2,MC,UC,YC,PC,vC,Z2,WC,ni,e4,ys=Ae(()=>{ji=require("worker_threads"),BC=v(tt());ge();HC=v(V()),eu=require("path"),Wp=require("fs/promises"),td=v(Dr()),tu=v(j()),Qp=v(M());nr();(0,tu.initSync)();rd=new Map,xC=(0,tu.get)(Qp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(W2,"setAnalyticsEnabled");a(qr,"recordAction");lt.recordAnalytics=qr;a(nn,"recordActionBinary");ed=0,qC=1e3,FC="analytics-report",GC=[];a(ru,"addAnalyticsListener");kC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Q2,"sendAnalytics");a(z2,"aggregation");CC=0,LC=0,VC=a(()=>new Promise(setImmediate),"rest");a(DC,"cleanup");J2=36e5,X2=31536e6;a(zp,"getRawAnalyticsTable");a($C,"getAnalyticsTable");(0,BC.setChildListenerByType)(FC,KC);a(j2,"startScheduledTasks");PC=0,vC=new Map,Z2=!1;a(KC,"recordAnalytics");e4=1e6;a(t4,"logAnalytics")});var St=T((t_e,fL)=>{"use strict";var Gt=j();Gt.initSync();var r4=require("fs-extra"),n4=require("semver"),ou=require("path"),{monotonicFactory:s4}=require("ulidx"),zC=s4(),i4=require("util"),JC=require("child_process"),o4=i4.promisify(JC.exec),a4=JC.spawn,Oe=nt(),Me=M(),Zp=J(),Fr=V(),nd=gs(),c4=Z_(),su=Lr(),{onMessageByType:u4}=tt(),{isMainThread:l4}=require("worker_threads"),{Encoder:_4,decode:eS}=require("msgpackr"),XC=new _4,{isEmpty:ro}=Zp,jC=vr(),d4=48*36e11,f4=5e9;l4&&u4(Me.ITC_EVENT_TYPES.RESTART,()=>{sn=void 0,to=void 0});var{connect:E4,StorageType:ZC,RetentionPolicy:eL,AckPolicy:sd,DeliverPolicy:id,DiscardPolicy:h4,NatsConnection:Xle,JetStreamManager:jle,JetStreamClient:Zle,StringCodec:e_e,JSONCodec:m4,createInbox:tS,headers:p4,ErrorCode:QC}=require("nats"),{PACKAGE_ROOT:S4}=M(),T4=Zc(),{recordAction:g4}=(ys(),ee(nu)),tL=m4(),R4="clustering",A4=T4.engines[Oe.NATS_SERVER_NAME],O4=ou.join(S4,"dependencies"),jp=ou.join(O4,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),Jp,Xp,iu,Zi,eo;fL.exports={runCommand:rL,checkNATSServerInstalled:b4,createConnection:rS,getConnection:od,getJetStreamManager:au,getJetStream:sL,getNATSReferences:ur,getServerList:y4,createLocalStream:nS,listStreams:iL,deleteLocalStream:I4,getServerConfig:cu,listRemoteStreams:w4,viewStream:C4,viewStreamIterator:L4,publishToStream:D4,createWorkQueueStream:M4,addSourceToWorkStream:aL,request:P4,removeSourceFromWorkStream:uL,reloadNATS:sS,reloadNATSHub:v4,reloadNATSLeaf:B4,extractServerName:cL,requestErrorHandler:H4,updateWorkStream:x4,createLocalTableStream:_L,createTableStreams:q4,purgeTableStream:dL,purgeSchemaTableStreams:F4,getStreamInfo:G4,updateLocalStreams:V4,closeConnection:N4,getJsmServerName:uu,addNatsMsgHeader:oL,updateIngestStreamConsumer:U4,clearClientCache:nL};async function rL(e,t=void 0){let{stdout:r,stderr:n}=await o4(e,{cwd:t});if(n)throw new Error(n.replace(`
9
9
  `,""));return r.replace(`
10
- `,"")}a(tL,"runCommand");async function Q2(){try{await y2.access(Vp)}catch{return!1}let e=await tL(`${Vp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return I2.eq(t,K2)}a(Q2,"checkNATSServerInstalled");async function Wp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await XC.getClusterUser();if(Xi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}qr.trace("create nats connection called");let i=await x2({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Gt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gt.get(De.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),qr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&qr.error("Error with Nats client connection, connection closed",o),rL()}),i}a(Wp,"createConnection");function rL(){ls=void 0,Qi=void 0,zi=void 0,Ji=void 0}a(rL,"clearClientCache");async function z2(){ls&&(await ls.drain(),ls=void 0,Qi=void 0,zi=void 0,Ji=void 0)}a(z2,"closeConnection");var ls,Ji;async function ud(){return Ji||(Ji=Wp(Gt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ls=await Ji),ls||Ji}a(ud,"getConnection");async function iu(){if(Qi)return Qi;Xi(ls)&&await ud();let{domain:e}=ou(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Xi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Qi=await ls.jetstreamManager({domain:e,timeout:6e4}),Qi}a(iu,"getJetStreamManager");async function sL(){if(zi)return zi;Xi(ls)&&await ud();let{domain:e}=ou(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Xi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return zi=ls.jetstream({domain:e,timeout:6e4}),zi}a(sL,"getJetStream");async function lr(){let e=ls||await ud(),t=Qi||await iu(),r=zi||await sL();return{connection:e,jsm:t,js:r}}a(lr,"getNATSReferences");async function J2(e){let t=Gt.get(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await XC.getClusterUser(),n=await Wp(t,r,s),i=Kp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=eL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await $p.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(J2,"getServerList");async function Qp(e,t){let{jsm:r}=await lr(),s=Gt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Gt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Gt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:jC.File,retention:ZC.Limits,subjects:t,discard:F2.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Qp,"createLocalStream");async function nL(){let{jsm:e}=await lr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(nL,"listStreams");async function X2(e){let{jsm:t}=await lr();await t.streams.delete(e)}a(X2,"deleteLocalStream");async function j2(e){let{connection:t}=await lr(),r=[],s=Kp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(eL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(j2,"listRemoteStreams");async function Z2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await lr(),i=QC(),o={durable_name:i,ack_policy:ad.Explicit};t&&(o.deliver_policy=cd.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=Yp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Re.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Z2,"viewStream");async function*e4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await lr(),i=QC(),o={durable_name:i,ack_policy:ad.Explicit};t&&(o.deliver_policy=cd.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=Yp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Re.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(e4,"viewStreamIterator");async function t4(e,t,r,s){qr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=iL(s,r);let{js:n}=await lr(),i=await au(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:JC.encode(s);try{qr.trace(`publishToStream publishing to subject: ${o}`),$2(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return uL(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){qr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Qp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(t4,"publishToStream");function iL(e,t){t===void 0&&(t=q2());let r=Gt.get(De.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Re.MSG_HEADERS.ORIGIN)&&r&&t.append(Re.MSG_HEADERS.ORIGIN,r),t}a(iL,"addNatsMsgHeader");function ou(e){e=e.toLowerCase();let t=nu.join(Gt.get(De.CONFIG_PARAMS.ROOTPATH),Y2);if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Xi(kp)&&(kp={port:ru.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.HUB,config_file:Re.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:nu.join(t,Re.PID_FILES.HUB),hdb_nats_path:t}),kp;if(e===De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Xi(qp)&&(qp={port:ru.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,config_file:Re.NATS_CONFIG_FILES.LEAF_SERVER,domain:ru.getConfigFromFile(De.CONFIG_PARAMS.CLUSTERING_NODENAME)+Re.SERVER_SUFFIX.LEAF,pid_file_path:nu.join(t,Re.PID_FILES.LEAF),hdb_nats_path:t}),qp;qr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ou,"getServerConfig");async function r4(e){let{jsm:t}=await lr(),r=await au();try{await t.streams.add({name:e.stream_name,storage:jC.File,retention:ZC.Limits,max_age:B2,max_bytes:H2,subjects:[`${Re.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ad.Explicit,durable_name:e.durable_name,deliver_policy:cd.All,max_ack_pending:1e4});else throw s}}a(r4,"createWorkQueueStream");async function s4(){let{jsm:e}=await lr();(await e.consumers.info(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(qr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,Re.WORK_QUEUE_CONSUMER_NAMES.durable_name),qr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:ad.Explicit,durable_name:Re.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:cd.All,max_ack_pending:1e4}))}a(s4,"updateIngestStreamConsumer");async function oL(e,t,r){let{jsm:s}=await lr(),n=await s.streams.info(t),i=aL(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=od.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Re.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(oL,"addSourceToWorkStream");function aL(e){return e.split(".")[1]}a(aL,"extractServerName");async function cL(e,t,r){let{jsm:s}=await lr(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=od.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(cL,"removeSourceFromWorkStream");async function n4(e,t,r=6e4,s=Kp()){if(!$p.isObject(t))throw new Error("data param must be an object");let n=JC.encode(t),{connection:i}=await lr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return Yp(c.data)}a(n4,"request");function zp(e){return new Promise(async(t,r)=>{let s=D2(Vp,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(zp,"reloadNATS");async function i4(){let{pid_file_path:e}=ou(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await zp(e)}a(i4,"reloadNATSHub");async function o4(){let{pid_file_path:e}=ou(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await zp(e)}a(o4,"reloadNATSLeaf");function a4(e,t,r){let s;switch(e.code){case WC.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case WC.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(a4,"requestErrorHandler");async function c4(e,t){let r=t+Re.SERVER_SUFFIX.LEAF;await uL(async()=>{e.subscribe===!0?await oL(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await cL(r,Re.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(c4,"updateWorkStream");function uL(e){return U2.writeTransaction(De.SYSTEM_SCHEMA_NAME,De.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(uL,"exclusiveLock");async function lL(e,t){let r=od.createNatsTableStreamName(e,t),s=await au(),n=d4(e,t,s);await Qp(r,[n])}a(lL,"createLocalTableStream");async function u4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await lL(s,n)}}a(u4,"createTableStreams");async function _L(e,t,r=!1){if(Gt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let s=od.createNatsTableStreamName(e,t),{jsm:n}=await lr();r?await n.streams.purge(Re.WORK_QUEUE_CONSUMER_NAMES.stream_name):await n.streams.purge(s)}catch(s){if(s.message==="stream not found")qr.warn(s);else throw s}}a(_L,"purgeTableStream");async function l4(e,t){if(Gt.get(De.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await _L(e,t[r])}a(l4,"purgeSchemaTableStreams");async function _4(e){return(await iu()).streams.info(e)}a(_4,"getStreamInfo");function d4(e,t,r){return`${Re.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(d4,"createSubjectName");async function au(){if(su)return su;if(su=(await iu())?.nc?.info?.server_name,su===void 0)throw new Error("Unable to get jetstream manager server name");return su}a(au,"getJsmServerName");async function f4(){let e=await iu(),t=await au(),r=await nL();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=E4(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;qr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Re.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;qr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");qr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(f4,"updateLocalStreams");function E4(e){let{config:t}=e,r=!1;if(t.name===Re.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Re.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Gt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Gt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Gt.get(De.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(E4,"updateStreamLimits")});var fd=T((ule,mL)=>{"use strict";var ta=R_(),ra=IC(),h4=q(),m4=require("uuid").v4,cle=require("clone"),_d=On(),sa=w(),p4=require("util"),ii=Ds(),{handleHDBError:_r,hdb_errors:S4}=Z(),{HDB_ERROR_MSGS:ld,HTTP_STATUS_CODES:dr}=S4,{SchemaEventMsg:dd}=Us(),fL=mt(),{getDatabases:T4}=(Se(),te(Ge)),{transformReq:na}=z();mL.exports={createSchema:g4,createSchemaStructure:EL,createTable:R4,createTableStructure:hL,createAttribute:y4,dropSchema:A4,dropTable:O4,dropAttribute:b4,getBackup:I4};async function g4(e){let t=await EL(e);return _d.signalSchemaChange(new dd(process.pid,e.operation,e.schema)),t}a(g4,"createSchema");async function EL(e){let t=ta.schema_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);if(na(e),!await ra.checkSchemaExists(e.schema))throw _r(new Error,ld.SCHEMA_EXISTS_ERR(e.schema),dr.BAD_REQUEST,sa.LOG_LEVELS.ERROR,ld.SCHEMA_EXISTS_ERR(e.schema),!0);return await ii.createSchema(e),`database '${e.schema}' successfully created`}a(EL,"createSchemaStructure");async function R4(e){return na(e),e.hash_attribute=e.primary_key??e.hash_attribute,await hL(e)}a(R4,"createTable");async function hL(e){let t=ta.create_table_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);if(ta.validateTableResidence(e.residence),!await ra.checkSchemaTableExists(e.schema,e.table))throw _r(new Error,ld.TABLE_EXISTS_ERR(e.schema,e.table),dr.BAD_REQUEST,sa.LOG_LEVELS.ERROR,ld.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:m4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ii.createTable(s,e);else throw _r(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",dr.BAD_REQUEST);else await ii.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(hL,"createTableStructure");async function A4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ta.schema_object(e),s=t??r;if(s)throw _r(s,s.message,dr.BAD_REQUEST,void 0,void 0,!0);na(e);let n=await ra.checkSchemaExists(e.schema);if(n)throw _r(new Error,n,dr.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let i=await ra.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ii.dropSchema(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema)),await fL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(A4,"dropSchema");async function O4(e){let t=ta.table_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);na(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw _r(new Error,r,dr.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);return await ii.dropTable(e),await fL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(O4,"dropTable");async function b4(e){let t=ta.attribute_object(e);if(t)throw _r(t,t.message,dr.BAD_REQUEST,void 0,void 0,!0);na(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw _r(new Error,r,dr.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw _r(new Error,"You cannot drop a hash attribute",dr.BAD_REQUEST,void 0,void 0,!0);if(sa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw _r(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,dr.BAD_REQUEST,void 0,void 0,!0);try{return await ii.dropAttribute(e),N4(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw h4.error(`Got an error deleting attribute ${p4.inspect(e)}.`),s}}a(b4,"dropAttribute");function N4(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(N4,"dropAttributeFromGlobal");async function y4(e){na(e);let t=T4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw _r(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,dr.BAD_REQUEST,void 0,void 0,!0);return await ii.createAttribute(e),_d.signalSchemaChange(new dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(y4,"createAttribute");function I4(e){return ii.getBackup(e)}a(I4,"getBackup")});var SL=T((_le,pL)=>{"use strict";var{OPERATIONS_ENUM:w4}=w(),Jp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=w4.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};pL.exports=Jp});var Xp=T((Ele,OL)=>{"use strict";var C4=Ds(),fle=SL(),Ed=z(),hd=w(),L4=j(),{handleHDBError:TL,hdb_errors:D4}=Z(),{HDB_ERROR_MSGS:gL,HTTP_STATUS_CODES:RL}=D4,U4=Object.values(hd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),AL="To use this operation audit log must be enabled in harperdb-config.yaml";OL.exports=M4;async function M4(e){if(Ed.isEmpty(e.schema))throw new Error(gL.SCHEMA_REQUIRED_ERR);if(Ed.isEmpty(e.table))throw new Error(gL.TABLE_REQUIRED_ERR);if(!L4.get(hd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw TL(new Error,AL,RL.BAD_REQUEST,hd.LOG_LEVELS.ERROR,AL,!0);let t=Ed.checkSchemaTableExist(e.schema,e.table);if(t)throw TL(new Error,t,RL.NOT_FOUND,hd.LOG_LEVELS.ERROR,t,!0);if(!Ed.isEmpty(e.search_type)&&U4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await C4.readAuditLog(e)}a(M4,"readAuditLog")});var NL=T((mle,bL)=>{"use strict";var{OPERATIONS_ENUM:P4}=w(),jp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=P4.GET_BACKUP,this.schema=t,this.table=r}};bL.exports=jp});var wL=T((gle,IL)=>{"use strict";var v4=Ds(),Sle=NL(),Zp=z(),B4=w(),Tle=j(),{handleHDBError:H4,hdb_errors:x4}=Z(),{HDB_ERROR_MSGS:yL,HTTP_STATUS_CODES:F4}=x4;IL.exports=G4;async function G4(e){if(Zp.isEmpty(e.schema))throw new Error(yL.SCHEMA_REQUIRED_ERR);if(Zp.isEmpty(e.table))throw new Error(yL.TABLE_REQUIRED_ERR);let t=Zp.checkSchemaTableExist(e.schema,e.table);if(t)throw H4(new Error,t,F4.NOT_FOUND,B4.LOG_LEVELS.ERROR,t,!0);return await v4.getBackup(read_audit_log_object)}a(G4,"getBackup")});var PL=T((Ale,ML)=>{var oi=require("validate.js"),LL=je(),ia=w(),{handleHDBError:q4,hdb_errors:k4}=Z(),{HDB_ERROR_MSGS:lt,HTTP_STATUS_CODES:V4}=k4,eS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),$4={STRUCTURE_USER:"structure_user"},CL=Object.values(ia.ROLE_TYPES_ENUM),Y4="attribute_permissions",K4="attribute_name",{PERMS_CRUD_ENUM:oa}=ia,W4=[Y4,...Object.values(oa)],DL=[oa.READ,oa.INSERT,oa.UPDATE],Q4=[K4,...DL];function z4(e){let t=eS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,UL(e,t)}a(z4,"addRoleValidation");function J4(e){let t=eS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,UL(e,t)}a(J4,"alterRoleValidation");function X4(e){let t=eS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,LL.validateObject(e,t)}a(X4,"dropRoleValidation");var j4=["operation","role","id","permission","hdb_user","hdb_auth_header"];function UL(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)j4.includes(s[o])||n.push(s[o]);n.length>0&&pt(lt.INVALID_ROLE_JSON_KEYS(n),r);let i=LL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pt(o,r)}),e.permission){let o=Z4(e);o&&pt(o,r),CL.forEach(c=>{e.permission[c]&&!oi.isBoolean(e.permission[c])&&pt(lt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(CL.indexOf(o)<0){if(o===$4.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||pt(lt.SCHEMA_NOT_FOUND(d),r)}continue}pt(lt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pt(lt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){pt(lt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{W4.includes(l)||pt(lt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(oa).forEach(l=>{oi.isDefined(_[l])?oi.isBoolean(_[l])||pt(lt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):pt(lt.TABLE_PERM_MISSING(l),r,o,u)}),oi.isDefined(_.attribute_permissions)){if(!oi.isArray(_.attribute_permissions)){pt(lt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{pt(lt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!Q4.includes(p)&&p!==oa.DELETE&&pt(lt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!oi.isDefined(E.attribute_name)){pt(lt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){pt(lt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}DL.forEach(p=>{oi.isDefined(E[p])?oi.isBoolean(E[p])||pt(lt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):pt(lt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;pt(lt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return e3(r)}a(UL,"customValidate");ML.exports={addRoleValidation:z4,alterRoleValidation:J4,dropRoleValidation:X4};function Z4(e){let{operation:t,permission:r}=e;if(t===ia.OPERATIONS_ENUM.ADD_ROLE||t===ia.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return lt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ia.ROLE_TYPES_ENUM.SUPER_USER:ia.ROLE_TYPES_ENUM.CLUSTER_USER;return lt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Z4,"validateNoSUPerms");function e3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:lt.ROLE_PERMS_ERROR,...e};return q4(new Error,s,V4.BAD_REQUEST)}else return null}a(e3,"generateRolePermResponse");function pt(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(pt,"addPermError")});var oS=T((ble,xL)=>{"use strict";var vL=cs(),BL=as(),t3=qi(),rS=PL(),sS=On(),r3=require("uuid").v4,s3=require("util"),md=w(),n3=z(),nS=BL.searchByValue,i3=BL.searchByHash,o3=s3.promisify(t3.delete),a3=js(),c3=jo(),{hdb_errors:u3,handleHDBError:ji}=Z(),{HDB_ERROR_MSGS:HL,HTTP_STATUS_CODES:cu}=u3,{UserEventMsg:iS}=Us();xL.exports={addRole:l3,alterRole:_3,dropRole:d3,listRoles:f3};function tS(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(tS,"scrubRoleDetails");async function l3(e){let t=rS.addRoleValidation(e);if(t)throw t;e=tS(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await nS(r)||[])}catch(i){throw ji(i)}if(s&&s.length>0)throw ji(new Error,HL.ROLE_ALREADY_EXISTS(e.role),cu.CONFLICT,void 0,void 0,!0);e.id||(e.id=r3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await vL.insert(n),sS.signalUserChange(new iS(process.pid)),e=tS(e),e}a(l3,"addRole");async function _3(e){let t=rS.alterRoleValidation(e);if(t)throw t;e=tS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await vL.update(r)}catch(n){throw ji(n)}if(s&&s?.message==="updated 0 of 1 records")throw ji(new Error,"Invalid role id",cu.BAD_REQUEST,void 0,void 0,!0);return await sS.signalUserChange(new iS(process.pid)),e}a(_3,"alterRole");async function d3(e){let t=rS.dropRoleValidation(e);if(t)throw ji(new Error,t,cu.BAD_REQUEST,void 0,void 0,!0);let r=new c3(md.SYSTEM_SCHEMA_NAME,md.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await i3(r));if(s.length===0)throw ji(new Error,HL.ROLE_NOT_FOUND,cu.NOT_FOUND,void 0,void 0,!0);let n=new a3(md.SYSTEM_SCHEMA_NAME,md.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await nS(n)),o=!1;if(n3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ji(new Error,`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`,cu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await o3(c),sS.signalUserChange(new iS(process.pid)),`${s[0].role} successfully deleted`}a(d3,"dropRole");async function f3(){return nS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(f3,"listRoles")});var kL=T((yle,qL)=>{"use strict";var E3=j(),ai=require("joi"),h3=je(),FL=require("moment"),m3=require("fs-extra"),aS=require("path"),p3=require("lodash"),uu=w(),{LOG_LEVELS:Zi}=w(),S3="YYYY-MM-DD hh:mm:ss",T3=aS.resolve(__dirname,"../logs");qL.exports=function(e){return h3.validateBySchema(e,g3)};var g3=ai.object({from:ai.custom(GL),until:ai.custom(GL),level:ai.valid(Zi.NOTIFY,Zi.FATAL,Zi.ERROR,Zi.WARN,Zi.INFO,Zi.DEBUG,Zi.TRACE),order:ai.valid("asc","desc"),limit:ai.number().min(1),start:ai.number().min(0),log_name:ai.custom(R3)});function GL(e,t){if(FL(e,FL.ISO_8601).format(S3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(GL,"validateDatetime");function R3(e,t){if(p3.invert(uu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=E3.get(uu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?uu.LOG_NAMES.HDB:e,i=n===uu.LOG_NAMES.INSTALL?aS.join(T3,uu.LOG_NAMES.INSTALL):aS.join(s,n);return m3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(R3,"validateReadLogPath")});var uS=T((wle,$L)=>{"use strict";var pd=w(),A3=q(),O3=j(),b3=kL(),cS=require("path"),VL=require("fs-extra"),{once:N3}=require("events"),{handleHDBError:y3,hdb_errors:I3}=Z(),{PACKAGE_ROOT:w3}=w(),C3=cS.join(w3,"logs"),L3=1e3,D3=200;$L.exports=U3;async function U3(e){let t=b3(e);if(t)throw y3(t,t.message,I3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=O3.get(pd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?pd.LOG_NAMES.HDB:e.log_name,n=s===pd.LOG_NAMES.INSTALL?cS.join(C3,pd.LOG_NAMES.INSTALL):cS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?L3:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(VL.statSync(n).size-(h+5)*D3,0));let S=VL.createReadStream(n,{start:p});S.on("error",H=>{A3.error(H)});let A=0,O=[],y="",F;S.on("data",H=>{let D=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=y+H;let $=0,V;for(;(V=D.exec(H))&&!S.destroyed;){F&&(F.message=H.slice($,V.index),K(F));let[W,re,be]=V,ne=be.split("] ["),ot=ne[0],Te=ne[1];ne.splice(0,2),F={timestamp:re,thread:ot,level:Te,tags:ne,message:""},$=V.index+W.length}y=H.slice($)}),S.on("end",H=>{S.destroyed||F&&(F.message=y.trim(),K(F))}),S.resume();function K(H){let D,$,V;switch(!0){case(i&&c&&_):D=new Date(H.timestamp),$=new Date(u),V=new Date(l),H.level===o&&D>=$&&D<=V&&A<E?A++:H.level===o&&D>=$&&D<=V&&(ci(H,f,O),A++,A===h&&S.destroy());break;case(i&&c):D=new Date(H.timestamp),$=new Date(u),H.level===o&&D>=$&&A<E?A++:H.level===o&&D>=$&&(ci(H,f,O),A++,A===h&&S.destroy());break;case(i&&_):D=new Date(H.timestamp),V=new Date(l),H.level===o&&D<=V&&A<E?A++:H.level===o&&D<=V&&(ci(H,f,O),A++,A===h&&S.destroy());break;case(c&&_):D=new Date(H.timestamp),$=new Date(u),V=new Date(l),D>=$&&D<=V&&A<E?A++:D>=$&&D<=V&&(ci(H,f,O),A++,A===h&&S.destroy());break;case i:H.level===o&&A<E?A++:H.level===o&&(ci(H,f,O),A++,A===h&&S.destroy());break;case c:D=new Date(H.timestamp),$=new Date(u),D>=$&&A<E?A++:D>=$&&A>=E&&(ci(H,f,O),A++,A===h&&S.destroy());break;case _:D=new Date(H.timestamp),V=new Date(l),D<=V&&A<E?A++:D<=V&&A>=E&&(ci(H,f,O),A++,A===h&&S.destroy());break;default:A<E?A++:(ci(H,f,O),A++,A===h&&S.destroy())}}return a(K,"onLogMessage"),await N3(S,"close"),O}a(U3,"readLog");function ci(e,t,r){t==="desc"?M3(e,r):t==="asc"?P3(e,r):r.push(e)}a(ci,"pushLineToResult");function M3(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(M3,"insertDescending");function P3(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(P3,"insertAscending")});var Sd=T((Mle,QL)=>{"use strict";var lS=require("joi"),{string:lu,boolean:YL,date:v3}=lS.types(),B3=je(),{validateSchemaExists:Lle,validateTableExists:Dle,validateSchemaName:Ule}=Qs(),H3=w(),x3=et(),KL=j();KL.initSync();var F3=lu.invalid(KL.get(H3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(x3.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(),WL={operation:lu.valid("add_node","update_node","set_node_replication"),node_name:F3,subscriptions:lS.array().items({table:lu.optional(),schema:lu.optional(),database:lu.optional(),subscribe:YL.required(),publish:YL.required().custom(q3),start_time:v3.iso()}).min(1).required()};function G3(e){return B3.validateBySchema(e,lS.object(WL))}a(G3,"addUpdateNodeValidator");function q3(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(q3,"checkForFalsy");QL.exports={addUpdateNodeValidator:G3,validation_schema:WL}});var JL=T((vle,zL)=>{var k3=je(),V3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};zL.exports=function(e){return k3.validateObject(e,V3)}});var dS=T((Ble,XL)=>{"use strict";var $3=w().OPERATIONS_ENUM,_S=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=$3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};XL.exports=_S});var ZL=T((xle,jL)=>{"use strict";var Y3={OPERATION:"operation",REFRESH:"refresh"},fS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},ES=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};jL.exports={JWTTokens:fS,TOKEN_TYPE_ENUM:Y3,JWTRSAKeys:ES}});var fu=T((Gle,sD)=>{"use strict";var du=require("jsonwebtoken"),hS=require("fs-extra"),mS=z(),_s=w(),{handleHDBError:fr,hdb_errors:K3}=Z(),{HTTP_STATUS_CODES:Er,AUTHENTICATION_ERROR_MSGS:hr}=K3,_u=q(),eD=P_(),TS=Br(),W3=cs().update,Q3=dS(),z3=On(),{UserEventMsg:J3}=Us(),ui=j();ui.initSync();var pS=require("path"),{JWTTokens:X3,JWTRSAKeys:j3,TOKEN_TYPE_ENUM:Td}=ZL(),Z3=ui.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ui.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",eX=ui.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ui.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",gd="RS256",SS;sD.exports={createTokens:tX,validateOperationToken:sX,refreshOperationToken:rX,validateRefreshToken:rD};async function tX(e){if(mS.isEmpty(e)||typeof e!="object")throw fr(new Error,hr.INVALID_AUTH_OBJECT,Er.BAD_REQUEST,void 0,void 0,!0);if(mS.isEmpty(e.username))throw fr(new Error,hr.USERNAME_REQUIRED,Er.BAD_REQUEST,void 0,void 0,!0);if(mS.isEmpty(e.password))throw fr(new Error,hr.PASSWORD_REQUIRED,Er.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await TS.findAndValidateUser(e.username,e.password),!t)throw fr(new Error,hr.INVALID_CREDENTIALS,Er.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw _u.error(f),fr(new Error,hr.INVALID_CREDENTIALS,Er.UNAUTHORIZED,void 0,void 0,!0)}let r=await Rd(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await tD(i,r.private_key,r.passphrase),c=await du.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:eX,algorithm:gd,subject:Td.REFRESH}),u=eD.hash(c),_=new Q3(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await W3(_)}catch(f){_u.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw fr(new Error,hr.REFRESH_TOKEN_SAVE_FAILED,Er.INTERNAL_SERVER_ERROR);return z3.signalUserChange(new J3(process.pid)),new X3(o,c)}a(tX,"createTokens");async function tD(e,t,r){return await du.sign(e,{key:t,passphrase:r},{expiresIn:Z3,algorithm:gd,subject:Td.OPERATION})}a(tD,"signOperationToken");async function Rd(){if(SS===void 0)try{let e=pS.join(ui.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=pS.join(ui.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=pS.join(ui.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await hS.readFile(e)).toString(),n=(await hS.readFile(t)).toString(),i=(await hS.readFile(r)).toString();SS=new j3(i,n,s)}catch(e){throw _u.error(e),fr(new Error,hr.NO_ENCRYPTION_KEYS,Er.INTERNAL_SERVER_ERROR)}return SS}a(Rd,"getJWTRSAKeys");async function rX(e){if(!e)throw fr(new Error,hr.INVALID_BODY,Er.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fr(new Error,hr.REFRESH_TOKEN_REQUIRED,Er.BAD_REQUEST,void 0,void 0,!0);await rD(e.refresh_token);let t=await Rd(),r=await du.decode(e.refresh_token);return{operation_token:await tD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(rX,"refreshOperationToken");async function sX(e){try{let t=await Rd(),r=await du.verify(e,t.public_key,{algorithms:gd,subject:Td.OPERATION});return await TS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw _u.warn(t),t.name&&t.name==="TokenExpiredError"?fr(new Error,hr.TOKEN_EXPIRED,Er.FORBIDDEN):fr(new Error,hr.INVALID_TOKEN,Er.UNAUTHORIZED)}}a(sX,"validateOperationToken");async function rD(e){let t;try{let r=await Rd(),s=await du.verify(e,r.public_key,{algorithms:gd,subject:Td.REFRESH});t=await TS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw _u.warn(r),r.name&&r.name==="TokenExpiredError"?fr(new Error,hr.TOKEN_EXPIRED,Er.FORBIDDEN):fr(new Error,hr.INVALID_TOKEN,Er.UNAUTHORIZED)}if(!eD.validate(t.refresh_token,e))throw fr(new Error,hr.INVALID_TOKEN,Er.UNAUTHORIZED);return t}a(rD,"validateRefreshToken")});var gS=T((Vle,oD)=>{"use strict";var nX=JL(),aa=require("passport"),iX=require("passport-local").Strategy,oX=require("passport-http").BasicStrategy,aX=require("util"),cX=Br(),iD=aX.callbackify(cX.findAndValidateUser),kle=yr(),uX=w(),nD=fu();aa.use(new iX(function(e,t,r){iD(e,t,r)}));aa.use(new oX(function(e,t,r){iD(e,t,r)}));aa.serializeUser(function(e,t){t(null,e)});aa.deserializeUser(function(e,t){t(null,e)});function lX(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":aa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===uX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?nD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):nD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:aa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(lX,"authorize");function _X(e,t){let r=nX(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(_X,"checkPermissions");oD.exports={authorize:lX,checkPermissions:_X}});var ca=T((Yle,aD)=>{"use strict";var RS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},AS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};aD.exports={Node:RS,NodeSubscription:AS}});var uD=T((Wle,cD)=>{"use strict";var dX=w().OPERATIONS_ENUM,OS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=dX.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};cD.exports=OS});var Eu=T((zle,lD)=>{"use strict";var bS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},NS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};lD.exports={RemotePayloadObject:bS,RemotePayloadSubscription:NS}});var dD=T((Xle,_D)=>{"use strict";var yS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};_D.exports=yS});var hD=T((r_e,ED)=>{"use strict";var fX=dD(),Zle=ft(),fD=Ve(),EX=q(),{getSchemaPath:e_e,getTransactionAuditStorePath:t_e}=Ye(),{getDatabases:hX}=(Se(),te(Ge));ED.exports=mX;async function mX(e){let t=new fX;try{let r=hX()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await fD.environmentDataSize(schema_path,e.name),o=await fD.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){EX.warn(`unable to stat table dbi due to ${r}`)}return t}a(mX,"lmdbGetTableSize")});var pD=T((n_e,mD)=>{"use strict";var IS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};mD.exports=IS});var ua=T((c_e,RD)=>{"use strict";var pX=require("fs-extra"),SX=require("path"),Xt=require("systeminformation"),li=q(),TX=mt(),wS=et(),Od=w(),gX=hD(),gD=Bi(),{getThreadInfo:SD}=at(),xS=j();xS.initSync();var RX=pD(),{openEnvironment:o_e}=Ve(),{getSchemaPath:a_e}=Ye(),{database:AX}=(Se(),te(Ge)),Ad;RD.exports={getHDBProcessInfo:US,getNetworkInfo:PS,getDiskInfo:MS,getMemoryInfo:DS,getCPUInfo:LS,getTimeInfo:CS,getSystemInformation:vS,systemInformation:OX,getTableSize:BS,getMetrics:HS};function CS(){return Xt.time()}a(CS,"getTimeInfo");async function LS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...O}=await Xt.currentLoad();return O.cpus=[],A.forEach(y=>{let{raw_load:F,raw_load_idle:K,raw_load_irq:H,raw_load_nice:D,raw_load_system:$,raw_load_user:V,...W}=y;O.cpus.push(W)}),l.current_load=O,l}catch(e){return li.error(`error in getCPUInfo: ${e}`),{}}}a(LS,"getCPUInfo");async function DS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return li.error(`error in getMemoryInfo: ${e}`),{}}}a(DS,"getMemoryInfo");async function US(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await pX.readFile(SX.join(xS.get(Od.CONFIG_PARAMS.ROOTPATH),Od.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Od.NODE_ERROR_CODES.ENOENT)li.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return li.error(`error in getHDBProcessInfo: ${t}`),e}}a(US,"getHDBProcessInfo");async function MS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return li.error(`error in getDiskInfo: ${t}`),e}}a(MS,"getDiskInfo");async function PS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return li.error(`error in getNetworkInfo: ${t}`),e}}a(PS,"getNetworkInfo");async function vS(){if(Ad!==void 0)return Ad;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Ad=e,Ad}catch(t){return li.error(`error in getSystemInformation: ${t}`),e}}a(vS,"getSystemInformation");async function BS(){let e=[],t=await gD.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await gX(s));return e}a(BS,"getTableSize");async function HS(){let e=await gD.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=AX({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){li.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(HS,"getMetrics");async function TD(){if(xS.get(Od.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await TX.getNATSReferences(),r=await t.streams.info(wS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(wS.WORK_QUEUE_CONSUMER_NAMES.stream_name,wS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.sources&&(n.ingest.stream.sources=r.sources),n}}a(TD,"getNatsStreamInfo");async function OX(e){let t=new RX;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await vS(),t.time=CS(),t.cpu=await LS(),t.memory=await DS(),t.disk=await MS(),t.network=await PS(),t.harperdb_processes=await US(),t.table_size=await BS(),t.metrics=await HS(),t.threads=await SD(),t.replication=await TD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await vS();break;case"time":t.time=CS();break;case"cpu":t.cpu=await LS();break;case"memory":t.memory=await DS();break;case"disk":t.disk=await MS();break;case"network":t.network=await PS();break;case"harperdb_processes":t.harperdb_processes=await US();break;case"table_size":t.table_size=await BS();break;case"database_metrics":case"metrics":t.metrics=await HS();break;case"threads":t.threads=await SD();break;case"replication":t.replication=await TD();break;default:break}return t}a(OX,"systemInformation")});var FS=T((l_e,AD)=>{"use strict";AD.exports={version:bX,printVersion:NX};var bd=jc();function bX(){if(bd)return bd.version}a(bX,"version");function NX(){bd&&console.log(`HarperDB Version ${bd.version}`)}a(NX,"printVersion")});var In=T((E_e,yD)=>{"use strict";var yX=cs(),GS=z(),IX=require("util"),eo=w(),OD=j();OD.initSync();var wX=gS(),bD=as(),{Node:d_e,NodeSubscription:f_e}=ca(),CX=jo(),LX=uD(),{RemotePayloadObject:DX,RemotePayloadSubscription:UX}=Eu(),{handleHDBError:MX,hdb_errors:PX}=Z(),{HTTP_STATUS_CODES:vX,HDB_ERROR_MSGS:BX}=PX,HX=js(),xX=ua(),FX=FS(),{getDatabases:GX}=(Se(),te(Ge)),qX=IX.promisify(wX.authorize),kX=bD.searchByHash,VX=bD.searchByValue;yD.exports={authHeaderToUser:$X,isEmpty:YX,getNodeRecord:KX,upsertNodeRecord:WX,buildNodePayloads:QX,checkClusteringEnabled:zX,getAllNodeRecords:JX,getSystemInfo:XX,reverseSubscription:ND};async function $X(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await qX(t,null),e}a($X,"authHeaderToUser");function YX(e){return e==null}a(YX,"isEmpty");async function KX(e){let t=new CX(eo.SYSTEM_SCHEMA_NAME,eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return kX(t)}a(KX,"getNodeRecord");async function WX(e){let t=new LX(eo.SYSTEM_SCHEMA_NAME,eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return yX.upsert(t)}a(WX,"upsertNodeRecord");function ND(e){if(GS.isEmpty(e.subscribe)||GS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(ND,"reverseSubscription");function QX(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=GS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=ND(c),E=GX()[u]?.[_],h=new UX(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new DX(r,t,n,s)}a(QX,"buildNodePayloads");function zX(){if(!OD.get(eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw MX(new Error,BX.CLUSTERING_NOT_ENABLED,vX.BAD_REQUEST,void 0,void 0,!0)}a(zX,"checkClusteringEnabled");async function JX(){let e=new HX(eo.SYSTEM_SCHEMA_NAME,eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await VX(e))}a(JX,"getAllNodeRecords");async function XX(){let e=await xX.getSystemInformation();return{hdb_version:FX.version(),node_version:e.node_version,platform:e.platform}}a(XX,"getSystemInfo")});var qS=T((m_e,PD)=>{"use strict";var Nd=mt(),ID=z(),wD=et(),CD=w(),yd=q(),LD=fd(),jX=up(),{RemotePayloadObject:ZX}=Eu(),{handleHDBError:DD,hdb_errors:ej}=Z(),{HTTP_STATUS_CODES:UD}=ej,{NodeSubscription:MD}=ca();PD.exports=tj;async function tj(e,t){let r;try{r=await Nd.request(`${t}.${wD.REQUEST_SUFFIX}`,new ZX(CD.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),yd.trace("Response from remote describe all request:",r)}catch(o){yd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Nd.requestErrorHandler(o,"add_node",t);throw DD(new Error,c,UD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===wD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw DD(new Error,o,UD.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===CD.SYSTEM_SCHEMA_NAME){await Nd.createLocalTableStream(u,c);let h=new MD(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=ID.doesSchemaExist(u),l=s[u]!==void 0,d=c?ID.doesTableExist(u,c):!0,f=c?s?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(yd.trace(`addNode creating schema: ${u}`),await LD.createSchema({operation:"create_schema",schema:u})),!d&&f){yd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(s[u][c].attributes)}`);let h=new jX(u,c,s[u][c].hash_attribute);s[u][c].attributes&&(h.attributes=s[u][c].attributes),await LD.createTable(h)}await Nd.createLocalTableStream(u,c);let E=new MD(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(tj,"reviewSubscriptions")});var Cd=T((S_e,HD)=>{"use strict";var{handleHDBError:Id,hdb_errors:rj}=Z(),{HTTP_STATUS_CODES:wd}=rj,{addUpdateNodeValidator:sj}=Sd(),hu=q(),BD=w(),vD=et(),nj=z(),kS=mt(),mu=In(),ij=j(),oj=qS(),{Node:aj,NodeSubscription:cj}=ca(),{broadcast:uj}=at(),lj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",_j="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",dj=ij.get(BD.CONFIG_PARAMS.CLUSTERING_NODENAME);HD.exports=fj;async function fj(e,t=!1){hu.trace("addNode called with:",e),mu.checkClusteringEnabled();let r=sj(e);if(r)throw Id(r,r.message,wd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await mu.getNodeRecord(s);if(!nj.isEmptyOrZeroLength(d))throw Id(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,wd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await oj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=lj,o;let c=mu.buildNodePayloads(n,dj,BD.OPERATIONS_ENUM.ADD_NODE,await mu.getSystemInfo());hu.trace("addNode sending remote payload:",c);let u;try{u=await kS.request(`${s}.${vD.REQUEST_SUFFIX}`,c)}catch(d){hu.error(`addNode received error from request: ${d}`);let f=kS.requestErrorHandler(d,"add_node",s);throw Id(new Error,f,wd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===vD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Id(new Error,d,wd.INTERNAL_SERVER_ERROR,"error",d)}hu.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];hu.trace("Add node updating work stream for node:",s,"subscriptions:",E),await kS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new cj(E.schema,E.table,E.publish,E.subscribe))}let l=new aj(s,_,u.system_info);return await mu.upsertNodeRecord(l),uj({type:"nats_update"}),i.length>0?o.message=_j:o.message=`Successfully added '${s}' to manifest`,o}a(fj,"addNode")});var KS=T((R_e,GD)=>{"use strict";var{handleHDBError:VS,hdb_errors:Ej}=Z(),{HTTP_STATUS_CODES:$S}=Ej,{addUpdateNodeValidator:hj}=Sd(),pu=q(),FD=w(),xD=et(),g_e=z(),YS=mt(),Su=In(),mj=j(),{cloneDeep:pj}=require("lodash"),Sj=qS(),{Node:Tj,NodeSubscription:gj}=ca(),{broadcast:Rj}=at(),Aj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Oj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",bj=mj.get(FD.CONFIG_PARAMS.CLUSTERING_NODENAME);GD.exports=Nj;async function Nj(e){pu.trace("updateNode called with:",e),Su.checkClusteringEnabled();let t=hj(e);if(t)throw VS(t,t.message,$S.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s,n=await Su.getNodeRecord(r);n.length>0&&(s=pj(n));let{added:i,skipped:o}=await Sj(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Aj,c;let u=Su.buildNodePayloads(i,bj,FD.OPERATIONS_ENUM.UPDATE_NODE,await Su.getSystemInfo());pu.trace("updateNode sending remote payload:",u);let _;try{_=await YS.request(`${r}.${xD.REQUEST_SUFFIX}`,u)}catch(l){pu.error(`updateNode received error from request: ${l}`);let d=YS.requestErrorHandler(l,"update_node",r);throw VS(new Error,d,$S.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===xD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw VS(new Error,l,$S.INTERNAL_SERVER_ERROR,"error",l)}pu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];pu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await YS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return s||(s=[new Tj(r,[],_.system_info)]),await yj(s[0],i,_.system_info),o.length>0?c.message=Oj:c.message=`Successfully updated '${r}'`,c}a(Nj,"updateNode");async function yj(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new gj(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Su.upsertNodeRecord(s),Rj({type:"nats_update"})}a(yj,"updateNodeTable")});var YD=T((O_e,$D)=>{"use strict";var VD=require("joi"),{string:qD}=VD.types(),Ij=je(),kD=w(),wj=j(),Cj=et();$D.exports=Lj;function Lj(e){let t=qD.invalid(wj.get(kD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Cj.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=VD.object({operation:qD.valid(kD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Ij.validateBySchema(e,r)}a(Lj,"removeNodeValidator")});var Dd=T((N_e,XD)=>{"use strict";var{handleHDBError:KD,hdb_errors:Dj}=Z(),{HTTP_STATUS_CODES:WD}=Dj,Uj=YD(),Tu=q(),QD=In(),Mj=z(),Ld=w(),zD=et(),JD=mt(),Pj=j(),{RemotePayloadObject:vj}=Eu(),{NodeSubscription:Bj}=ca(),Hj=$c(),xj=qi(),{broadcast:Fj}=at(),Gj=Pj.get(Ld.CONFIG_PARAMS.CLUSTERING_NODENAME);XD.exports=qj;async function qj(e){Tu.trace("removeNode called with:",e),QD.checkClusteringEnabled();let t=Uj(e);if(t)throw KD(t,t.message,WD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await QD.getNodeRecord(r);if(Mj.isEmptyOrZeroLength(s))throw KD(new Error,`Node '${r}' was not found.`,WD.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new vj(Ld.OPERATIONS_ENUM.REMOVE_NODE,Gj,[]),i,o=!1;try{i=await JD.request(`${r}.${zD.REQUEST_SUFFIX}`,n),Tu.trace("Remove node reply from remote node:",r,i)}catch(u){Tu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Tu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new Bj(l.schema,l.table,!1,!1);await JD.updateWorkStream(d,r)}let c=new Hj(Ld.SYSTEM_SCHEMA_NAME,Ld.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xj.deleteRecord(c),Fj({type:"nats_update"}),i?.status===zD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Tu.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(qj,"removeNode")});var eU=T((I_e,ZD)=>{"use strict";var jD=require("joi"),{string:kj,array:Vj}=jD.types(),$j=je(),Yj=Sd();ZD.exports=Kj;function Kj(e){let t=jD.object({operation:kj.valid("configure_cluster").required(),connections:Vj.items(Yj.validation_schema).required()});return $j.validateBySchema(e,t)}a(Kj,"configureClusterValidator")});var WS=T((C_e,iU)=>{"use strict";var Wj=w(),Ud=q(),Qj=z(),zj=Dd(),Jj=Cd(),tU=In(),Xj=eU(),{handleHDBError:rU,hdb_errors:jj}=Z(),{HTTP_STATUS_CODES:sU}=jj,Zj="Configure cluster complete.",eZ="Failed to configure the cluster. Check the logs for more details.",tZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";iU.exports=rZ;async function rZ(e){Ud.trace("configure cluster called with:",e),tU.checkClusteringEnabled();let t=Xj(e);if(t)throw rU(t,t.message,sU.BAD_REQUEST,void 0,void 0,!0);let r=await tU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(nU(zj,{operation:Wj.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Ud.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(nU(Jj,E,E.node_name))}let c=await Promise.allSettled(i);Ud.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Ud.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(Qj.isEmptyOrZeroLength(u))return{message:Zj,connections:_};if(l)return{message:tZ,failed_nodes:u,connections:_};throw rU(new Error,eZ,sU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(rZ,"configureCluster");async function nU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(nU,"functionWrapper")});var aU=T((D_e,oU)=>{"use strict";var Md=require("joi"),sZ=je(),{validateSchemaExists:nZ,validateTableExists:iZ,validateSchemaName:oZ}=Qs(),aZ=Md.object({operation:Md.string().valid("purge_stream"),schema:Md.string().custom(nZ).custom(oZ).required(),table:Md.string().custom(iZ).required()});function cZ(e){return sZ.validateBySchema(e,aZ)}a(cZ,"purgeStreamValidator");oU.exports=cZ});var QS=T((M_e,cU)=>{"use strict";var{handleHDBError:uZ,hdb_errors:lZ}=Z(),{HTTP_STATUS_CODES:_Z}=lZ,dZ=aU(),fZ=mt(),EZ=In();cU.exports=hZ;async function hZ(e){if(e.purge_ingest!==!0){let n=dZ(e);if(n)throw uZ(n,n.message,_Z.BAD_REQUEST,void 0,void 0,!0)}EZ.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:s}=e;return await fZ.purgeTableStream(t,r,s),s?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(hZ,"purgeStream")});var XS=T((v_e,EU)=>{"use strict";var JS=In(),mZ=mt(),_U=j(),Pd=w(),to=et(),pZ=z(),zS=q(),{RemotePayloadObject:SZ}=Eu(),{ErrorCode:uU}=require("nats"),lU=_U.get(Pd.CONFIG_PARAMS.CLUSTERING_ENABLED),dU=_U.get(Pd.CONFIG_PARAMS.CLUSTERING_NODENAME);EU.exports={clusterStatus:TZ,buildNodeStatus:fU};async function TZ(){let e={node_name:dU,is_enabled:lU,connections:[]};if(!lU)return e;let t=await JS.getAllNodeRecords();if(pZ.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(fU(t[s],e.connections));return await Promise.allSettled(r),e}a(TZ,"clusterStatus");async function fU(e,t){let r=e.name,s=new SZ(Pd.OPERATIONS_ENUM.CLUSTER_STATUS,dU,void 0,await JS.getSystemInfo()),n,i,o=to.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await mZ.request(to.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===to.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=to.CLUSTER_STATUS_STATUSES.CLOSED,zS.error(`Error getting node status from ${r} `,n))}catch(u){zS.warn(`Error getting node status from ${r}`,u),u.code===uU.NoResponders?o=to.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===uU.Timeout?o=to.CLUSTER_STATUS_STATUSES.TIMEOUT:o=to.CLUSTER_STATUS_STATUSES.CLOSED}let c=new gZ(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Pd.PRE_4_0_0_VERSION&&await JS.upsertNodeRecord(u)}catch(u){zS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(fU,"buildNodeStatus");function gZ(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(gZ,"NodeStatusObject")});var ZS=T((H_e,hU)=>{"use strict";var{handleHDBError:RZ,hdb_errors:AZ}=Z(),{HTTP_STATUS_CODES:OZ}=AZ,bZ=mt(),NZ=In(),jS=z(),vd=require("joi"),yZ=je(),IZ=2e3,wZ=vd.object({timeout:vd.number().min(1),connected_nodes:vd.boolean(),routes:vd.boolean()});hU.exports=CZ;async function CZ(e){NZ.checkClusteringEnabled();let t=yZ.validateBySchema(e,wZ);if(t)throw RZ(t,t.message,OZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||jS.autoCastBoolean(s),o=n===void 0||jS.autoCastBoolean(n),c={nodes:[]},u=await bZ.getServerList(r??IZ),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:jS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(CZ,"clusterNetwork")});var TU=T((F_e,SU)=>{"use strict";var eT=require("joi"),mU=je(),{route_constraints:pU}=zE();SU.exports={setRoutesValidator:LZ,deleteRoutesValidator:DZ};function LZ(e){let t=eT.object({server:eT.valid("hub","leaf").required(),routes:pU.required()});return mU.validateBySchema(e,t)}a(LZ,"setRoutesValidator");function DZ(e){let t=eT.object({routes:pU.required()});return mU.validateBySchema(e,t)}a(DZ,"deleteRoutesValidator")});var rT=T((q_e,OU)=>{"use strict";var ro=Cr(),tT=z(),Bd=w(),gU=TU(),{handleHDBError:RU,hdb_errors:UZ}=Z(),{HTTP_STATUS_CODES:AU}=UZ,MZ="cluster routes successfully set",PZ="cluster routes successfully deleted";OU.exports={setRoutes:vZ,getRoutes:BZ,deleteRoutes:HZ};function vZ(e){let t=gU.setRoutesValidator(e);if(t)throw RU(t,t.message,AU.BAD_REQUEST,void 0,void 0,!0);let r=ro.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=tT.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?ro.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ro.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:MZ,set:o,skipped:i}}a(vZ,"setRoutes");function BZ(){let e=ro.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(BZ,"getRoutes");function HZ(e){let t=gU.deleteRoutesValidator(e);if(t)throw RU(t,t.message,AU.BAD_REQUEST,void 0,void 0,!0);let r=ro.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=tT.isEmptyOrZeroLength(s)?null:s,ro.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=tT.isEmptyOrZeroLength(n)?null:n,ro.updateConfigValue(Bd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:PZ,deleted:i,skipped:o}}a(HZ,"deleteRoutes")});var NU=T((V_e,bU)=>{"use strict";var gu=require("alasql"),so=require("recursive-iterator"),Hs=q(),xZ=z(),Ru=w(),sT=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,GZ(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Ru.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Ru.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ru.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=FZ(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Ru.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new gu.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function FZ(e){return e.filter(t=>t[Ru.PERMS_CRUD_ENUM.READ])}a(FZ,"filterReadRestrictedAttrs");function GZ(e,t,r,s,n){qZ(e,t,r,s,n)}a(GZ,"interpretAST");function Au(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Au,"addSchemaTableToMap");function qZ(e,t,r,s,n){if(!e){Hs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof gu.yy.Insert?YZ(e,t,r):e instanceof gu.yy.Select?kZ(e,t,r,s,n):e instanceof gu.yy.Update?VZ(e,t,r):e instanceof gu.yy.Delete?$Z(e,t,r):Hs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(qZ,"getRecordAttributesAST");function kZ(e,t,r,s,n){if(!e){Hs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(xZ.isEmptyOrZeroLength(i)){Hs.error("No schema specified");return}e.from.forEach(c=>{Au(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Au(c.table,t,r,s,n)});let o=new so(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hs.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new so(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hs.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new so(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hs.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new so(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(kZ,"getSelectAttributes");function VZ(e,t,r){if(!e){Hs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new so(e.columns),n=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nT(e.table.tableid,n,i.columnid,t,r)}a(VZ,"getUpdateAttributes");function $Z(e,t,r){if(!e){Hs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new so(e.where),n=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nT(e.table.tableid,n,i.columnid,t,r)}a($Z,"getDeleteAttributes");function YZ(e,t,r){if(!e){Hs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new so(e.columns),n=e.into.databaseid;Au(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&nT(e.into.tableid,n,i.columnid,t,r)}a(YZ,"getInsertAttributes");function nT(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(nT,"pushAttribute");bU.exports=sT});var aT=T((Y_e,CU)=>{var Hd=Vo(),yU=require("chalk"),kr=q(),IU=require("prompt"),{promisify:KZ}=require("util"),iT=w(),WZ=require("fs-extra"),QZ=require("path"),zZ=z(),JZ=FS(),wU=j();wU.initSync();var XZ=require("moment"),jZ=KZ(IU.get),ZZ=QZ.join(wU.getHdbBasePath(),iT.LICENSE_KEY_DIR_NAME,iT.LICENSE_FILE_NAME,iT.LICENSE_FILE_NAME);CU.exports={getFingerprint:t5,setLicense:e5,parseLicense:oT,register:r5,getRegistrationInfo:n5};async function e5(e){if(e&&e.key&&e.company){try{kr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await oT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw kr.error(r),kr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(e5,"setLicense");async function t5(){let e={};try{e=await Hd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw kr.error(r),kr.error(t),new Error(r)}return e}a(t5,"getFingerprint");async function oT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");kr.info("Validating license input...");let r=Hd.validateLicense(e,t);if(kr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(kr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(kr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{kr.info("writing license to disk"),await WZ.writeFile(ZZ,JSON.stringify({license_key:e,company:t}))}catch(s){throw kr.error("Failed to write License"),s}return"Registration successful."}a(oT,"parseLicense");async function r5(){let e=await s5();return oT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(r5,"register");async function s5(){let e=await Hd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:yU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:yU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{IU.start()}catch(s){kr.error(s)}let r;try{r=await jZ(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(s5,"promptForRegistration");async function n5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Hd.getLicense()}catch(r){throw kr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(zZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=JZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=XZ.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(n5,"getRegistrationInfo")});var DU=T((W_e,LU)=>{"use strict";var i5=et(),cT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+i5.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};LU.exports=cT});var PU=T((z_e,MU)=>{"use strict";var UU=et(),uT=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+UU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+UU.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};MU.exports=uT});var BU=T((X_e,vU)=>{"use strict";var lT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};vU.exports=lT});var xU=T((Z_e,HU)=>{"use strict";var o5=et(),_T=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+o5.SERVER_SUFFIX.ADMIN,this.password=r}};HU.exports=_T});var ET=T((tde,qU)=>{"use strict";var la=require("path"),Gd=require("fs-extra"),a5=DU(),c5=PU(),u5=BU(),l5=xU(),dT=Br(),da=z(),mr=Cr(),Fd=w(),Ou=et(),{CONFIG_PARAMS:_t}=Fd,bu=q(),Nu=j(),FU=Rn(),fT=mt(),_a="clustering",_5=1e4,GU=5;qU.exports={generateNatsConfig:f5,removeNatsConfig:E5,getHubConfigPath:d5};function d5(){let e=Nu.get(_t.ROOTPATH);return la.join(e,_a,Ou.NATS_CONFIG_FILES.HUB_SERVER)}a(d5,"getHubConfigPath");async function f5(e=!1,t=void 0){Nu.initSync();let r=Nu.get(_t.ROOTPATH),s=la.join(r,_a,Ou.PID_FILES.HUB),n=la.join(r,_a,Ou.PID_FILES.LEAF),i=mr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=la.join(r,_a,Ou.NATS_CONFIG_FILES.HUB_SERVER),c=la.join(r,_a,Ou.NATS_CONFIG_FILES.LEAF_SERVER),u=mr.getConfigFromFile(_t.CLUSTERING_TLS_CERTIFICATE),_=mr.getConfigFromFile(_t.CLUSTERING_TLS_PRIVATEKEY),l=mr.getConfigFromFile(_t.CLUSTERING_TLS_CERT_AUTH),d=mr.getConfigFromFile(_t.CLUSTERING_TLS_INSECURE),f=mr.getConfigFromFile(_t.CLUSTERING_TLS_VERIFY),E=mr.getConfigFromFile(_t.CLUSTERING_NODENAME),h=mr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await fT.checkNATSServerInstalled()||qd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await dT.listUsers(),S=mr.getConfigFromFile(_t.CLUSTERING_USER),A=await dT.getClusterUser();(da.isEmpty(A)||A.active!==!0)&&qd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await xd(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await xd(_t.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await xd(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),await xd(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],y=[];for(let[W,re]of p.entries())re.role.role===Fd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(O.push(new l5(re.username,FU.decrypt(re.hash))),y.push(new u5(re.username,FU.decrypt(re.hash))));let F=[],{hub_routes:K}=mr.getClusteringRoutes();if(!da.isEmptyOrZeroLength(K))for(let W of K)F.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${W.host}:${W.port}`);let H=new a5(mr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,mr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NAME),mr.getConfigFromFile(_t.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),F,O,y);l==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=da.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Fd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Gd.writeJson(o,H),bu.trace(`Hub server config written to ${o}`));let D=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,$=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new c5(mr.getConfigFromFile(_t.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[D],[$],O,y,u,_,l,d);l==null&&delete V.tls.ca_file,(t===void 0||t===Fd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Gd.writeJson(c,V),bu.trace(`Leaf server config written to ${c}`))}a(f5,"generateNatsConfig");async function xd(e){let t=Nu.get(e);return da.isEmpty(t)&&qd(`port undefined for '${e}'`),await da.isPortTaken(t)&&qd(`'${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(xd,"isPortAvailable");function qd(e){let t=`Error generating clustering config: ${e}`;bu.error(t),console.error(t),process.exit(1)}a(qd,"generateNatsConfigError");async function E5(e){let{port:t,config_file:r}=fT.getServerConfig(e),{username:s,decrypt_hash:n}=await dT.getClusterUser(),i=0,o=2e3;for(;i<GU;){try{let _=await fT.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){bu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=GU)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 da.async_set_timeout(o*(i*2))}let c="0".repeat(_5),u=la.join(Nu.get(_t.ROOTPATH),_a,r);await Gd.writeFile(u,c),await Gd.remove(u),bu.notify(e,"started.")}a(E5,"removeNatsConfig")});var WU=T((sde,KU)=>{"use strict";var Vr=j(),h5=Vo(),_e=w(),yu=et(),wn=require("path"),{PACKAGE_ROOT:Vd}=w(),kU=j(),kd=z(),fa="/dev/null",m5=wn.join(Vd,"launchServiceScripts"),VU=wn.join(Vd,"utility/scripts"),p5=wn.join(VU,_e.HDB_RESTART_SCRIPT),$U=wn.resolve(Vd,"dependencies",`${process.platform}-${process.arch}`,yu.NATS_BINARY_NAME);function YU(){let t=h5.licenseSearch().ram_allocation||_e.RAM_ALLOCATION_ENUM.DEFAULT,r=_e.MEM_SETTING_KEY+t,s={[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return kd.noBootFile()&&(s[_e.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kd.getEnvCliRootPath()),{name:_e.PROCESS_DESCRIPTORS.HDB,script:_e.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Vd}}a(YU,"generateMainServerConfig");var S5=9930;function T5(){Vr.initSync(!0);let e=Vr.get(_e.CONFIG_PARAMS.ROOTPATH),t=wn.join(e,"clustering",yu.NATS_CONFIG_FILES.HUB_SERVER),r=wn.join(Vr.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY),_e.LOG_NAMES.HDB),s=kU.get(_e.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=yu.LOG_LEVEL_FLAGS[Vr.get(_e.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==S5?"-"+s:""),script:$U,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fa,i.error_file=fa),i}a(T5,"generateNatsHubServerConfig");var g5=9940;function R5(){Vr.initSync(!0);let e=Vr.get(_e.CONFIG_PARAMS.ROOTPATH),t=wn.join(e,"clustering",yu.NATS_CONFIG_FILES.LEAF_SERVER),r=wn.join(Vr.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY),_e.LOG_NAMES.HDB),s=kU.get(_e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=yu.LOG_LEVEL_FLAGS[Vr.get(_e.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==g5?"-"+s:""),script:$U,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Vr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fa,i.error_file=fa),i}a(R5,"generateNatsLeafServerConfig");function A5(){Vr.initSync();let e=wn.join(Vr.get(_e.CONFIG_PARAMS.LOGGING_ROOT),_e.LOG_NAMES.HDB),t={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:_e.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:m5,autorestart:!1};return Vr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=fa,t.error_file=fa),t}a(A5,"generateClusteringUpgradeV4ServiceConfig");function O5(){let e={[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.RESTART_HDB};return kd.noBootFile()&&(e[_e.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=kd.getEnvCliRootPath()),{...{name:_e.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:VU},script:p5}}a(O5,"generateRestart");function b5(){return{apps:[YU()]}}a(b5,"generateAllServiceConfigs");KU.exports={generateAllServiceConfigs:b5,generateMainServerConfig:YU,generateRestart:O5,generateNatsHubServerConfig:T5,generateNatsLeafServerConfig:R5,generateClusteringUpgradeV4ServiceConfig:A5}});var aM=T((ode,oM)=>{"use strict";var Ce=w(),N5=z(),Cn=ET(),Iu=mt(),rn=et(),_i=WU(),$d=j(),di=q(),y5=In(),{startWorker:QU,onMessageFromWorkers:I5}=at(),w5=ua(),ide=require("util"),C5=require("child_process"),L5=require("fs"),{execFile:D5}=C5,Ae;oM.exports={enterPM2Mode:U5,start:fi,stop:hT,reload:JU,restart:XU,list:mT,describe:ZU,connect:Ln,kill:H5,startAllServices:x5,startService:pT,getUniqueServicesList:eM,restartAllServices:F5,isServiceRegistered:tM,reloadStopStart:rM,restartHdb:jU,deleteProcess:v5,startClusteringProcesses:nM,startClusteringThreads:iM,isHdbRestartRunning:B5,isClusteringRunning:q5,stopClustering:G5,reloadClustering:k5};var wu=!1;I5(e=>{e.type==="restart"&&$d.initSync(!0)});function U5(){wu=!0}a(U5,"enterPM2Mode");function Ln(){return Ae||(Ae=require("pm2")),new Promise((e,t)=>{Ae.connect((r,s)=>{di.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ln,"connect");var pr,M5=10,zU;function fi(e,t=!1){if(wu)return P5(e);let r=D5(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=pr.indexOf(r);o>-1&&pr.splice(o,1),!zU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<M5&&(L5.existsSync(Cn.getHubConfigPath())?fi(e):(await Cn.generateNatsConfig(!0),fi(e),await new Promise(c=>setTimeout(c,3e3)),await Cn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Cn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=$d.get(Ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&rn.LOG_LEVEL_HIERARCHY[o]>=rn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===rn.LOG_LEVELS.ERR||l===rn.LOG_LEVELS.WRN?di.OUTPUTS.STDERR:di.OUTPUTS.STDOUT;di.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=rn.LOG_LEVELS[f]}if(rn.LOG_LEVEL_HIERARCHY[o]>=rn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===rn.LOG_LEVELS.ERR||l===rn.LOG_LEVELS.WRN?di.OUTPUTS.STDERR:di.OUTPUTS.STDOUT;di.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),pr=[],!pr&&!t){let i=a(()=>{zU=!0,pr&&(pr.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)}pr.push(r)}a(fi,"start");function P5(e){return new Promise(async(t,r)=>{try{await Ln()}catch(s){r(s)}Ae.start(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(P5,"startWithPM2");function hT(e){if(!wu){for(let t of pr||[])t.name===e&&(pr.splice(pr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ln()}catch(s){r(s)}Ae.stop(e,async(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.delete(e,(i,o)=>{i&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(o)})})})}a(hT,"stop");function JU(e){return new Promise(async(t,r)=>{try{await Ln()}catch(s){r(s)}Ae.reload(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(JU,"reload");function XU(e){if(!wu)for(let t of pr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ln()}catch(s){r(s)}Ae.restart(e,(s,n)=>{Ae.disconnect(),t(n)})})}a(XU,"restart");function v5(e){return new Promise(async(t,r)=>{try{await Ln()}catch(s){r(s)}Ae.delete(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(v5,"deleteProcess");async function jU(){await fi(_i.generateRestart())}a(jU,"restartHdb");async function B5(){let e=await mT();for(let t in e)if(e[t].name===Ce.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(B5,"isHdbRestartRunning");function mT(){return new Promise(async(e,t)=>{try{await Ln()}catch(r){t(r)}Ae.list((r,s)=>{r&&(Ae.disconnect(),t(r)),Ae.disconnect(),e(s)})})}a(mT,"list");function ZU(e){return new Promise(async(t,r)=>{try{await Ln()}catch(s){r(s)}Ae.describe(e,(s,n)=>{s&&(Ae.disconnect(),r(s)),Ae.disconnect(),t(n)})})}a(ZU,"describe");function H5(){if(!wu){for(let e of pr||[])e.kill();pr=[];return}return new Promise(async(e,t)=>{try{await Ln()}catch(r){t(r)}Ae.killDaemon((r,s)=>{r&&(Ae.disconnect(),t(r)),Ae.disconnect(),e(s)})})}a(H5,"kill");async function x5(){try{await nM(),await iM(),await fi(_i.generateAllServiceConfigs())}catch(e){throw Ae?.disconnect(),e}}a(x5,"startAllServices");async function pT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ce.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=_i.generateMainServerConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=_i.generateNatsIngestServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=_i.generateNatsReplyServiceConfig();break;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=_i.generateNatsHubServerConfig(),await fi(r,t),await Cn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=_i.generateNatsLeafServerConfig(),await fi(r,t),await Cn.removeNatsConfig(e);return;case Ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=_i.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fi(r)}catch(r){throw Ae?.disconnect(),r}}a(pT,"startService");async function eM(){try{let e=await mT(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Ae?.disconnect(),e}}a(eM,"getUniqueServicesList");async function F5(e=[]){try{let t=!1,r=await eM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ce.PROCESS_DESCRIPTORS.HDB?t=!0:await XU(o))}t&&await rM(Ce.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ae?.disconnect(),t}}a(F5,"restartAllServices");async function tM(e){if(pr?.find(r=>r.name===e))return!0;let t=await w5.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(tM,"isServiceRegistered");async function rM(e){let t=e===Ce.PROCESS_DESCRIPTORS.HDB?$d.get(Ce.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):$d.get(Ce.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await ZU(e),s=N5.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await hT(e),await pT(e)):e===Ce.PROCESS_DESCRIPTORS.HDB?await jU():await JU(e)}a(rM,"reloadStopStart");var sM;async function nM(e=!1){for(let t in Ce.CLUSTERING_PROCESSES){let r=Ce.CLUSTERING_PROCESSES[t];await pT(r,e)}}a(nM,"startClusteringProcesses");async function iM(){sM=QU(Ce.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ce.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Iu.createWorkQueueStream(rn.WORK_QUEUE_CONSUMER_NAMES),await Iu.updateIngestStreamConsumer(),await Iu.updateLocalStreams();let e=await y5.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ce.PRE_4_0_0_VERSION){di.info("Starting clustering upgrade 4.0.0 process"),QU(Ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(iM,"startClusteringThreads");async function G5(){for(let e in Ce.CLUSTERING_PROCESSES)if(e!==Ce.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ce.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await sM.terminate();else{let t=Ce.CLUSTERING_PROCESSES[e];await hT(t)}}a(G5,"stopClustering");async function q5(){for(let e in Ce.CLUSTERING_PROCESSES){let t=Ce.CLUSTERING_PROCESSES[e];if(await tM(t)===!1)return!1}return!0}a(q5,"isClusteringRunning");async function k5(){await Cn.generateNatsConfig(!0),await Iu.reloadNATSHub(),await Iu.reloadNATSLeaf(),await Cn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Cn.removeNatsConfig(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(k5,"reloadClustering")});var Qd=T((cde,EM)=>{"use strict";var V5=require("minimist"),{isMainThread:gT,parentPort:lM}=require("worker_threads"),tt=w(),{PROCESS_DESCRIPTORS_VALIDATE:Cu}=tt,sn=q(),RT=z(),Yd=ET(),Ea=mt(),ST=et(),_M=Cr(),nn=aM(),cM=ua(),$5=xE(),{restartWorkers:Kd,onMessageByType:Y5}=at(),{handleHDBError:K5,hdb_errors:W5}=Z(),{HTTP_STATUS_CODES:Q5}=W5,Wd=j();Wd.initSync();var Lu=`Restarting HarperDB. This may take up to ${tt.RESTART_TIMEOUT_MS/1e3} seconds.`,z5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",uM="Clustering is not enabled so cannot be restarted",J5="Invalid service",ha,ds;EM.exports={restart:dM,restartService:AT};gT&&Y5(tt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?AT({service:e.workerType}):dM({operation:"restart"})});async function dM(e){ds=Object.keys(e).length===0,ha=await nn.isServiceRegistered(tt.HDB_PROC_DESCRIPTOR);let t=V5(process.argv);if(t.service){await AT(t);return}if(ds&&!ha){console.error(z5);return}if(ds&&console.log(Lu),ha){nn.enterPM2Mode(),sn.notify(Lu);let r=$5(Object.keys(tt.CONFIG_PARAM_MAP),!0);return RT.isEmptyOrZeroLength(Object.keys(r))||_M.updateConfigValue(void 0,void 0,r,!0,!0),j5(),Lu}return gT?(sn.notify(Lu),setTimeout(()=>{Kd()},50)):lM.postMessage({type:tt.ITC_EVENT_TYPES.RESTART}),Lu}a(dM,"restart");async function AT(e){let{service:t}=e;if(tt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw K5(new Error,J5,Q5.BAD_REQUEST,void 0,void 0,!0);if(ha=await nn.isServiceRegistered(tt.HDB_PROC_DESCRIPTOR),!gT)return lM.postMessage({type:tt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Cu.clustering:if(!Wd.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=uM;break}ds&&console.log("Restarting clustering"),sn.notify("Restarting clustering"),await fM();break;case Cu.clustering_config:case Cu["clustering config"]:if(!Wd.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=uM;break}ds&&console.log("Restarting clustering_config"),sn.notify("Restarting clustering_config"),await nn.reloadClustering();break;case"custom_functions":case"custom functions":case Cu.harperdb:case Cu.http_workers:if(ds&&!ha){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}ds&&console.log("Restarting http_workers"),sn.notify("Restarting http_workers"),ds?await nn.restart(tt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Kd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(sn.error(r),ds&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(AT,"restartService");async function X5(){await Ea.publishToStream(`${ST.SUBJECT_PREFIXES.TXN}.${ST.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,ST.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ea.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(X5,"postDummyNatsMsg");async function j5(){await fM(),await nn.restart(tt.HDB_PROC_DESCRIPTOR),await RT.async_set_timeout(2e3),Wd.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await TT(),ds&&(await Ea.closeConnection(),process.exit(0))}a(j5,"restartPM2Mode");async function fM(){if(!_M.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await cM.getHDBProcessInfo()).clustering.length===0)sn.trace("Clustering not running, restart will start clustering services"),await Yd.generateNatsConfig(!0),await nn.startClusteringProcesses(),await nn.startClusteringThreads(),await TT(),ds&&await Ea.closeConnection();else{await X5(),await Yd.generateNatsConfig(!0),ha?(sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await nn.restart(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await nn.restart(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await cM.getHDBProcessInfo()).clustering.forEach(n=>{sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await RT.async_set_timeout(3e3),await TT(),await Ea.updateLocalStreams(),ds&&await Ea.closeConnection(),sn.trace("Restart clustering restarting ingest and reply service threads");let t=Kd(tt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Kd(tt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(fM,"restartClustering");async function TT(){await Yd.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Yd.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(TT,"removeNatsConfig")});var NM=T((_de,bM)=>{"use strict";var lde=require("lodash"),Sr=w(),{handleHDBError:hM,hdb_errors:Z5}=Z(),{HDB_ERROR_MSGS:e8,HTTP_STATUS_CODES:t8}=Z5,OT=q();bM.exports={getRolePermissions:s8};var no=Object.create(null),r8=a(e=>({key:e,perms:{}}),"perms_template_obj"),TM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),gM=a((e=!1,t=!1,r=!1,s=!1)=>({[Sr.PERMS_CRUD_ENUM.READ]:e,[Sr.PERMS_CRUD_ENUM.INSERT]:t,[Sr.PERMS_CRUD_ENUM.UPDATE]:r,[Sr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),bT=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...gM(t,r,s,n)}),"table_perms_template"),mM=a((e,t=gM())=>({attribute_name:e,describe:OM(t),[Du]:t[Du],[NT]:t[NT],[yT]:t[yT]}),"attr_perms_template"),pM=a((e,t=!1)=>({attribute_name:e,describe:t,[Du]:t}),"timestamp_attr_perms_template"),{READ:Du,INSERT:NT,UPDATE:yT}=Sr.PERMS_CRUD_ENUM,RM=Object.values(Sr.PERMS_CRUD_ENUM),AM=[Du,NT,yT];function s8(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[Sr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(no[t]&&no[t].key===s)return no[t].perms;let n=n8(e,r);return no[t]?no[t].key=s:no[t]=r8(s),no[t].perms=n,n}catch(r){if(!e[Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Sr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw OT.error(s),OT.debug(r),hM(new Error,e8.OUTDATED_PERMS_TRANSLATION_ERROR,t8.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
11
- ${r.stack}`;throw OT.error(s),hM(new Error)}}}a(s8,"getRolePermissions");function n8(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Sr.SYSTEM_SCHEMA_NAME]=s[Sr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=i8(t[i]);return}r[i]=TM(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=o8(c,u);r[i].describe||RM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=bT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=bT()})}),r}a(n8,"translateRolePermissions");function i8(e){let t=TM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=bT(!0,!0,!0,!0,!0)}),t}a(i8,"createStructureUserPermissions");function o8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Sr.TIME_STAMP_NAMES.includes(d)&&(f=pM(d,l[Du])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=mM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=OM(l),n.attribute_permissions.push(l),c||a8(l,u)}else if(_!==o){let l;Sr.TIME_STAMP_NAMES.includes(_)?l=pM(_):l=mM(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=SM(n),n}else return e.describe=SM(e),e}a(o8,"getTableAttrPerms");function SM(e){return RM.filter(t=>e[t]).length>0}a(SM,"getSchemaTableDescribePerm");function OM(e){return AM.filter(t=>e[t]).length>0}a(OM,"getAttributeDescribePerm");function a8(e,t){AM.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(a8,"checkForHashPerms")});var yM={};ze(yM,{Resources:()=>zd,keyArrayToString:()=>ma,resetResources:()=>c8,resources:()=>Ei});function c8(){return Ei=new zd}function ma(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var zd,Ei,Uu=ge(()=>{Ci();zd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(c8,"resetResources");a(ma,"keyArrayToString")});var io,IT=ge(()=>{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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Mu={};ze(Mu,{authentication:()=>PM,bypassAuth:()=>h8,login:()=>p8,logout:()=>S8,start:()=>m8});function h8(){MM=!0}async function PM(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?d8?_8:[]:l8?u8:[];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 Jd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Jd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Jd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await wM.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new jd.AuthAuditLog(E,h,qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===qt.AUTH_AUDIT_STATUS.SUCCESS?IM.notify(S):IM.error(S)},"authAuditLog"),d;if(s){if(d=oo.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Ot.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Xd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,Xd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return E8&&(oo.get(h)||(oo.set(h,h),l(p,qt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:hi({error:A.message},e)})}oo.set(s,d),f8&&l(d.username,qt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Ot.getUser(_.user,null,e):(MM&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,LM.getSuperUser)());Jd&&(e.session.update=function(E){if(!u){u=(0,DM.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.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=u,wM.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")&&Ei.loginPath?(f.status=302,f.headers.set("Location",Ei.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new io);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function m8({server:e,port:t}){e.request(PM,{port:t||"all"}),CM||(CM=!0,setInterval(()=>{oo=new Map},Es.get(qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),UM.user.addListener(()=>{oo=new Map}))}async function p8(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 S8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var LM,Xd,DM,Es,qt,jd,UM,IM,u8,l8,_8,d8,wM,Jd,MM,f8,E8,oo,CM,Zd=ge(()=>{LM=M(Br());es();Uu();Xd=M(fu());Se();DM=require("uuid"),Es=M(j()),qt=M(w()),jd=M(q()),UM=M(vc());IT();pa();IM=(0,jd.loggerWithTag)("auth-event");Es.initSync();u8=Es.get(qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),l8=Es.get(qt.CONFIG_PARAMS.HTTP_CORS),_8=Es.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),d8=Es.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),wM=ct({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Jd=Es.get(qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,MM=Es.get(qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,f8=Es.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,E8=Es.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,oo=new Map;Ot.onInvalidatedUser(()=>{oo=new Map});a(h8,"bypassAuth");a(PM,"authentication");a(m8,"start");a(p8,"login");a(S8,"logout")});var qM=T((Ode,GM)=>{"use strict";var Oe=require("joi"),vM=require("fs-extra"),BM=require("path"),Un=je(),HM=j(),xM=w(),FM=q(),{hdb_errors:T8}=Z(),{HDB_ERROR_MSGS:jt}=T8,Dn=/^[a-zA-Z0-9-_]+$/;GM.exports={getDropCustomFunctionValidator:R8,setCustomFunctionValidator:A8,addComponentValidator:y8,dropCustomFunctionProjectValidator:I8,packageComponentValidator:w8,deployComponentValidator:C8,setComponentFileValidator:O8,getComponentFileValidator:N8,dropComponentFileValidator:b8};function ef(e,t,r){try{let s=HM.get(xM.CONFIG_PARAMS.COMPONENTSROOT),n=BM.join(s,t);return vM.existsSync(n)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(s){return FM.error(s),r.message(jt.VALIDATION_ERR)}}a(ef,"checkProjectExists");function Pu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Pu,"checkFilePath");function g8(e,t,r,s){try{let n=HM.get(xM.CONFIG_PARAMS.COMPONENTSROOT),i=BM.join(n,e,t,r+".js");return vM.existsSync(i)?r:s.message(jt.NO_FILE)}catch(n){return FM.error(n),s.message(jt.VALIDATION_ERR)}}a(g8,"checkFileExists");function R8(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(ef.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().pattern(Dn).custom(g8.bind(null,e.project,e.type)).custom(Pu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Un.validateBySchema(e,t)}a(R8,"getDropCustomFunctionValidator");function A8(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(ef.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().custom(Pu).required(),function_content:Oe.string().required()});return Un.validateBySchema(e,t)}a(A8,"setCustomFunctionValidator");function O8(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Oe.string().custom(Pu).required(),payload:Oe.string().allow("").optional(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Un.validateBySchema(e,t)}a(O8,"setComponentFileValidator");function b8(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Oe.string().custom(Pu).optional()});return Un.validateBySchema(e,t)}a(b8,"dropComponentFileValidator");function N8(e){let t=Oe.object({project:Oe.string().required(),file:Oe.string().custom(Pu).required(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Un.validateBySchema(e,t)}a(N8,"getComponentFileValidator");function y8(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(ef.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Un.validateBySchema(e,t)}a(y8,"addComponentValidator");function I8(e){let t=Oe.object({project:Oe.string().pattern(Dn).custom(ef.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Un.validateBySchema(e,t)}a(I8,"dropCustomFunctionProjectValidator");function w8(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Oe.boolean()});return Un.validateBySchema(e,t)}a(w8,"packageComponentValidator");function C8(e){let t=Oe.object({project:Oe.string().pattern(Dn).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Oe.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Oe.string().optional()});return Un.validateBySchema(e,t)}a(C8,"deployComponentValidator")});var nf=T((Nde,QM)=>{"use strict";var tf=require("joi"),rf=require("path"),kM=require("fs-extra"),{exec:L8}=require("child_process"),D8=require("util"),VM=D8.promisify(L8),vu=w(),{handleHDBError:Sa,hdb_errors:U8}=Z(),{HTTP_STATUS_CODES:Ta}=U8,Bu=j(),M8=je(),ga=q();Bu.initSync();var wT=Bu.get(vu.CONFIG_PARAMS.COMPONENTSROOT),$M="npm install --omit=dev --json",P8=`${$M} --dry-run`;QM.exports={installModules:x8,auditModules:F8,installAllRootModules:v8,uninstallRootModule:B8,linkHarperdb:H8};async function v8(e=!1){await sf(),await Hu(e?"npm install --ignore-scripts":"npm install",Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(v8,"installAllRootModules");async function B8(e){await Hu(`npm uninstall ${e}`,Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(B8,"uninstallRootModule");async function H8(){await sf(),await Hu(`npm link ${vu.PACKAGE_ROOT}`,Bu.get(vu.CONFIG_PARAMS.ROOTPATH))}a(H8,"linkHarperdb");async function Hu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await VM(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
12
- `,""))}return s&&!s.includes("Debugger listening")&&ga.error("Error running NPM command:",e,s),ga.trace(r,s),r?.replace(`
13
- `,"")}a(Hu,"runCommand");async function x8(e){ga.info(`starting installModules for request: ${e}`);let t=WM(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?P8:$M;await sf(),await KM(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=rf.join(wT,u),l,d=null;try{let{stdout:f,stderr:E}=await VM(n,{cwd:_});l=f?f.replace(`
10
+ `,"")}a(rL,"runCommand");async function b4(){try{await r4.access(jp)}catch{return!1}let e=await rL(`${jp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return n4.eq(t,A4)}a(b4,"checkNATSServerInstalled");async function rS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await jC.getClusterUser();if(ro(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Fr.trace("create nats connection called");let i=await E4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Fr.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Fr.error("Error with Nats client connection, connection closed",o),nL()}),i}a(rS,"createConnection");function nL(){sn=void 0,Zi=void 0,eo=void 0,to=void 0}a(nL,"clearClientCache");async function N4(){sn&&(await sn.drain(),sn=void 0,Zi=void 0,eo=void 0,to=void 0)}a(N4,"closeConnection");var sn,to;async function od(){return to||(to=rS(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),sn=await to),sn||to}a(od,"getConnection");async function au(){if(Zi)return Zi;ro(sn)&&await od();let{domain:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ro(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Zi=await sn.jetstreamManager({domain:e,timeout:6e4}),Zi}a(au,"getJetStreamManager");async function sL(){if(eo)return eo;ro(sn)&&await od();let{domain:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ro(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return eo=sn.jetstream({domain:e,timeout:6e4}),eo}a(sL,"getJetStream");async function ur(){let e=sn||await od(),t=Zi||await au(),r=eo||await sL();return{connection:e,jsm:t,js:r}}a(ur,"getNATSReferences");async function y4(e){let t=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await jC.getClusterUser(),s=await rS(t,r,n),i=tS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=tL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 Zp.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(y4,"getServerList");async function nS(e,t){let{jsm:r}=await ur(),n=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:ZC.File,retention:eL.Limits,subjects:t,discard:h4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(nS,"createLocalStream");async function iL(){let{jsm:e}=await ur(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(iL,"listStreams");async function I4(e){let{jsm:t}=await ur();await t.streams.delete(e)}a(I4,"deleteLocalStream");async function w4(e){let{connection:t}=await ur(),r=[],n=tS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(tL.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(w4,"listRemoteStreams");async function C4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=zC(),o={durable_name:i,ack_policy:sd.Explicit};t&&(o.deliver_policy=id.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=eS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(C4,"viewStream");async function*L4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=zC(),o={durable_name:i,ack_policy:sd.Explicit};t&&(o.deliver_policy=id.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=eS(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(L4,"viewStreamIterator");async function D4(e,t,r,n){Fr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=oL(n,r);let{js:s}=await ur(),i=await uu(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:XC.encode(n);try{Fr.trace(`publishToStream publishing to subject: ${o}`),g4(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return lL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Fr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await nS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(D4,"publishToStream");function oL(e,t){t===void 0&&(t=p4());let r=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(oL,"addNatsMsgHeader");function cu(e){e=e.toLowerCase();let t=ou.join(Gt.get(Me.CONFIG_PARAMS.ROOTPATH),R4);if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ro(Xp)&&(Xp={port:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ou.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),Xp;if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ro(Jp)&&(Jp={port:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:su.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:ou.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),Jp;Fr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(cu,"getServerConfig");async function M4(e){let{jsm:t}=await ur(),r=await uu();try{await t.streams.add({name:e.stream_name,storage:ZC.File,retention:eL.Limits,max_age:d4,max_bytes:f4,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:sd.Explicit,durable_name:e.durable_name,deliver_policy:id.All,max_ack_pending:1e4});else throw n}}a(M4,"createWorkQueueStream");async function U4(){let{jsm:e}=await ur();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Fr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),Fr.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:sd.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:id.All,max_ack_pending:1e4}))}a(U4,"updateIngestStreamConsumer");async function aL(e,t,r){let{jsm:n}=await ur(),s=await n.streams.info(t),i=cL(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=nd.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(aL,"addSourceToWorkStream");function cL(e){return e.split(".")[1]}a(cL,"extractServerName");async function uL(e,t,r){let{jsm:n}=await ur(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=nd.createNatsTableStreamName(s,i),u=await n.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await n.streams.update(t,u.config)}a(uL,"removeSourceFromWorkStream");async function P4(e,t,r=6e4,n=tS()){if(!Zp.isObject(t))throw new Error("data param must be an object");let s=XC.encode(t),{connection:i}=await ur(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return eS(c.data)}a(P4,"request");function sS(e){return new Promise(async(t,r)=>{let n=a4(jp,["--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(sS,"reloadNATS");async function v4(){let{pid_file_path:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await sS(e)}a(v4,"reloadNATSHub");async function B4(){let{pid_file_path:e}=cu(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await sS(e)}a(B4,"reloadNATSLeaf");function H4(e,t,r){let n;switch(e.code){case QC.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case QC.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(H4,"requestErrorHandler");async function x4(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await lL(async()=>{e.subscribe===!0?await aL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await uL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(x4,"updateWorkStream");function lL(e){return c4.writeTransaction(Me.SYSTEM_SCHEMA_NAME,Me.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lL,"exclusiveLock");async function _L(e,t){let r=nd.createNatsTableStreamName(e,t),n=await uu(),s=k4(e,t,n);await nS(r,[s])}a(_L,"createLocalTableStream");async function q4(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await _L(n,s)}}a(q4,"createTableStreams");async function dL(e,t,r=!1){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=nd.createNatsTableStreamName(e,t),{jsm:s}=await ur();r?await s.streams.purge(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")Fr.warn(n);else throw n}}a(dL,"purgeTableStream");async function F4(e,t){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await dL(e,t[r])}a(F4,"purgeSchemaTableStreams");async function G4(e){return(await au()).streams.info(e)}a(G4,"getStreamInfo");function k4(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(k4,"createSubjectName");async function uu(){if(iu)return iu;if(iu=(await au())?.nc?.info?.server_name,iu===void 0)throw new Error("Unable to get jetstream manager server name");return iu}a(uu,"getJsmServerName");async function V4(){let e=await au(),t=await uu(),r=await iL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=$4(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Fr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Fr.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(V4,"updateLocalStreams");function $4(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gt.get(Me.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($4,"updateStreamLimits")});var ld=T((s_e,pL)=>{"use strict";var ra=m_(),na=wC(),Y4=V(),K4=require("uuid").v4,n_e=require("clone"),cd=As(),sa=M(),W4=require("util"),si=Cn(),{handleHDBError:lr,hdb_errors:Q4}=Z(),{HDB_ERROR_MSGS:ad,HTTP_STATUS_CODES:_r}=Q4,{SchemaEventMsg:ud}=Ln(),EL=St(),{getDatabases:z4}=(ge(),ee(xe)),{transformReq:ia}=J();pL.exports={createSchema:J4,createSchemaStructure:hL,createTable:X4,createTableStructure:mL,createAttribute:r3,dropSchema:j4,dropTable:Z4,dropAttribute:e3,getBackup:n3};async function J4(e){let t=await hL(e);return cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema)),t}a(J4,"createSchema");async function hL(e){let t=ra.schema_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(ia(e),!await na.checkSchemaExists(e.schema))throw lr(new Error,ad.SCHEMA_EXISTS_ERR(e.schema),_r.BAD_REQUEST,sa.LOG_LEVELS.ERROR,ad.SCHEMA_EXISTS_ERR(e.schema),!0);return await si.createSchema(e),`database '${e.schema}' successfully created`}a(hL,"createSchemaStructure");async function X4(e){return ia(e),e.hash_attribute=e.primary_key??e.hash_attribute,await mL(e)}a(X4,"createTable");async function mL(e){let t=ra.create_table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(ra.validateTableResidence(e.residence),!await na.checkSchemaTableExists(e.schema,e.table))throw lr(new Error,ad.TABLE_EXISTS_ERR(e.schema,e.table),_r.BAD_REQUEST,sa.LOG_LEVELS.ERROR,ad.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:K4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await si.createTable(n,e);else throw lr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",_r.BAD_REQUEST);else await si.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(mL,"createTableStructure");async function j4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ra.schema_object(e),n=t??r;if(n)throw lr(n,n.message,_r.BAD_REQUEST,void 0,void 0,!0);ia(e);let s=await na.checkSchemaExists(e.schema);if(s)throw lr(new Error,s,_r.NOT_FOUND,sa.LOG_LEVELS.ERROR,s,!0);let i=await na.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await si.dropSchema(e),cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema)),await EL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(j4,"dropSchema");async function Z4(e){let t=ra.table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);return await si.dropTable(e),await EL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Z4,"dropTable");async function e3(e){let t=ra.attribute_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await na.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw lr(new Error,"You cannot drop a hash attribute",_r.BAD_REQUEST,void 0,void 0,!0);if(sa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw lr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,_r.BAD_REQUEST,void 0,void 0,!0);try{return await si.dropAttribute(e),t3(e),cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Y4.error(`Got an error deleting attribute ${W4.inspect(e)}.`),n}}a(e3,"dropAttribute");function t3(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(t3,"dropAttributeFromGlobal");async function r3(e){ia(e);let t=z4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw lr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,_r.BAD_REQUEST,void 0,void 0,!0);return await si.createAttribute(e),cd.signalSchemaChange(new ud(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(r3,"createAttribute");function n3(e){return si.getBackup(e)}a(n3,"getBackup")});var TL=T((o_e,SL)=>{"use strict";var{OPERATIONS_ENUM:s3}=M(),iS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=s3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};SL.exports=iS});var oS=T((u_e,bL)=>{"use strict";var i3=Cn(),c_e=TL(),_d=J(),dd=M(),o3=j(),{handleHDBError:gL,hdb_errors:a3}=Z(),{HDB_ERROR_MSGS:RL,HTTP_STATUS_CODES:AL}=a3,c3=Object.values(dd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),OL="To use this operation audit log must be enabled in harperdb-config.yaml";bL.exports=u3;async function u3(e){if(_d.isEmpty(e.schema))throw new Error(RL.SCHEMA_REQUIRED_ERR);if(_d.isEmpty(e.table))throw new Error(RL.TABLE_REQUIRED_ERR);if(!o3.get(dd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw gL(new Error,OL,AL.BAD_REQUEST,dd.LOG_LEVELS.ERROR,OL,!0);let t=_d.checkSchemaTableExist(e.schema,e.table);if(t)throw gL(new Error,t,AL.NOT_FOUND,dd.LOG_LEVELS.ERROR,t,!0);if(!_d.isEmpty(e.search_type)&&c3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await i3.readAuditLog(e)}a(u3,"readAuditLog")});var yL=T((__e,NL)=>{"use strict";var{OPERATIONS_ENUM:l3}=M(),aS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=l3.GET_BACKUP,this.schema=t,this.table=r}};NL.exports=aS});var CL=T((h_e,wL)=>{"use strict";var _3=Cn(),f_e=yL(),cS=J(),d3=M(),E_e=j(),{handleHDBError:f3,hdb_errors:E3}=Z(),{HDB_ERROR_MSGS:IL,HTTP_STATUS_CODES:h3}=E3;wL.exports=m3;async function m3(e){if(cS.isEmpty(e.schema))throw new Error(IL.SCHEMA_REQUIRED_ERR);if(cS.isEmpty(e.table))throw new Error(IL.TABLE_REQUIRED_ERR);let t=cS.checkSchemaTableExist(e.schema,e.table);if(t)throw f3(new Error,t,h3.NOT_FOUND,d3.LOG_LEVELS.ERROR,t,!0);return await _3.getBackup(read_audit_log_object)}a(m3,"getBackup")});var vL=T((p_e,PL)=>{var ii=require("validate.js"),DL=et(),oa=M(),{handleHDBError:p3,hdb_errors:S3}=Z(),{HDB_ERROR_MSGS:ft,HTTP_STATUS_CODES:T3}=S3,uS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),g3={STRUCTURE_USER:"structure_user"},LL=Object.values(oa.ROLE_TYPES_ENUM),R3="attribute_permissions",A3="attribute_name",{PERMS_CRUD_ENUM:aa}=oa,O3=[R3,...Object.values(aa)],ML=[aa.READ,aa.INSERT,aa.UPDATE],b3=[A3,...ML];function N3(e){let t=uS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,UL(e,t)}a(N3,"addRoleValidation");function y3(e){let t=uS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,UL(e,t)}a(y3,"alterRoleValidation");function I3(e){let t=uS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DL.validateObject(e,t)}a(I3,"dropRoleValidation");var w3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function UL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)w3.includes(n[o])||s.push(n[o]);s.length>0&&Tt(ft.INVALID_ROLE_JSON_KEYS(s),r);let i=DL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Tt(o,r)}),e.permission){let o=C3(e);o&&Tt(o,r),LL.forEach(c=>{e.permission[c]&&!ii.isBoolean(e.permission[c])&&Tt(ft.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(LL.indexOf(o)<0){if(o===g3.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||Tt(ft.SCHEMA_NOT_FOUND(d),r)}continue}Tt(ft.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Tt(ft.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){Tt(ft.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{O3.includes(l)||Tt(ft.INVALID_PERM_KEY(l),r,o,u)}),Object.values(aa).forEach(l=>{ii.isDefined(_[l])?ii.isBoolean(_[l])||Tt(ft.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):Tt(ft.TABLE_PERM_MISSING(l),r,o,u)}),ii.isDefined(_.attribute_permissions)){if(!ii.isArray(_.attribute_permissions)){Tt(ft.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Tt(ft.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!b3.includes(p)&&p!==aa.DELETE&&Tt(ft.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ii.isDefined(E.attribute_name)){Tt(ft.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){Tt(ft.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}ML.forEach(p=>{ii.isDefined(E[p])?ii.isBoolean(E[p])||Tt(ft.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Tt(ft.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;Tt(ft.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return L3(r)}a(UL,"customValidate");PL.exports={addRoleValidation:N3,alterRoleValidation:y3,dropRoleValidation:I3};function C3(e){let{operation:t,permission:r}=e;if(t===oa.OPERATIONS_ENUM.ADD_ROLE||t===oa.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 ft.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?oa.ROLE_TYPES_ENUM.SUPER_USER:oa.ROLE_TYPES_ENUM.CLUSTER_USER;return ft.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(C3,"validateNoSUPerms");function L3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ft.ROLE_PERMS_ERROR,...e};return p3(new Error,n,T3.BAD_REQUEST)}else return null}a(L3,"generateRolePermResponse");function Tt(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(Tt,"addPermError")});var hS=T((T_e,qL)=>{"use strict";var BL=rn(),HL=tn(),D3=Vi(),_S=vL(),dS=As(),M3=require("uuid").v4,U3=require("util"),fd=M(),P3=J(),fS=HL.searchByValue,v3=HL.searchByHash,B3=U3.promisify(D3.delete),H3=Jn(),x3=Zo(),{hdb_errors:q3,handleHDBError:no}=Z(),{HDB_ERROR_MSGS:xL,HTTP_STATUS_CODES:lu}=q3,{UserEventMsg:ES}=Ln();qL.exports={addRole:F3,alterRole:G3,dropRole:k3,listRoles:V3};function lS(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(lS,"scrubRoleDetails");async function F3(e){let t=_S.addRoleValidation(e);if(t)throw t;e=lS(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 fS(r)||[])}catch(i){throw no(i)}if(n&&n.length>0)throw no(new Error,xL.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=M3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BL.insert(s),dS.signalUserChange(new ES(process.pid)),e=lS(e),e}a(F3,"addRole");async function G3(e){let t=_S.alterRoleValidation(e);if(t)throw t;e=lS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await BL.update(r)}catch(s){throw no(s)}if(n&&n?.message==="updated 0 of 1 records")throw no(new Error,"Invalid role id",lu.BAD_REQUEST,void 0,void 0,!0);return await dS.signalUserChange(new ES(process.pid)),e}a(G3,"alterRole");async function k3(e){let t=_S.dropRoleValidation(e);if(t)throw no(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new x3(fd.SYSTEM_SCHEMA_NAME,fd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await v3(r));if(n.length===0)throw no(new Error,xL.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let s=new H3(fd.SYSTEM_SCHEMA_NAME,fd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fS(s)),o=!1;if(P3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw no(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,lu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await B3(c),dS.signalUserChange(new ES(process.pid)),`${n[0].role} successfully deleted`}a(k3,"dropRole");async function V3(){return fS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(V3,"listRoles")});var VL=T((R_e,kL)=>{"use strict";var $3=j(),oi=require("joi"),Y3=et(),FL=require("moment"),K3=require("fs-extra"),mS=require("path"),W3=require("lodash"),_u=M(),{LOG_LEVELS:so}=M(),Q3="YYYY-MM-DD hh:mm:ss",z3=mS.resolve(__dirname,"../logs");kL.exports=function(e){return Y3.validateBySchema(e,J3)};var J3=oi.object({from:oi.custom(GL),until:oi.custom(GL),level:oi.valid(so.NOTIFY,so.FATAL,so.ERROR,so.WARN,so.INFO,so.DEBUG,so.TRACE),order:oi.valid("asc","desc"),limit:oi.number().min(1),start:oi.number().min(0),log_name:oi.custom(X3)});function GL(e,t){if(FL(e,FL.ISO_8601).format(Q3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(GL,"validateDatetime");function X3(e,t){if(W3.invert(_u.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=$3.get(_u.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?_u.LOG_NAMES.HDB:e,i=s===_u.LOG_NAMES.INSTALL?mS.join(z3,_u.LOG_NAMES.INSTALL):mS.join(n,s);return K3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(X3,"validateReadLogPath")});var SS=T((O_e,YL)=>{"use strict";var Ed=M(),j3=V(),Z3=j(),eX=VL(),pS=require("path"),$L=require("fs-extra"),{once:tX}=require("events"),{handleHDBError:rX,hdb_errors:nX}=Z(),{PACKAGE_ROOT:sX}=M(),iX=pS.join(sX,"logs"),oX=1e3,aX=200;YL.exports=cX;async function cX(e){let t=eX(e);if(t)throw rX(t,t.message,nX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Z3.get(Ed.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Ed.LOG_NAMES.HDB:e.log_name,s=n===Ed.LOG_NAMES.INSTALL?pS.join(iX,Ed.LOG_NAMES.INSTALL):pS.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?oX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max($L.statSync(s).size-(h+5)*aX,0));let S=$L.createReadStream(s,{start:p});S.on("error",q=>{j3.error(q)});let A=0,I=[],w="",B;S.on("data",q=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=w+q;let Q=0,Y;for(;(Y=P.exec(q))&&!S.destroyed;){B&&(B.message=q.slice(Q,Y.index),K(B));let[z,re,Ie]=Y,ne=Ie.split("] ["),ct=ne[0],de=ne[1];ne.splice(0,2),B={timestamp:re,thread:ct,level:de,tags:ne,message:""},Q=Y.index+z.length}w=q.slice(Q)}),S.on("end",q=>{S.destroyed||B&&(B.message=w.trim(),K(B))}),S.resume();function K(q){let P,Q,Y;switch(!0){case(i&&c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),q.level===o&&P>=Q&&P<=Y&&A<E?A++:q.level===o&&P>=Q&&P<=Y&&(ai(q,f,I),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(q.timestamp),Q=new Date(u),q.level===o&&P>=Q&&A<E?A++:q.level===o&&P>=Q&&(ai(q,f,I),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(q.timestamp),Y=new Date(l),q.level===o&&P<=Y&&A<E?A++:q.level===o&&P<=Y&&(ai(q,f,I),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(q.timestamp),Q=new Date(u),Y=new Date(l),P>=Q&&P<=Y&&A<E?A++:P>=Q&&P<=Y&&(ai(q,f,I),A++,A===h&&S.destroy());break;case i:q.level===o&&A<E?A++:q.level===o&&(ai(q,f,I),A++,A===h&&S.destroy());break;case c:P=new Date(q.timestamp),Q=new Date(u),P>=Q&&A<E?A++:P>=Q&&A>=E&&(ai(q,f,I),A++,A===h&&S.destroy());break;case _:P=new Date(q.timestamp),Y=new Date(l),P<=Y&&A<E?A++:P<=Y&&A>=E&&(ai(q,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(ai(q,f,I),A++,A===h&&S.destroy())}}return a(K,"onLogMessage"),await tX(S,"close"),I}a(cX,"readLog");function ai(e,t,r){t==="desc"?uX(e,r):t==="asc"?lX(e,r):r.push(e)}a(ai,"pushLineToResult");function uX(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(uX,"insertDescending");function lX(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(lX,"insertAscending")});var hd=T((w_e,zL)=>{"use strict";var TS=require("joi"),{string:du,boolean:KL,date:_X}=TS.types(),dX=et(),{validateSchemaExists:N_e,validateTableExists:y_e,validateSchemaName:I_e}=Kn(),fX=M(),EX=nt(),WL=j();WL.initSync();var hX=du.invalid(WL.get(fX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(EX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),QL={operation:du.valid("add_node","update_node","set_node_replication"),node_name:hX,subscriptions:TS.array().items({table:du.optional(),schema:du.optional(),database:du.optional(),subscribe:KL.required(),publish:KL.required().custom(pX),start_time:_X.iso()}).min(1).required()};function mX(e){return dX.validateBySchema(e,TS.object(QL))}a(mX,"addUpdateNodeValidator");function pX(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(pX,"checkForFalsy");zL.exports={addUpdateNodeValidator:mX,validation_schema:QL}});var XL=T((L_e,JL)=>{var SX=et(),TX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JL.exports=function(e){return SX.validateObject(e,TX)}});var RS=T((D_e,jL)=>{"use strict";var gX=M().OPERATIONS_ENUM,gS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=gX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};jL.exports=gS});var eD=T((U_e,ZL)=>{"use strict";var RX={OPERATION:"operation",REFRESH:"refresh"},AS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},OS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};ZL.exports={JWTTokens:AS,TOKEN_TYPE_ENUM:RX,JWTRSAKeys:OS}});var hu=T((v_e,sD)=>{"use strict";var Eu=require("jsonwebtoken"),bS=require("fs-extra"),NS=J(),on=M(),{handleHDBError:dr,hdb_errors:AX}=Z(),{HTTP_STATUS_CODES:fr,AUTHENTICATION_ERROR_MSGS:Er}=AX,fu=V(),tD=C_(),wS=vr(),OX=rn().update,bX=RS(),NX=As(),{UserEventMsg:yX}=Ln(),ci=j();ci.initSync();var yS=require("path"),{JWTTokens:IX,JWTRSAKeys:wX,TOKEN_TYPE_ENUM:md}=eD(),CX=ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",LX=ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",pd="RS256",IS;sD.exports={createTokens:DX,validateOperationToken:UX,refreshOperationToken:MX,validateRefreshToken:nD};async function DX(e){if(NS.isEmpty(e)||typeof e!="object")throw dr(new Error,Er.INVALID_AUTH_OBJECT,fr.BAD_REQUEST,void 0,void 0,!0);if(NS.isEmpty(e.username))throw dr(new Error,Er.USERNAME_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);if(NS.isEmpty(e.password))throw dr(new Error,Er.PASSWORD_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await wS.findAndValidateUser(e.username,e.password),!t)throw dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw fu.error(f),dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await Sd(),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 rD(i,r.private_key,r.passphrase),c=await Eu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:LX,algorithm:pd,subject:md.REFRESH}),u=tD.hash(c),_=new bX(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await OX(_)}catch(f){fu.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw dr(new Error,Er.REFRESH_TOKEN_SAVE_FAILED,fr.INTERNAL_SERVER_ERROR);return NX.signalUserChange(new yX(process.pid)),new IX(o,c)}a(DX,"createTokens");async function rD(e,t,r){return await Eu.sign(e,{key:t,passphrase:r},{expiresIn:CX,algorithm:pd,subject:md.OPERATION})}a(rD,"signOperationToken");async function Sd(){if(IS===void 0)try{let e=yS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PASSPHRASE_NAME),t=yS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=yS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await bS.readFile(e)).toString(),s=(await bS.readFile(t)).toString(),i=(await bS.readFile(r)).toString();IS=new wX(i,s,n)}catch(e){throw fu.error(e),dr(new Error,Er.NO_ENCRYPTION_KEYS,fr.INTERNAL_SERVER_ERROR)}return IS}a(Sd,"getJWTRSAKeys");async function MX(e){if(!e)throw dr(new Error,Er.INVALID_BODY,fr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw dr(new Error,Er.REFRESH_TOKEN_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);await nD(e.refresh_token);let t=await Sd(),r=await Eu.decode(e.refresh_token);return{operation_token:await rD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MX,"refreshOperationToken");async function UX(e){try{let t=await Sd(),r=await Eu.verify(e,t.public_key,{algorithms:pd,subject:md.OPERATION});return await wS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw fu.warn(t),t.name&&t.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}}a(UX,"validateOperationToken");async function nD(e){let t;try{let r=await Sd(),n=await Eu.verify(e,r.public_key,{algorithms:pd,subject:md.REFRESH});t=await wS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw fu.warn(r),r.name&&r.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}if(!tD.validate(t.refresh_token,e))throw dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED);return t}a(nD,"validateRefreshToken")});var CS=T((x_e,aD)=>{"use strict";var PX=XL(),ca=require("passport"),vX=require("passport-local").Strategy,BX=require("passport-http").BasicStrategy,HX=require("util"),xX=vr(),oD=HX.callbackify(xX.findAndValidateUser),H_e=Ir(),qX=M(),iD=hu();ca.use(new vX(function(e,t,r){oD(e,t,r)}));ca.use(new BX(function(e,t,r){oD(e,t,r)}));ca.serializeUser(function(e,t){t(null,e)});ca.deserializeUser(function(e,t){t(null,e)});function FX(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":ca.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===qX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iD.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):iD.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ca.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(FX,"authorize");function GX(e,t){let r=PX(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(GX,"checkPermissions");aD.exports={authorize:FX,checkPermissions:GX}});var ua=T((F_e,cD)=>{"use strict";var LS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},DS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};cD.exports={Node:LS,NodeSubscription:DS}});var lD=T((k_e,uD)=>{"use strict";var kX=M().OPERATIONS_ENUM,MS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=kX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uD.exports=MS});var mu=T(($_e,_D)=>{"use strict";var US=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},PS=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)}};_D.exports={RemotePayloadObject:US,RemotePayloadSubscription:PS}});var fD=T((K_e,dD)=>{"use strict";var vS=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}};dD.exports=vS});var mD=T((X_e,hD)=>{"use strict";var VX=fD(),Q_e=ht(),ED=$e(),$X=V(),{getSchemaPath:z_e,getTransactionAuditStorePath:J_e}=We(),{getDatabases:YX}=(ge(),ee(xe));hD.exports=KX;async function KX(e){let t=new VX;try{let r=YX()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await ED.environmentDataSize(schema_path,e.name),o=await ED.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){$X.warn(`unable to stat table dbi due to ${r}`)}return t}a(KX,"lmdbGetTableSize")});var SD=T((Z_e,pD)=>{"use strict";var BS=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}};pD.exports=BS});var la=T((nde,AD)=>{"use strict";var WX=require("fs-extra"),QX=require("path"),Xt=require("systeminformation"),ui=V(),zX=St(),HS=nt(),gd=M(),JX=mD(),RD=xi(),{getThreadInfo:TD}=tt(),WS=j();WS.initSync();var XX=SD(),{openEnvironment:tde}=$e(),{getSchemaPath:rde}=We(),{database:jX}=(ge(),ee(xe)),Td;AD.exports={getHDBProcessInfo:GS,getNetworkInfo:VS,getDiskInfo:kS,getMemoryInfo:FS,getCPUInfo:qS,getTimeInfo:xS,getSystemInformation:$S,systemInformation:ZX,getTableSize:YS,getMetrics:KS};function xS(){return Xt.time()}a(xS,"getTimeInfo");async function qS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Xt.currentLoad();return I.cpus=[],A.forEach(w=>{let{raw_load:B,raw_load_idle:K,raw_load_irq:q,raw_load_nice:P,raw_load_system:Q,raw_load_user:Y,...z}=w;I.cpus.push(z)}),l.current_load=I,l}catch(e){return ui.error(`error in getCPUInfo: ${e}`),{}}}a(qS,"getCPUInfo");async function FS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Xt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ui.error(`error in getMemoryInfo: ${e}`),{}}}a(FS,"getMemoryInfo");async function GS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await WX.readFile(QX.join(WS.get(gd.CONFIG_PARAMS.ROOTPATH),gd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===gd.NODE_ERROR_CODES.ENOENT)ui.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ui.error(`error in getHDBProcessInfo: ${t}`),e}}a(GS,"getHDBProcessInfo");async function kS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return ui.error(`error in getDiskInfo: ${t}`),e}}a(kS,"getDiskInfo");async function VS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await Xt.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return ui.error(`error in getNetworkInfo: ${t}`),e}}a(VS,"getNetworkInfo");async function $S(){if(Td!==void 0)return Td;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Td=e,Td}catch(t){return ui.error(`error in getSystemInformation: ${t}`),e}}a($S,"getSystemInformation");async function YS(){let e=[],t=await RD.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await JX(n));return e}a(YS,"getTableSize");async function KS(){let e=await RD.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=jX({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),n[s]=o}catch(i){ui.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(KS,"getMetrics");async function gD(){if(WS.get(gd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await zX.getNATSReferences(),r=await t.streams.info(HS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(HS.WORK_QUEUE_CONSUMER_NAMES.stream_name,HS.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(gD,"getNatsStreamInfo");async function ZX(e){let t=new XX;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $S(),t.time=xS(),t.cpu=await qS(),t.memory=await FS(),t.disk=await kS(),t.network=await VS(),t.harperdb_processes=await GS(),t.table_size=await YS(),t.metrics=await KS(),t.threads=await TD(),t.replication=await gD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $S();break;case"time":t.time=xS();break;case"cpu":t.cpu=await qS();break;case"memory":t.memory=await FS();break;case"disk":t.disk=await kS();break;case"network":t.network=await VS();break;case"harperdb_processes":t.harperdb_processes=await GS();break;case"table_size":t.table_size=await YS();break;case"database_metrics":case"metrics":t.metrics=await KS();break;case"threads":t.threads=await TD();break;case"replication":t.replication=await gD();break;default:break}return t}a(ZX,"systemInformation")});var QS=T((ide,OD)=>{"use strict";OD.exports={version:ej,printVersion:tj};var Rd=Zc();function ej(){if(Rd)return Rd.version}a(ej,"version");function tj(){Rd&&console.log(`HarperDB Version ${Rd.version}`)}a(tj,"printVersion")});var Is=T((ude,ID)=>{"use strict";var rj=rn(),zS=J(),nj=require("util"),io=M(),bD=j();bD.initSync();var sj=CS(),ND=tn(),{Node:ade,NodeSubscription:cde}=ua(),ij=Zo(),oj=lD(),{RemotePayloadObject:aj,RemotePayloadSubscription:cj}=mu(),{handleHDBError:uj,hdb_errors:lj}=Z(),{HTTP_STATUS_CODES:_j,HDB_ERROR_MSGS:dj}=lj,fj=Jn(),Ej=la(),hj=QS(),{getDatabases:mj}=(ge(),ee(xe)),pj=nj.promisify(sj.authorize),Sj=ND.searchByHash,Tj=ND.searchByValue;ID.exports={authHeaderToUser:gj,isEmpty:Rj,getNodeRecord:Aj,upsertNodeRecord:Oj,buildNodePayloads:bj,checkClusteringEnabled:Nj,getAllNodeRecords:yj,getSystemInfo:Ij,reverseSubscription:yD};async function gj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await pj(t,null),e}a(gj,"authHeaderToUser");function Rj(e){return e==null}a(Rj,"isEmpty");async function Aj(e){let t=new ij(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Sj(t)}a(Aj,"getNodeRecord");async function Oj(e){let t=new oj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return rj.upsert(t)}a(Oj,"upsertNodeRecord");function yD(e){if(zS.isEmpty(e.subscribe)||zS.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(yD,"reverseSubscription");function bj(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=zS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=yD(c),E=mj()[u]?.[_],h=new cj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new aj(r,t,s,n)}a(bj,"buildNodePayloads");function Nj(){if(!bD.get(io.CONFIG_PARAMS.CLUSTERING_ENABLED))throw uj(new Error,dj.CLUSTERING_NOT_ENABLED,_j.BAD_REQUEST,void 0,void 0,!0)}a(Nj,"checkClusteringEnabled");async function yj(){let e=new fj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Tj(e))}a(yj,"getAllNodeRecords");async function Ij(){let e=await Ej.getSystemInformation();return{hdb_version:hj.version(),node_version:e.node_version,platform:e.platform}}a(Ij,"getSystemInfo")});var JS=T((_de,vD)=>{"use strict";var Ad=St(),wD=J(),CD=nt(),LD=M(),Od=V(),DD=ld(),wj=hp(),{RemotePayloadObject:Cj}=mu(),{handleHDBError:MD,hdb_errors:Lj}=Z(),{HTTP_STATUS_CODES:UD}=Lj,{NodeSubscription:PD}=ua();vD.exports=Dj;async function Dj(e,t){let r;try{r=await Ad.request(`${t}.${CD.REQUEST_SUFFIX}`,new Cj(LD.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Od.trace("Response from remote describe all request:",r)}catch(o){Od.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ad.requestErrorHandler(o,"add_node",t);throw MD(new Error,c,UD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===CD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw MD(new Error,o,UD.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===LD.SYSTEM_SCHEMA_NAME){await Ad.createLocalTableStream(u,c);let h=new PD(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=wD.doesSchemaExist(u),l=n[u]!==void 0,d=c?wD.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Od.trace(`addNode creating schema: ${u}`),await DD.createSchema({operation:"create_schema",schema:u})),!d&&f){Od.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new wj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await DD.createTable(h)}await Ad.createLocalTableStream(u,c);let E=new PD(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Dj,"reviewSubscriptions")});var yd=T((fde,xD)=>{"use strict";var{handleHDBError:bd,hdb_errors:Mj}=Z(),{HTTP_STATUS_CODES:Nd}=Mj,{addUpdateNodeValidator:Uj}=hd(),pu=V(),HD=M(),BD=nt(),Pj=J(),XS=St(),Su=Is(),vj=j(),Bj=JS(),{Node:Hj,NodeSubscription:xj}=ua(),{broadcast:qj}=tt(),Fj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Gj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kj=vj.get(HD.CONFIG_PARAMS.CLUSTERING_NODENAME);xD.exports=Vj;async function Vj(e,t=!1){pu.trace("addNode called with:",e),Su.checkClusteringEnabled();let r=Uj(e);if(r)throw bd(r,r.message,Nd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Su.getNodeRecord(n);if(!Pj.isEmptyOrZeroLength(d))throw bd(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Nd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Bj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Fj,o;let c=Su.buildNodePayloads(s,kj,HD.OPERATIONS_ENUM.ADD_NODE,await Su.getSystemInfo());pu.trace("addNode sending remote payload:",c);let u;try{u=await XS.request(`${n}.${BD.REQUEST_SUFFIX}`,c)}catch(d){pu.error(`addNode received error from request: ${d}`);let f=XS.requestErrorHandler(d,"add_node",n);throw bd(new Error,f,Nd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===BD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw bd(new Error,d,Nd.INTERNAL_SERVER_ERROR,"error",d)}pu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];pu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await XS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new xj(E.schema,E.table,E.publish,E.subscribe))}let l=new Hj(n,_,u.system_info);return await Su.upsertNodeRecord(l),qj({type:"nats_update"}),i.length>0?o.message=Gj:o.message=`Successfully added '${n}' to manifest`,o}a(Vj,"addNode")});var tT=T((mde,GD)=>{"use strict";var{handleHDBError:jS,hdb_errors:$j}=Z(),{HTTP_STATUS_CODES:ZS}=$j,{addUpdateNodeValidator:Yj}=hd(),Tu=V(),FD=M(),qD=nt(),hde=J(),eT=St(),gu=Is(),Kj=j(),{cloneDeep:Wj}=require("lodash"),Qj=JS(),{Node:zj,NodeSubscription:Jj}=ua(),{broadcast:Xj}=tt(),jj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",eZ=Kj.get(FD.CONFIG_PARAMS.CLUSTERING_NODENAME);GD.exports=tZ;async function tZ(e){Tu.trace("updateNode called with:",e),gu.checkClusteringEnabled();let t=Yj(e);if(t)throw jS(t,t.message,ZS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await gu.getNodeRecord(r);s.length>0&&(n=Wj(s));let{added:i,skipped:o}=await Qj(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=jj,c;let u=gu.buildNodePayloads(i,eZ,FD.OPERATIONS_ENUM.UPDATE_NODE,await gu.getSystemInfo());Tu.trace("updateNode sending remote payload:",u);let _;try{_=await eT.request(`${r}.${qD.REQUEST_SUFFIX}`,u)}catch(l){Tu.error(`updateNode received error from request: ${l}`);let d=eT.requestErrorHandler(l,"update_node",r);throw jS(new Error,d,ZS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===qD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw jS(new Error,l,ZS.INTERNAL_SERVER_ERROR,"error",l)}Tu.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Tu.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await eT.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new zj(r,[],_.system_info)]),await rZ(n[0],i,_.system_info),o.length>0?c.message=Zj:c.message=`Successfully updated '${r}'`,c}a(tZ,"updateNode");async function rZ(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Jj(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await gu.upsertNodeRecord(n),Xj({type:"nats_update"})}a(rZ,"updateNodeTable")});var KD=T((Sde,YD)=>{"use strict";var $D=require("joi"),{string:kD}=$D.types(),nZ=et(),VD=M(),sZ=j(),iZ=nt();YD.exports=oZ;function oZ(e){let t=kD.invalid(sZ.get(VD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(iZ.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=$D.object({operation:kD.valid(VD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return nZ.validateBySchema(e,r)}a(oZ,"removeNodeValidator")});var wd=T((gde,jD)=>{"use strict";var{handleHDBError:WD,hdb_errors:aZ}=Z(),{HTTP_STATUS_CODES:QD}=aZ,cZ=KD(),Ru=V(),zD=Is(),uZ=J(),Id=M(),JD=nt(),XD=St(),lZ=j(),{RemotePayloadObject:_Z}=mu(),{NodeSubscription:dZ}=ua(),fZ=Yc(),EZ=Vi(),{broadcast:hZ}=tt(),mZ=lZ.get(Id.CONFIG_PARAMS.CLUSTERING_NODENAME);jD.exports=pZ;async function pZ(e){Ru.trace("removeNode called with:",e),zD.checkClusteringEnabled();let t=cZ(e);if(t)throw WD(t,t.message,QD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await zD.getNodeRecord(r);if(uZ.isEmptyOrZeroLength(n))throw WD(new Error,`Node '${r}' was not found.`,QD.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new _Z(Id.OPERATIONS_ENUM.REMOVE_NODE,mZ,[]),i,o=!1;try{i=await XD.request(`${r}.${JD.REQUEST_SUFFIX}`,s),Ru.trace("Remove node reply from remote node:",r,i)}catch(u){Ru.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];Ru.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new dZ(l.schema,l.table,!1,!1);await XD.updateWorkStream(d,r)}let c=new fZ(Id.SYSTEM_SCHEMA_NAME,Id.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await EZ.deleteRecord(c),hZ({type:"nats_update"}),i?.status===JD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ru.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(pZ,"removeNode")});var tM=T((Ade,eM)=>{"use strict";var ZD=require("joi"),{string:SZ,array:TZ}=ZD.types(),gZ=et(),RZ=hd();eM.exports=AZ;function AZ(e){let t=ZD.object({operation:SZ.valid("configure_cluster").required(),connections:TZ.items(RZ.validation_schema).required()});return gZ.validateBySchema(e,t)}a(AZ,"configureClusterValidator")});var rT=T((bde,oM)=>{"use strict";var OZ=M(),Cd=V(),bZ=J(),NZ=wd(),yZ=yd(),rM=Is(),IZ=tM(),{handleHDBError:nM,hdb_errors:wZ}=Z(),{HTTP_STATUS_CODES:sM}=wZ,CZ="Configure cluster complete.",LZ="Failed to configure the cluster. Check the logs for more details.",DZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oM.exports=MZ;async function MZ(e){Cd.trace("configure cluster called with:",e),rM.checkClusteringEnabled();let t=IZ(e);if(t)throw nM(t,t.message,sM.BAD_REQUEST,void 0,void 0,!0);let r=await rM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(iM(NZ,{operation:OZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Cd.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(iM(yZ,E,E.node_name))}let c=await Promise.allSettled(i);Cd.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Cd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(bZ.isEmptyOrZeroLength(u))return{message:CZ,connections:_};if(l)return{message:DZ,failed_nodes:u,connections:_};throw nM(new Error,LZ,sM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(MZ,"configureCluster");async function iM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(iM,"functionWrapper")});var cM=T((yde,aM)=>{"use strict";var Ld=require("joi"),UZ=et(),{validateSchemaExists:PZ,validateTableExists:vZ,validateSchemaName:BZ}=Kn(),HZ=Ld.object({operation:Ld.string().valid("purge_stream"),schema:Ld.string().custom(PZ).custom(BZ).required(),table:Ld.string().custom(vZ).required()});function xZ(e){return UZ.validateBySchema(e,HZ)}a(xZ,"purgeStreamValidator");aM.exports=xZ});var nT=T((wde,uM)=>{"use strict";var{handleHDBError:qZ,hdb_errors:FZ}=Z(),{HTTP_STATUS_CODES:GZ}=FZ,kZ=cM(),VZ=St(),$Z=Is();uM.exports=YZ;async function YZ(e){if(e.purge_ingest!==!0){let s=kZ(e);if(s)throw qZ(s,s.message,GZ.BAD_REQUEST,void 0,void 0,!0)}$Z.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await VZ.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(YZ,"purgeStream")});var oT=T((Lde,hM)=>{"use strict";var iT=Is(),KZ=St(),dM=j(),Dd=M(),oo=nt(),WZ=J(),sT=V(),{RemotePayloadObject:QZ}=mu(),{ErrorCode:lM}=require("nats"),_M=dM.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED),fM=dM.get(Dd.CONFIG_PARAMS.CLUSTERING_NODENAME);hM.exports={clusterStatus:zZ,buildNodeStatus:EM};async function zZ(){let e={node_name:fM,is_enabled:_M,connections:[]};if(!_M)return e;let t=await iT.getAllNodeRecords();if(WZ.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(EM(t[n],e.connections));return await Promise.allSettled(r),e}a(zZ,"clusterStatus");async function EM(e,t){let r=e.name,n=new QZ(Dd.OPERATIONS_ENUM.CLUSTER_STATUS,fM,void 0,await iT.getSystemInfo()),s,i,o=oo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await KZ.request(oo.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===oo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=oo.CLUSTER_STATUS_STATUSES.CLOSED,sT.error(`Error getting node status from ${r} `,s))}catch(u){sT.warn(`Error getting node status from ${r}`,u),u.code===lM.NoResponders?o=oo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===lM.Timeout?o=oo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=oo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new JZ(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Dd.PRE_4_0_0_VERSION&&await iT.upsertNodeRecord(u)}catch(u){sT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(EM,"buildNodeStatus");function JZ(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(JZ,"NodeStatusObject")});var cT=T((Mde,mM)=>{"use strict";var{handleHDBError:XZ,hdb_errors:jZ}=Z(),{HTTP_STATUS_CODES:ZZ}=jZ,e5=St(),t5=Is(),aT=J(),Md=require("joi"),r5=et(),n5=2e3,s5=Md.object({timeout:Md.number().min(1),connected_nodes:Md.boolean(),routes:Md.boolean()});mM.exports=i5;async function i5(e){t5.checkClusteringEnabled();let t=r5.validateBySchema(e,s5);if(t)throw XZ(t,t.message,ZZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||aT.autoCastBoolean(n),o=s===void 0||aT.autoCastBoolean(s),c={nodes:[]},u=await e5.getServerList(r??n5),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:aT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(i5,"clusterNetwork")});var gM=T((Pde,TM)=>{"use strict";var uT=require("joi"),pM=et(),{route_constraints:SM}=fh();TM.exports={setRoutesValidator:o5,deleteRoutesValidator:a5};function o5(e){let t=uT.object({server:uT.valid("hub","leaf").required(),routes:SM.required()});return pM.validateBySchema(e,t)}a(o5,"setRoutesValidator");function a5(e){let t=uT.object({routes:SM.required()});return pM.validateBySchema(e,t)}a(a5,"deleteRoutesValidator")});var _T=T((Bde,bM)=>{"use strict";var ao=Lr(),lT=J(),Ud=M(),RM=gM(),{handleHDBError:AM,hdb_errors:c5}=Z(),{HTTP_STATUS_CODES:OM}=c5,u5="cluster routes successfully set",l5="cluster routes successfully deleted";bM.exports={setRoutes:_5,getRoutes:d5,deleteRoutes:f5};function _5(e){let t=RM.setRoutesValidator(e);if(t)throw AM(t,t.message,OM.BAD_REQUEST,void 0,void 0,!0);let r=ao.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,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=lT.autoCast(_.port);let l=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:u5,set:o,skipped:i}}a(_5,"setRoutes");function d5(){let e=ao.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(d5,"getRoutes");function f5(e){let t=RM.deleteRoutesValidator(e);if(t)throw AM(t,t.message,OM.BAD_REQUEST,void 0,void 0,!0);let r=ao.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=lT.isEmptyOrZeroLength(n)?null:n,ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=lT.isEmptyOrZeroLength(s)?null:s,ao.updateConfigValue(Ud.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:l5,deleted:i,skipped:o}}a(f5,"deleteRoutes")});var yM=T((xde,NM)=>{"use strict";var Au=require("alasql"),co=require("recursive-iterator"),vn=V(),E5=J(),Ou=M(),dT=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,m5(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=>Ou.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=>!Ou.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][Ou.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=h5(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Ou.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Au.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function h5(e){return e.filter(t=>t[Ou.PERMS_CRUD_ENUM.READ])}a(h5,"filterReadRestrictedAttrs");function m5(e,t,r,n,s){p5(e,t,r,n,s)}a(m5,"interpretAST");function bu(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(bu,"addSchemaTableToMap");function p5(e,t,r,n,s){if(!e){vn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Au.yy.Insert?R5(e,t,r):e instanceof Au.yy.Select?S5(e,t,r,n,s):e instanceof Au.yy.Update?T5(e,t,r):e instanceof Au.yy.Delete?g5(e,t,r):vn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(p5,"getRecordAttributesAST");function S5(e,t,r,n,s){if(!e){vn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(E5.isEmptyOrZeroLength(i)){vn.error("No schema specified");return}e.from.forEach(c=>{bu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bu(c.table,t,r,n,s)});let o=new co(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{vn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new co(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{vn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new co(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{vn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new co(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{vn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(S5,"getSelectAttributes");function T5(e,t,r){if(!e){vn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fT(e.table.tableid,s,i.columnid,t,r)}a(T5,"getUpdateAttributes");function g5(e,t,r){if(!e){vn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new co(e.where),s=e.table.databaseid;bu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fT(e.table.tableid,s,i.columnid,t,r)}a(g5,"getDeleteAttributes");function R5(e,t,r){if(!e){vn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.into.databaseid;bu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fT(e.into.tableid,s,i.columnid,t,r)}a(R5,"getInsertAttributes");function fT(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(fT,"pushAttribute");NM.exports=dT});var mT=T((Fde,LM)=>{var Pd=$i(),IM=require("chalk"),Gr=V(),wM=require("prompt"),{promisify:A5}=require("util"),ET=M(),O5=require("fs-extra"),b5=require("path"),N5=J(),y5=QS(),CM=j();CM.initSync();var I5=require("moment"),w5=A5(wM.get),C5=b5.join(CM.getHdbBasePath(),ET.LICENSE_KEY_DIR_NAME,ET.LICENSE_FILE_NAME,ET.LICENSE_FILE_NAME);LM.exports={getFingerprint:D5,setLicense:L5,parseLicense:hT,register:M5,getRegistrationInfo:P5};async function L5(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gr.error(r),Gr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(L5,"setLicense");async function D5(){let e={};try{e=await Pd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(D5,"getFingerprint");async function hT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Pd.validateLicense(e,t);if(Gr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Gr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Gr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gr.info("writing license to disk"),await O5.writeFile(C5,JSON.stringify({license_key:e,company:t}))}catch(n){throw Gr.error("Failed to write License"),n}return"Registration successful."}a(hT,"parseLicense");async function M5(){let e=await U5();return hT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(M5,"register");async function U5(){let e=await Pd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:IM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:IM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{wM.start()}catch(n){Gr.error(n)}let r;try{r=await w5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(U5,"promptForRegistration");async function P5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Pd.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(N5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=y5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=I5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(P5,"getRegistrationInfo")});var MM=T((kde,DM)=>{"use strict";var v5=nt(),pT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+v5.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};DM.exports=pT});var vM=T(($de,PM)=>{"use strict";var UM=nt(),ST=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+UM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+UM.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};PM.exports=ST});var HM=T((Kde,BM)=>{"use strict";var TT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BM.exports=TT});var qM=T((Qde,xM)=>{"use strict";var B5=nt(),gT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+B5.SERVER_SUFFIX.ADMIN,this.password=r}};xM.exports=gT});var OT=T((Jde,kM)=>{"use strict";var _a=require("path"),Hd=require("fs-extra"),H5=MM(),x5=vM(),q5=HM(),F5=qM(),RT=vr(),fa=J(),hr=Lr(),Bd=M(),Nu=nt(),{CONFIG_PARAMS:Et}=Bd,yu=V(),Iu=j(),FM=gs(),AT=St(),da="clustering",G5=1e4,GM=5;kM.exports={generateNatsConfig:V5,removeNatsConfig:$5,getHubConfigPath:k5};function k5(){let e=Iu.get(Et.ROOTPATH);return _a.join(e,da,Nu.NATS_CONFIG_FILES.HUB_SERVER)}a(k5,"getHubConfigPath");async function V5(e=!1,t=void 0){Iu.initSync();let r=Iu.get(Et.ROOTPATH),n=_a.join(r,da,Nu.PID_FILES.HUB),s=_a.join(r,da,Nu.PID_FILES.LEAF),i=hr.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=_a.join(r,da,Nu.NATS_CONFIG_FILES.HUB_SERVER),c=_a.join(r,da,Nu.NATS_CONFIG_FILES.LEAF_SERVER),u=hr.getConfigFromFile(Et.CLUSTERING_TLS_CERTIFICATE),_=hr.getConfigFromFile(Et.CLUSTERING_TLS_PRIVATEKEY),l=hr.getConfigFromFile(Et.CLUSTERING_TLS_CERT_AUTH),d=hr.getConfigFromFile(Et.CLUSTERING_TLS_INSECURE),f=hr.getConfigFromFile(Et.CLUSTERING_TLS_VERIFY),E=hr.getConfigFromFile(Et.CLUSTERING_NODENAME),h=hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await AT.checkNATSServerInstalled()||xd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await RT.listUsers(),S=hr.getConfigFromFile(Et.CLUSTERING_USER),A=await RT.getClusterUser();(fa.isEmpty(A)||A.active!==!0)&&xd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await vd(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await vd(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await vd(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),await vd(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],w=[];for(let[z,re]of p.entries())re.role.role===Bd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(I.push(new F5(re.username,FM.decrypt(re.hash))),w.push(new q5(re.username,FM.decrypt(re.hash))));let B=[],{hub_routes:K}=hr.getClusteringRoutes();if(!fa.isEmptyOrZeroLength(K))for(let z of K)B.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let q=new H5(hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NAME),hr.getConfigFromFile(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),B,I,w);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=fa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Bd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hd.writeJson(o,q),yu.trace(`Hub server config written to ${o}`));let P=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=new x5(hr.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[Q],I,w,u,_,l,d);l==null&&delete Y.tls.ca_file,(t===void 0||t===Bd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hd.writeJson(c,Y),yu.trace(`Leaf server config written to ${c}`))}a(V5,"generateNatsConfig");async function vd(e){let t=Iu.get(e);return fa.isEmpty(t)&&xd(`port undefined for '${e}'`),await fa.isPortTaken(t)&&xd(`'${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(vd,"isPortAvailable");function xd(e){let t=`Error generating clustering config: ${e}`;yu.error(t),console.error(t),process.exit(1)}a(xd,"generateNatsConfigError");async function $5(e){let{port:t,config_file:r}=AT.getServerConfig(e),{username:n,decrypt_hash:s}=await RT.getClusterUser(),i=0,o=2e3;for(;i<GM;){try{let _=await AT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){yu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=GM)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 fa.async_set_timeout(o*(i*2))}let c="0".repeat(G5),u=_a.join(Iu.get(Et.ROOTPATH),da,r);await Hd.writeFile(u,c),await Hd.remove(u),yu.notify(e,"started.")}a($5,"removeNatsConfig")});var QM=T((jde,WM)=>{"use strict";var kr=j(),Y5=$i(),he=M(),wu=nt(),ws=require("path"),{PACKAGE_ROOT:Fd}=M(),VM=j(),qd=J(),Ea="/dev/null",K5=ws.join(Fd,"launchServiceScripts"),$M=ws.join(Fd,"utility/scripts"),W5=ws.join($M,he.HDB_RESTART_SCRIPT),YM=ws.resolve(Fd,"dependencies",`${process.platform}-${process.arch}`,wu.NATS_BINARY_NAME);function KM(){let t=Y5.licenseSearch().ram_allocation||he.RAM_ALLOCATION_ENUM.DEFAULT,r=he.MEM_SETTING_KEY+t,n={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qd.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Fd}}a(KM,"generateMainServerConfig");var Q5=9930;function z5(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",wu.NATS_CONFIG_FILES.HUB_SERVER),r=ws.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=VM.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Q5?"-"+n:""),script:YM,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(z5,"generateNatsHubServerConfig");var J5=9940;function X5(){kr.initSync(!0);let e=kr.get(he.CONFIG_PARAMS.ROOTPATH),t=ws.join(e,"clustering",wu.NATS_CONFIG_FILES.LEAF_SERVER),r=ws.join(kr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=VM.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=wu.LOG_LEVEL_FLAGS[kr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==J5?"-"+n:""),script:YM,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ea,i.error_file=Ea),i}a(X5,"generateNatsLeafServerConfig");function j5(){kr.initSync();let e=ws.join(kr.get(he.CONFIG_PARAMS.LOGGING_ROOT),he.LOG_NAMES.HDB),t={name:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:he.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:K5,autorestart:!1};return kr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ea,t.error_file=Ea),t}a(j5,"generateClusteringUpgradeV4ServiceConfig");function Z5(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return qd.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qd.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:$M},script:W5}}a(Z5,"generateRestart");function e8(){return{apps:[KM()]}}a(e8,"generateAllServiceConfigs");WM.exports={generateAllServiceConfigs:e8,generateMainServerConfig:KM,generateRestart:Z5,generateNatsHubServerConfig:z5,generateNatsLeafServerConfig:X5,generateClusteringUpgradeV4ServiceConfig:j5}});var cU=T((tfe,aU)=>{"use strict";var Le=M(),t8=J(),Cs=OT(),Cu=St(),es=nt(),li=QM(),Gd=j(),_i=V(),r8=Is(),{startWorker:zM,onMessageFromWorkers:n8}=tt(),s8=la(),efe=require("util"),i8=require("child_process"),o8=require("fs"),{execFile:a8}=i8,be;aU.exports={enterPM2Mode:c8,start:di,stop:bT,reload:XM,restart:jM,list:NT,describe:eU,connect:Ls,kill:f8,startAllServices:E8,startService:yT,getUniqueServicesList:tU,restartAllServices:h8,isServiceRegistered:rU,reloadStopStart:nU,restartHdb:ZM,deleteProcess:_8,startClusteringProcesses:iU,startClusteringThreads:oU,isHdbRestartRunning:d8,isClusteringRunning:p8,stopClustering:m8,reloadClustering:S8};var Lu=!1;n8(e=>{e.type==="restart"&&Gd.initSync(!0)});function c8(){Lu=!0}a(c8,"enterPM2Mode");function Ls(){return be||(be=require("pm2")),new Promise((e,t)=>{be.connect((r,n)=>{_i.setupConsoleLogging(),r&&t(r),e(n)})})}a(Ls,"connect");var mr,u8=10,JM;function di(e,t=!1){if(Lu)return l8(e);let r=a8(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=mr.indexOf(r);o>-1&&mr.splice(o,1),!JM&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<u8&&(o8.existsSync(Cs.getHubConfigPath())?di(e):(await Cs.generateNatsConfig(!0),di(e),await new Promise(c=>setTimeout(c,3e3)),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Gd.get(Le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?_i.OUTPUTS.STDERR:_i.OUTPUTS.STDOUT;_i.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=es.LOG_LEVELS[f]}if(es.LOG_LEVEL_HIERARCHY[o]>=es.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===es.LOG_LEVELS.ERR||l===es.LOG_LEVELS.WRN?_i.OUTPUTS.STDERR:_i.OUTPUTS.STDOUT;_i.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),mr=[],!mr&&!t){let i=a(()=>{JM=!0,mr&&(mr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}mr.push(r)}a(di,"start");function l8(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.start(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(l8,"startWithPM2");function bT(e){if(!Lu){for(let t of mr||[])t.name===e&&(mr.splice(mr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.stop(e,async(n,s)=>{n&&(be.disconnect(),r(n)),be.delete(e,(i,o)=>{i&&(be.disconnect(),r(n)),be.disconnect(),t(o)})})})}a(bT,"stop");function XM(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.reload(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(XM,"reload");function jM(e){if(!Lu)for(let t of mr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.restart(e,(n,s)=>{be.disconnect(),t(s)})})}a(jM,"restart");function _8(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.delete(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(_8,"deleteProcess");async function ZM(){await di(li.generateRestart())}a(ZM,"restartHdb");async function d8(){let e=await NT();for(let t in e)if(e[t].name===Le.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(d8,"isHdbRestartRunning");function NT(){return new Promise(async(e,t)=>{try{await Ls()}catch(r){t(r)}be.list((r,n)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(n)})})}a(NT,"list");function eU(e){return new Promise(async(t,r)=>{try{await Ls()}catch(n){r(n)}be.describe(e,(n,s)=>{n&&(be.disconnect(),r(n)),be.disconnect(),t(s)})})}a(eU,"describe");function f8(){if(!Lu){for(let e of mr||[])e.kill();mr=[];return}return new Promise(async(e,t)=>{try{await Ls()}catch(r){t(r)}be.killDaemon((r,n)=>{r&&(be.disconnect(),t(r)),be.disconnect(),e(n)})})}a(f8,"kill");async function E8(){try{await iU(),await oU(),await di(li.generateAllServiceConfigs())}catch(e){throw be?.disconnect(),e}}a(E8,"startAllServices");async function yT(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Le.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=li.generateMainServerConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=li.generateNatsIngestServiceConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=li.generateNatsReplyServiceConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=li.generateNatsHubServerConfig(),await di(r,t),await Cs.removeNatsConfig(e);return;case Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=li.generateNatsLeafServerConfig(),await di(r,t),await Cs.removeNatsConfig(e);return;case Le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=li.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await di(r)}catch(r){throw be?.disconnect(),r}}a(yT,"startService");async function tU(){try{let e=await NT(),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 be?.disconnect(),e}}a(tU,"getUniqueServicesList");async function h8(e=[]){try{let t=!1,r=await tU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Le.PROCESS_DESCRIPTORS.HDB?t=!0:await jM(o))}t&&await nU(Le.PROCESS_DESCRIPTORS.HDB)}catch(t){throw be?.disconnect(),t}}a(h8,"restartAllServices");async function rU(e){if(mr?.find(r=>r.name===e))return!0;let t=await s8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(rU,"isServiceRegistered");async function nU(e){let t=e===Le.PROCESS_DESCRIPTORS.HDB?Gd.get(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Gd.get(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await eU(e),n=t8.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await bT(e),await yT(e)):e===Le.PROCESS_DESCRIPTORS.HDB?await ZM():await XM(e)}a(nU,"reloadStopStart");var sU;async function iU(e=!1){for(let t in Le.CLUSTERING_PROCESSES){let r=Le.CLUSTERING_PROCESSES[t];await yT(r,e)}}a(iU,"startClusteringProcesses");async function oU(){sU=zM(Le.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Le.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Cu.createWorkQueueStream(es.WORK_QUEUE_CONSUMER_NAMES),await Cu.updateIngestStreamConsumer(),await Cu.updateLocalStreams();let e=await r8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Le.PRE_4_0_0_VERSION){_i.info("Starting clustering upgrade 4.0.0 process"),zM(Le.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(oU,"startClusteringThreads");async function m8(){for(let e in Le.CLUSTERING_PROCESSES)if(e!==Le.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Le.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await sU.terminate();else{let t=Le.CLUSTERING_PROCESSES[e];await bT(t)}}a(m8,"stopClustering");async function p8(){for(let e in Le.CLUSTERING_PROCESSES){let t=Le.CLUSTERING_PROCESSES[e];if(await rU(t)===!1)return!1}return!0}a(p8,"isClusteringRunning");async function S8(){await Cs.generateNatsConfig(!0),await Cu.reloadNATSHub(),await Cu.reloadNATSLeaf(),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Cs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(S8,"reloadClustering")});var Yd=T((nfe,hU)=>{"use strict";var T8=require("minimist"),{isMainThread:CT,parentPort:_U}=require("worker_threads"),st=M(),{PROCESS_DESCRIPTORS_VALIDATE:Du}=st,ts=V(),LT=J(),kd=OT(),ha=St(),IT=nt(),dU=Lr(),rs=cU(),uU=la(),g8=rh(),{restartWorkers:Vd,onMessageByType:R8}=tt(),{handleHDBError:A8,hdb_errors:O8}=Z(),{HTTP_STATUS_CODES:b8}=O8,$d=j();$d.initSync();var Mu=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,N8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lU="Clustering is not enabled so cannot be restarted",y8="Invalid service",ma,an;hU.exports={restart:fU,restartService:DT};CT&&R8(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?DT({service:e.workerType}):fU({operation:"restart"})});async function fU(e){an=Object.keys(e).length===0,ma=await rs.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=T8(process.argv);if(t.service){await DT(t);return}if(an&&!ma){console.error(N8);return}if(an&&console.log(Mu),ma){rs.enterPM2Mode(),ts.notify(Mu);let r=g8(Object.keys(st.CONFIG_PARAM_MAP),!0);return LT.isEmptyOrZeroLength(Object.keys(r))||dU.updateConfigValue(void 0,void 0,r,!0,!0),w8(),Mu}return CT?(ts.notify(Mu),setTimeout(()=>{Vd()},50)):_U.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),Mu}a(fU,"restart");async function DT(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw A8(new Error,y8,b8.BAD_REQUEST,void 0,void 0,!0);if(ma=await rs.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!CT)return _U.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Du.clustering:if(!$d.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}an&&console.log("Restarting clustering"),ts.notify("Restarting clustering"),await EU();break;case Du.clustering_config:case Du["clustering config"]:if(!$d.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}an&&console.log("Restarting clustering_config"),ts.notify("Restarting clustering_config"),await rs.reloadClustering();break;case"custom_functions":case"custom functions":case Du.harperdb:case Du.http_workers:if(an&&!ma){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}an&&console.log("Restarting http_workers"),ts.notify("Restarting http_workers"),an?await rs.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Vd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ts.error(r),an&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(DT,"restartService");async function I8(){await ha.publishToStream(`${IT.SUBJECT_PREFIXES.TXN}.${IT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,IT.WORK_QUEUE_CONSUMER_NAMES.stream_name,ha.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(I8,"postDummyNatsMsg");async function w8(){await EU(),await rs.restart(st.HDB_PROC_DESCRIPTOR),await LT.async_set_timeout(2e3),$d.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await wT(),an&&(await ha.closeConnection(),process.exit(0))}a(w8,"restartPM2Mode");async function EU(){if(!dU.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await uU.getHDBProcessInfo()).clustering.length===0)ts.trace("Clustering not running, restart will start clustering services"),await kd.generateNatsConfig(!0),await rs.startClusteringProcesses(),await rs.startClusteringThreads(),await wT(),an&&await ha.closeConnection();else{await I8(),await kd.generateNatsConfig(!0),ma?(ts.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await rs.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await rs.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await uU.getHDBProcessInfo()).clustering.forEach(s=>{ts.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await LT.async_set_timeout(3e3),await wT(),await ha.updateLocalStreams(),an&&await ha.closeConnection(),ts.trace("Restart clustering restarting ingest and reply service threads");let t=Vd(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Vd(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(EU,"restartClustering");async function wT(){await kd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await kd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(wT,"removeNatsConfig")});var yU=T((ofe,NU)=>{"use strict";var ife=require("lodash"),pr=M(),{handleHDBError:mU,hdb_errors:C8}=Z(),{HDB_ERROR_MSGS:L8,HTTP_STATUS_CODES:D8}=C8,MT=V();NU.exports={getRolePermissions:U8};var uo=Object.create(null),M8=a(e=>({key:e,perms:{}}),"perms_template_obj"),gU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),RU=a((e=!1,t=!1,r=!1,n=!1)=>({[pr.PERMS_CRUD_ENUM.READ]:e,[pr.PERMS_CRUD_ENUM.INSERT]:t,[pr.PERMS_CRUD_ENUM.UPDATE]:r,[pr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),UT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...RU(t,r,n,s)}),"table_perms_template"),pU=a((e,t=RU())=>({attribute_name:e,describe:bU(t),[Uu]:t[Uu],[PT]:t[PT],[vT]:t[vT]}),"attr_perms_template"),SU=a((e,t=!1)=>({attribute_name:e,describe:t,[Uu]:t}),"timestamp_attr_perms_template"),{READ:Uu,INSERT:PT,UPDATE:vT}=pr.PERMS_CRUD_ENUM,AU=Object.values(pr.PERMS_CRUD_ENUM),OU=[Uu,PT,vT];function U8(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[pr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(uo[t]&&uo[t].key===n)return uo[t].perms;let s=P8(e,r);return uo[t]?uo[t].key=n:uo[t]=M8(n),uo[t].perms=s,s}catch(r){if(!e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[pr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<pr.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 MT.error(n),MT.debug(r),mU(new Error,L8.OUTDATED_PERMS_TRANSLATION_ERROR,D8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
11
+ ${r.stack}`;throw MT.error(n),mU(new Error)}}}a(U8,"getRolePermissions");function P8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[pr.SYSTEM_SCHEMA_NAME]=n[pr.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]=v8(t[i]);return}r[i]=gU(),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],u=t[i][o],_=B8(c,u);r[i].describe||AU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=UT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=UT()})}),r}a(P8,"translateRolePermissions");function v8(e){let t=gU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=UT(!0,!0,!0,!0,!0)}),t}a(v8,"createStructureUserPermissions");function B8(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return pr.TIME_STAMP_NAMES.includes(d)&&(f=SU(d,l[Uu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=pU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=bU(l),s.attribute_permissions.push(l),c||H8(l,u)}else if(_!==o){let l;pr.TIME_STAMP_NAMES.includes(_)?l=SU(_):l=pU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=TU(s),s}else return e.describe=TU(e),e}a(B8,"getTableAttrPerms");function TU(e){return AU.filter(t=>e[t]).length>0}a(TU,"getSchemaTableDescribePerm");function bU(e){return OU.filter(t=>e[t]).length>0}a(bU,"getAttributeDescribePerm");function H8(e,t){OU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(H8,"checkForHashPerms")});var IU={};Ve(IU,{Resources:()=>Kd,keyArrayToString:()=>pa,resetResources:()=>x8,resources:()=>fi});function x8(){return fi=new Kd}function pa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Kd,fi,Pu=Ae(()=>{Ji();Kd=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,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}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 Qe(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(x8,"resetResources");a(pa,"keyArrayToString")});var wU={};Ve(wU,{Headers:()=>Ei});var Ei,Wd=Ae(()=>{Ei=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];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var vu={};Ve(vu,{authentication:()=>BU,bypassAuth:()=>Y8,login:()=>W8,logout:()=>Q8,start:()=>K8});function Y8(){vU=!0}async function BU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?k8?G8:[]:F8?q8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ei([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Qd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Qd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Qd){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);u=s.slice(S+1,p===-1?s.length:p),_=await LU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Jd.AuthAuditLog(E,h,kt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===kt.AUTH_AUDIT_STATUS.SUCCESS?CU.notify(S):CU.error(S)},"authAuditLog"),d;if(n){if(d=lo.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,zd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,zd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return $8&&(lo.get(h)||(lo.set(h,h),l(p,kt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:hi({error:A.message},e)})}lo.set(n,d),V8&&l(d.username,kt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,e):(vU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,MU.getSuperUser)());Qd&&(e.session.update=function(E){if(!u){u=(0,UU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.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=u,LU.put(E)},e.login=async function(E,h){e.user=await lt.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")&&fi.loginPath?(f.status=302,f.headers.set("Location",fi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ei);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function K8({server:e,port:t}){e.request(BU,{port:t||"all"}),DU||(DU=!0,setInterval(()=>{lo=new Map},cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),PU.user.addListener(()=>{lo=new Map}))}async function W8(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 Q8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var MU,zd,UU,cn,kt,Jd,PU,CU,q8,F8,G8,k8,LU,Qd,vU,V8,$8,lo,DU,Xd=Ae(()=>{MU=v(vr());nr();Pu();zd=v(hu());ge();UU=require("uuid"),cn=v(j()),kt=v(M()),Jd=v(V()),PU=v(Bc());Wd();Sa();CU=(0,Jd.loggerWithTag)("auth-event");cn.initSync();q8=cn.get(kt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),F8=cn.get(kt.CONFIG_PARAMS.HTTP_CORS),G8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),k8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),LU=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Qd=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,vU=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,V8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,$8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,lo=new Map;lt.onInvalidatedUser(()=>{lo=new Map});a(Y8,"bypassAuth");a(BU,"authentication");a(K8,"start");a(W8,"login");a(Q8,"logout")});var VU=T((pfe,kU)=>{"use strict";var Ne=require("joi"),HU=require("fs-extra"),xU=require("path"),Ms=et(),qU=j(),FU=M(),GU=V(),{hdb_errors:z8}=Z(),{HDB_ERROR_MSGS:jt}=z8,Ds=/^[a-zA-Z0-9-_]+$/;kU.exports={getDropCustomFunctionValidator:X8,setCustomFunctionValidator:j8,addComponentValidator:r6,dropCustomFunctionProjectValidator:n6,packageComponentValidator:s6,deployComponentValidator:i6,setComponentFileValidator:Z8,getComponentFileValidator:t6,dropComponentFileValidator:e6};function jd(e,t,r){try{let n=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),s=xU.join(n,t);return HU.existsSync(s)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(n){return GU.error(n),r.message(jt.VALIDATION_ERR)}}a(jd,"checkProjectExists");function Bu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Bu,"checkFilePath");function J8(e,t,r,n){try{let s=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),i=xU.join(s,e,t,r+".js");return HU.existsSync(i)?r:n.message(jt.NO_FILE)}catch(s){return GU.error(s),n.message(jt.VALIDATION_ERR)}}a(J8,"checkFileExists");function X8(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(Ds).custom(J8.bind(null,e.project,e.type)).custom(Bu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return Ms.validateBySchema(e,t)}a(X8,"getDropCustomFunctionValidator");function j8(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Bu).required(),function_content:Ne.string().required()});return Ms.validateBySchema(e,t)}a(j8,"setCustomFunctionValidator");function Z8(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ms.validateBySchema(e,t)}a(Z8,"setComponentFileValidator");function e6(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:Ne.string().custom(Bu).optional()});return Ms.validateBySchema(e,t)}a(e6,"dropComponentFileValidator");function t6(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Bu).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ms.validateBySchema(e,t)}a(t6,"getComponentFileValidator");function r6(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ms.validateBySchema(e,t)}a(r6,"addComponentValidator");function n6(e){let t=Ne.object({project:Ne.string().pattern(Ds).custom(jd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return Ms.validateBySchema(e,t)}a(n6,"dropCustomFunctionProjectValidator");function s6(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean()});return Ms.validateBySchema(e,t)}a(s6,"packageComponentValidator");function i6(e){let t=Ne.object({project:Ne.string().pattern(Ds).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:Ne.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:Ne.string().optional()});return Ms.validateBySchema(e,t)}a(i6,"deployComponentValidator")});var rf=T((Tfe,JU)=>{"use strict";var Zd=require("joi"),ef=require("path"),$U=require("fs-extra"),{exec:o6}=require("child_process"),a6=require("util"),YU=a6.promisify(o6),Hu=M(),{handleHDBError:Ta,hdb_errors:c6}=Z(),{HTTP_STATUS_CODES:ga}=c6,xu=j(),u6=et(),Ra=V();xu.initSync();var BT=xu.get(Hu.CONFIG_PARAMS.COMPONENTSROOT),KU="npm install --omit=dev --json",l6=`${KU} --dry-run`;JU.exports={installModules:E6,auditModules:h6,installAllRootModules:_6,uninstallRootModule:d6,linkHarperdb:f6};async function _6(e=!1){await tf(),await qu(e?"npm install --ignore-scripts":"npm install",xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(_6,"installAllRootModules");async function d6(e){await qu(`npm uninstall ${e}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(d6,"uninstallRootModule");async function f6(){await tf(),await qu(`npm link ${Hu.PACKAGE_ROOT}`,xu.get(Hu.CONFIG_PARAMS.ROOTPATH))}a(f6,"linkHarperdb");async function qu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await YU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
12
+ `,""))}return n&&!n.includes("Debugger listening")&&Ra.error("Error running NPM command:",e,n),Ra.trace(r,n),r?.replace(`
13
+ `,"")}a(qu,"runCommand");async function E6(e){Ra.info(`starting installModules for request: ${e}`);let t=zU(e);if(t)throw Ta(t,t.message,ga.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?l6:KU;await tf(),await QU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=ef.join(BT,u),l,d=null;try{let{stdout:f,stderr:E}=await YU(s,{cwd:_});l=f?f.replace(`
14
14
  `,""):null,d=E?E.replace(`
15
- `,""):null}catch(f){f.stderr?i[u].npm_error=YM(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return ga.info(`finished installModules with response ${i}`),i}a(x8,"installModules");function YM(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
16
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(YM,"parseNPMStdErr");async function F8(e){ga.info(`starting auditModules for request: ${e}`);let t=WM(e);if(t)throw Sa(t,t.message,Ta.BAD_REQUEST);let{projects:r}=e;await sf(),await KM(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=rf.join(wT,o);s[o]={npm_output:null,npm_error:null};try{let u=await Hu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=YM(u.stderr)}}return ga.info(`finished auditModules with response ${s}`),s}a(F8,"auditModules");async function sf(){try{return await Hu("npm -v"),!0}catch{throw Sa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ta.BAD_REQUEST,void 0,void 0,!0)}}a(sf,"checkNPMInstalled");async function KM(e){if(!Array.isArray(e)||e.length===0)throw Sa(new Error,"projects argument must be an array with at least 1 element",Ta.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=rf.join(wT,i.toString());if(!await kM.pathExists(o)){t.push(i);continue}let u=rf.join(o,"package.json");await kM.pathExists(u)||r.push(i)}if(t.length>0)throw Sa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ta.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Sa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ta.BAD_REQUEST,void 0,void 0,!0)}a(KM,"checkProjectPaths");function WM(e){let t=tf.object({projects:tf.array().min(1).items(tf.string()).required(),dry_run:tf.boolean().default(!1)});return M8.validateBySchema(e,t)}a(WM,"modulesValidator")});var LT=T((Ide,ZM)=>{"use strict";var Ra=require("fs-extra"),CT=require("path"),of=q(),zM=z(),af=w(),jM=j(),G8=Cr();ZM.exports=q8;async function q8(){let e=k8(),t=jM.get(af.CONFIG_PARAMS.ROOTPATH),r=CT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+af.PACKAGE_ROOT}},n=CT.join(t,"node_modules");await Ra.ensureDir(n);let i,o=!0,c=!1;try{i=await Ra.readJson(r)}catch(u){if(zM.isEmptyOrZeroLength(e))return;if(u.code!==af.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!zM.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await JM(_);s.dependencies[u]=l+_}if(!o){of.notify("Installing components"),await XM(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await JM(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(of.notify("Removing component",u),c=!0);c&&(of.notify("Updating components."),await XM(r,s,i))}a(q8,"installComponents");function k8(){let e=G8.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(k8,"getComponentsConfig");async function JM(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":CT.extname(e)||await Ra.pathExists(e)?"file:":"github:"}a(JM,"getPkgPrefix");async function XM(e,t,r){of.trace("npm installing components package.json",t),await Ra.writeFile(e,JSON.stringify(t,null," "));try{await nf().installAllRootModules(jM.get(af.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Ra.writeFile(e,JSON.stringify(r,null," ")):await Ra.unlink(e),s}}a(XM,"installPackages")});var MT=T((Lde,sP)=>{"use strict";var qe=require("fs-extra"),DT=require("fast-glob"),fe=require("path"),tP=require("tar-fs"),Cde=require("uuid").v4,UT=require("normalize-path"),on=qM(),yt=q(),$e=w(),St=j(),xu=Cr(),V8=z(),{PACKAGE_ROOT:$8}=w(),{handleHDBError:Pt,hdb_errors:Y8}=Z(),{basename:K8}=require("path"),W8=LT(),rP=j(),Q8=w(),{Readable:z8}=require("stream"),{isMainThread:J8}=require("worker_threads"),{HDB_ERROR_MSGS:ao,HTTP_STATUS_CODES:vt}=Y8,X8=fe.join($8,"application-template"),eP=fe.join(St.get($e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function j8(){yt.trace("getting custom api status");let e={};try{e={port:St.get($e.CONFIG_PARAMS.HTTP_PORT),directory:St.get($e.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Pt(new Error,ao.FUNCTION_STATUS,vt.INTERNAL_SERVER_ERROR,yt.ERR,t)}return e}a(j8,"customFunctionsStatus");function Z8(){yt.trace("getting custom api endpoints");let e={},t=St.get($e.CONFIG_PARAMS.COMPONENTSROOT);try{DT.sync(UT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:DT.sync(UT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:DT.sync(UT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Pt(new Error,ao.GET_FUNCTIONS,vt.INTERNAL_SERVER_ERROR,yt.ERR,r)}return e}a(Z8,"getCustomFunctions");function e6(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("getting custom api endpoint file content");let r=St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=fe.join(r,s,n,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Pt(new Error,ao.GET_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(e6,"getCustomFunction");function t6(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=on.setCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("setting custom function file content");let r=St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return qe.outputFileSync(fe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Pt(new Error,ao.SET_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(t6,"setCustomFunction");function r6(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=on.getDropCustomFunctionValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("dropping custom function file");let r=St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return qe.unlinkSync(fe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Pt(new Error,ao.DROP_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,o)}}a(r6,"dropCustomFunction");function s6(e){e.project&&(e.project=fe.parse(e.project).name);let t=on.addComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("adding component");let r=St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=fe.join(r,s);return qe.mkdirSync(n,{recursive:!0}),qe.copySync(X8,n),`Successfully added project: ${s}`}catch(n){throw Pt(new Error,ao.ADD_FUNCTION,vt.INTERNAL_SERVER_ERROR,yt.ERR,n)}}a(s6,"addComponent");function n6(e){e.project&&(e.project=fe.parse(e.project).name);let t=on.dropCustomFunctionProjectValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);yt.trace("dropping custom function project");let r=St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=St.get($e.CONFIG_PARAMS.APPS);if(!V8.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return xu.updateConfigValue($e.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=fe.join(r,s);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Pt(new Error,ao.DROP_FUNCTION_PROJECT,vt.INTERNAL_SERVER_ERROR,yt.ERR,i)}}a(n6,"dropCustomFunctionProject");async function i6(e){e.project&&(e.project=fe.parse(e.project).name);let t=on.packageComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;yt.trace("packaging component",s);let n;try{n=await qe.realpath(fe.join(r,s))}catch(u){if(u.code!==$e.NODE_ERROR_CODES.ENOENT)throw u;try{n=await qe.realpath(fe.join(St.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===$e.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await qe.ensureDir(eP);let i=fe.join(eP,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(fe.join(n,"node_modules"))}),tP.pack(n,o).pipe(qe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=qe.readFileSync(i,{encoding:"base64"});return await qe.remove(i),{project:s,payload:c}}a(i6,"packageComponent");async function o6(e){e.project&&(e.project=fe.parse(e.project).name);let t=on.deployComponentValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(yt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=fe.join(r,s),i="file:"+o,await qe.ensureDir(o);let f=z8.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(tP.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(fe.join(o,"package"),o),await qe.remove(fe.join(o,"package")))}if(await xu.addConfig(s,{package:i}),!n){await W8();let f=rP.get(Q8.CONFIG_PARAMS.ROOTPATH);o=fe.join(f,"node_modules",s)}if(J8)return;let c=new Map;c.isWorker=!0;let u=(uf(),te(cf)),_;u.setErrorReporter(f=>_=f);let l=K8(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return yt.info("Installed component"),`Successfully deployed: ${s}`}a(o6,"deployComponent");async function a6(){let e=xu.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 u=await qe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=fe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await qe.stat(d),E={name:fe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return yt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(St.get($e.CONFIG_PARAMS.COMPONENTSROOT),{name:St.get($e.CONFIG_PARAMS.COMPONENTSROOT).split(fe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(fe.join(St.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(uf(),te(cf)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(a6,"getComponents");async function c6(e){let t=on.getComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let s=xu.getConfigObj()[e.project]||e.project==="harperdb"?fe.join(rP.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules"):St.get($e.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(fe.join(s,e.project,e.file));return{message:await qe.readFile(fe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===$e.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${fe.join(e.project,e.file)}'`):i}}a(c6,"getComponentFile");async function u6(e){let t=on.setComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=fe.join(St.get($e.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await qe.ensureFile(s),await qe.outputFile(s,e.payload,r)):await qe.ensureDir(s),"Successfully set component: "+e.file}a(u6,"setComponentFile");async function l6(e){let t=on.dropComponentFileValidator(e);if(t)throw Pt(t,t.message,vt.BAD_REQUEST);let r=e.file?fe.join(e.project,e.file):e.project,s=fe.join(St.get($e.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(s)&&await qe.remove(s),xu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(l6,"dropComponent");sP.exports={customFunctionsStatus:j8,getCustomFunctions:Z8,getCustomFunction:e6,setCustomFunction:t6,dropCustomFunction:r6,addComponent:s6,dropCustomFunctionProject:n6,packageComponent:i6,deployComponent:o6,getComponents:a6,getComponentFile:c6,setComponentFile:u6,dropComponent:l6}});var PT=T((Ude,iP)=>{"use strict";var an=require("joi"),nP=je();iP.exports={readTransactionLogValidator:_6,deleteTransactionLogsBeforeValidator:d6};function _6(e){let t=an.object({schema:an.string().required(),table:an.string().required(),from:an.date().timestamp(),to:an.date().timestamp(),limit:an.number().min(1)});return nP.validateBySchema(e,t)}a(_6,"readTransactionLogValidator");function d6(e){let t=an.object({schema:an.string().required(),table:an.string().required(),timestamp:an.date().timestamp().required()});return nP.validateBySchema(e,t)}a(d6,"deleteTransactionLogsBeforeValidator")});var _f=T((Pde,lP)=>{"use strict";var vT=w(),lf=mt(),oP=z(),aP=j(),cP=Rn(),{handleHDBError:Aa,hdb_errors:f6}=Z(),{HTTP_STATUS_CODES:Oa}=f6,{readTransactionLogValidator:E6,deleteTransactionLogsBeforeValidator:h6}=PT(),uP="This operation relies on clustering and cannot run with it disable.",m6="Logs successfully deleted from transaction log.",p6="All logs successfully deleted from transaction log.";lP.exports={readTransactionLog:S6,deleteTransactionLogsBefore:T6};async function*S6(e){let t=E6(e);if(t)throw Aa(t,t.message,Oa.BAD_REQUEST,void 0,void 0,!0);if(!aP.get(vT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aa(new Error,uP,Oa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=oP.checkSchemaTableExist(r,s);if(n)throw Aa(new Error,n,Oa.NOT_FOUND,void 0,void 0,!0);let i=cP.createNatsTableStreamName(r,s),o=await lf.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===vT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(S6,"readTransactionLog");async function T6(e){let t=h6(e);if(t)throw Aa(t,t.message,Oa.BAD_REQUEST,void 0,void 0,!0);if(!aP.get(vT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aa(new Error,uP,Oa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=oP.checkSchemaTableExist(r,s);if(i)throw Aa(new Error,i,Oa.NOT_FOUND,void 0,void 0,!0);let o=cP.createNatsTableStreamName(r,s),{jsm:c}=await lf.getNATSReferences(),u=await lf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=m6,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=p6):d=(await lf.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(T6,"deleteTransactionLogsBefore")});var dP=T((Bde,_P)=>{"use strict";var BT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};_P.exports=BT});var EP=T((xde,fP)=>{"use strict";var HT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};fP.exports=HT});var FT=T((Gde,mP)=>{"use strict";var hP=dP(),g6=EP(),{HDB_ERROR_MSGS:R6}=yr(),xT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=R6.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new hP(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new g6(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new hP(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};mP.exports=xT});var hf=T((kde,UP)=>{"use strict";var GT=cs(),df=as(),ms=fd(),qu=Bi(),qT=qi(),A6=Xp(),O6=wL(),ku=Br(),ff=oS(),It=q(),b6=uS(),N6=Cd(),y6=KS(),I6=Dd(),w6=WS(),C6=QS(),L6=XS(),D6=ZS(),kT=rT(),Mn=z(),U6=NU(),VT=aT(),TP=Qd(),hs=w(),gP=NM(),M6=ua(),RP=fu(),AP=(Zd(),te(Mu)),OP=Cr(),$r=MT(),P6=require("alasql"),bP=_f(),NP=nf(),yP=FT(),{handleHDBError:Tr,hdb_errors:IP}=Z(),{HDB_ERROR_MSGS:kt,HTTP_STATUS_CODES:Fu}=IP,x=new Map,wP="delete",mi="insert",Pn="read",co="update",Gu="describe",pP=qu.describeSchema.name,SP=qu.describeTable.name,CP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},v6="catchup",B6="handleGetJob",H6="handleGetJobsByStartDate",Ef={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},x6=[ms.createTable.name,ms.createAttribute.name,ms.dropTable.name,ms.dropAttribute.name],LP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},k=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};x.set(GT.insert.name,new k(!1,[mi]));x.set(GT.update.name,new k(!1,[co]));x.set(GT.upsert.name,new k(!1,[mi,co]));x.set(df.searchByConditions.name,new k(!1,[Pn]));x.set(df.searchByHash.name,new k(!1,[Pn]));x.set(df.searchByValue.name,new k(!1,[Pn]));x.set(df.search.name,new k(!1,[Pn]));x.set(ms.createSchema.name,new k(!0,[]));x.set(ms.createTable.name,new k(!0,[]));x.set(ms.createAttribute.name,new k(!1,[mi]));x.set(ms.dropSchema.name,new k(!0,[]));x.set(ms.dropTable.name,new k(!0,[]));x.set(ms.dropAttribute.name,new k(!0,[]));x.set(qu.describeSchema.name,new k(!1,[Pn]));x.set(qu.describeTable.name,new k(!1,[Pn]));x.set(qT.deleteRecord.name,new k(!1,[wP]));x.set(ku.addUser.name,new k(!0,[]));x.set(ku.alterUser.name,new k(!0,[]));x.set(ku.dropUser.name,new k(!0,[]));x.set(ku.listUsersExternal.name,new k(!0,[]));x.set(ff.listRoles.name,new k(!0,[]));x.set(ff.addRole.name,new k(!0,[]));x.set(ff.alterRole.name,new k(!0,[]));x.set(ff.dropRole.name,new k(!0,[]));x.set(b6.name,new k(!0,[]));x.set(N6.name,new k(!0,[]));x.set(y6.name,new k(!0,[]));x.set(I6.name,new k(!0,[]));x.set(w6.name,new k(!0,[]));x.set(C6.name,new k(!0,[]));x.set(kT.setRoutes.name,new k(!0,[]));x.set(kT.getRoutes.name,new k(!0,[]));x.set(kT.deleteRoutes.name,new k(!0,[]));x.set(OP.setConfiguration.name,new k(!0,[]));x.set(L6.clusterStatus.name,new k(!0,[]));x.set(D6.name,new k(!0,[]));x.set(VT.getFingerprint.name,new k(!0,[]));x.set(VT.setLicense.name,new k(!0,[]));x.set(qT.deleteFilesBefore.name,new k(!0,[]));x.set(qT.deleteAuditLogsBefore.name,new k(!0,[]));x.set(TP.restart.name,new k(!0,[]));x.set(TP.restartService.name,new k(!0,[]));x.set(A6.name,new k(!0,[]));x.set(O6.name,new k(!0,[Pn]));x.set(M6.systemInformation.name,new k(!0,[]));x.set(OP.getConfiguration.name,new k(!0,[]));x.set(bP.readTransactionLog.name,new k(!0,[]));x.set(bP.deleteTransactionLogsBefore.name,new k(!0,[]));x.set(NP.installModules.name,new k(!0,[]));x.set(NP.auditModules.name,new k(!0,[]));x.set(RP.createTokens.name,new k(!1,[]));x.set(RP.refreshOperationToken.name,new k(!1,[]));x.set(AP.login.name,new k(!1,[]));x.set(AP.logout.name,new k(!1,[]));x.set($r.customFunctionsStatus.name,new k(!0,[]));x.set($r.getCustomFunctions.name,new k(!0,[]));x.set($r.getComponents.name,new k(!0,[]));x.set($r.getComponentFile.name,new k(!0,[]));x.set($r.setComponentFile.name,new k(!0,[]));x.set($r.dropComponent.name,new k(!0,[]));x.set($r.getCustomFunction.name,new k(!0,[]));x.set($r.setCustomFunction.name,new k(!0,[]));x.set($r.dropCustomFunction.name,new k(!0,[]));x.set($r.addComponent.name,new k(!0,[]));x.set($r.dropCustomFunctionProject.name,new k(!0,[]));x.set($r.packageComponent.name,new k(!0,[]));x.set($r.deployComponent.name,new k(!0,[]));x.set(VT.getRegistrationInfo.name,new k(!1,[]));x.set(ku.userInfo.name,new k(!1,[]));x.set(qu.describeAll.name,new k(!1,[]));x.set(B6,new k(!1,[]));x.set(H6,new k(!0,[]));x.set(v6,new k(!0,[]));x.set(Ef.CSV_DATA_LOAD,new k(!1,[mi,co]));x.set(Ef.CSV_URL_LOAD,new k(!1,[mi,co]));x.set(Ef.CSV_FILE_LOAD,new k(!1,[mi,co]));x.set(Ef.IMPORT_FROM_S3,new k(!1,[mi,co]));x.set(LP.EXPORT_TO_S3,new k(!0,[]));x.set(LP.EXPORT_LOCAL,new k(!0,[]));x.set(hs.VALID_SQL_OPS_ENUM.DELETE,new k(!1,[wP]));x.set(hs.VALID_SQL_OPS_ENUM.SELECT,new k(!1,[Pn]));x.set(hs.VALID_SQL_OPS_ENUM.INSERT,new k(!1,[mi]));x.set(hs.VALID_SQL_OPS_ENUM.UPDATE,new k(!1,[co]));UP.exports={verifyPerms:G6,verifyPermsAst:F6,verifyBulkLoadAttributePerms:k6};function F6(e,t,r){if(Mn.isEmptyOrZeroLength(e))throw It.info("verify_perms_ast has an empty user parameter"),Tr(new Error);if(Mn.isEmptyOrZeroLength(t))throw It.info("verify_perms_ast has an empty user parameter"),Tr(new Error);if(Mn.isEmptyOrZeroLength(r))throw It.info("verify_perms_ast has a null operation parameter"),Tr(new Error);try{let s=new yP,n=new U6(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw It.info("No schemas defined in verifyPermsAst(), will not continue."),Tr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&CP[r])throw Tr(new Error,kt.DROP_SYSTEM,Fu.FORBIDDEN);if(c&&!u)return null;let _=gP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof P6.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=DP(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=YT(t.role.permission,f,d[E]);$T(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw Tr(s)}}a(F6,"verifyPermsAst");function G6(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw It.info("null required parameter in verifyPerms"),Tr(new Error,kt.DEFAULT_INVALID_REQUEST,Fu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema??e.database,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new yP;if(Mn.isEmptyOrZeroLength(e.hdb_user.role)||Mn.isEmptyOrZeroLength(e.hdb_user.role.permission))return It.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(kt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(hs.SYSTEM_SCHEMA_NAME)||n===hs.SYSTEM_SCHEMA_NAME;if(l&&CP[r])throw Tr(new Error,kt.DROP_SYSTEM,Fu.FORBIDDEN);if(u&&!l||_===!0&&(r===ms.createSchema.name||r===ms.dropSchema.name))return null;if(x6.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=gP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===pP||r===SP){if(n===hs.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(kt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===pP&&(!d[n]||!d[n][Gu]))return c.handleInvalidItem(kt.SCHEMA_NOT_FOUND(n));if(r===SP&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Gu]))return c.handleInvalidItem(kt.TABLE_NOT_FOUND(n,i))}}let f=DP(e.hdb_user,r,o,c,s);if(f)return f;if(x.get(r)&&x.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&hs.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[hs.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(O=>O[hs.PERMS_CRUD_ENUM.READ]).forEach(O=>{p.push(O.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=q6(e),h=YT(e.hdb_user.role.permission,n,i);return $T(E,h,r,i,n,c,s),c.getPermsResponse()}a(G6,"verifyPerms");function DP(e,t,r,s,n){if(Mn.arrayHasEmptyValues([e,t,r]))throw It.info("hasPermissions has an invalid parameter"),Tr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||x.get(t).requires_su))return null;if(!x.get(t))throw It.info(`operation ${t} not found.`),Tr(new Error,kt.OP_NOT_FOUND(t),Fu.BAD_REQUEST);if(x.get(t)&&x.get(t).requires_su)return It.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(kt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Gu]===!1){s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(kt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Gu]===!1)s.addInvalidItem(kt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=x.get(t).perms;!Mn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(It.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=kt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw It.error(E),It.error(f),Tr(IP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(DP,"hasPermissions");function $T(e,t,r,s,n,i,o){if(!e||!t)throw It.info("no attributes specified in checkAttributePerms."),Tr(new Error);let c=x.get(r).perms;if(!c||c==="")throw It.info(`no permissions found for ${r} in checkAttributePerms().`),Tr(new Error);if(Mn.isEmptyOrZeroLength(t))return It.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[Gu]===!1){i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(hs.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Pn)throw Tr(new Error,kt.SYSTEM_TIMESTAMP_PERMS_ERR,Fu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(kt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a($T,"checkAttributePerms");function q6(e){let t=new Set;try{if(e.action)return t;if(e.operation===hs.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){It.info(r)}return t}a(q6,"getRecordAttributes");function YT(e,t,r){let s=new Map;if(Mn.isEmpty(e))return It.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{It.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(YT,"getAttributePermissions");function k6(e,t,r,s,n,i,o){let c=new Set(i),u=YT(e,s,n);$T(c,u,t,n,s,o,r)}a(k6,"verifyBulkLoadAttributePerms")});var pf=T(($de,HP)=>{"use strict";HP.exports={evaluateSQL:t9,processAST:BP,convertSQLToAST:vP,checkASTPermissions:PP};var V6=cs(),MP=require("util"),$6=MP.callbackify(V6.insert),Y6=as().search,K6=gC().update,W6=MP.callbackify(K6),Q6=AC().convertDelete,pi=require("alasql"),z6=hf(),mf=q(),J6=Z_(),X6=z(),Vu=w(),{hdb_errors:j6,handleHDBError:KT}=Z(),{HTTP_STATUS_CODES:WT}=j6;J6(pi);var Z6=403,e9="There was a problem performing this insert. Please check the logs and try again.",QT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function t9(e,t){let r=e.parsed_sql_object;if(!r){r=vP(e.sql);let s,n=r.ast.statements[0];if(n instanceof pi.yy.Insert?s=n.into.databaseid:n instanceof pi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof pi.yy.Update||n instanceof pi.yy.Delete?s=n.table.databaseid:mf.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof pi.yy.Select)&&X6.isEmptyOrZeroLength(s))return t("No schema specified",null)}BP(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(t9,"evaluateSQL");function PP(e,t){let r;try{r=z6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(PP,"checkASTPermissions");function vP(e){let t=new QT;if(!e)throw KT(new Error,"The 'sql' parameter is missing from the request body",WT.BAD_REQUEST);try{let r=e.trim(),s=pi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
17
- `);throw s[1]?KT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,WT.BAD_REQUEST):KT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",WT.BAD_REQUEST)}return t}a(vP,"convertSQLToAST");function BP(e,t,r){try{let s=r9;if(!e.bypass_auth&&!t.permissions_checked){let i=PP(e,t);if(i&&i.length>0)return r(Z6,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Vu.VALID_SQL_OPS_ENUM.SELECT:s=Y6,n=t.ast.statements[0];break;case Vu.VALID_SQL_OPS_ENUM.INSERT:s=s9;break;case Vu.VALID_SQL_OPS_ENUM.UPDATE:s=W6;break;case Vu.VALID_SQL_OPS_ENUM.DELETE:s=Q6;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(BP,"processAST");function r9(e,t){mf.info(e),t("unknown sql statement")}a(r9,"nullFunction");function s9({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=n9(i,e.values)}catch(o){return r(o)}$6(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){mf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(s9,"convertInsert");function n9(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=pi.compile(`SELECT ${n.toString()} AS [${Vu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw mf.error(r),new Error(e9)}}a(n9,"createDataObjects")});var zT=T((Kde,FP)=>{"use strict";var{S3:i9,GetObjectCommand:o9}=require("@aws-sdk/client-s3");FP.exports={getFileStreamFromS3:a9,getS3AuthObj:xP};async function a9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await xP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new o9(r))).Body}a(a9,"getFileStreamFromS3");function xP(e,t,r){return new i9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(xP,"getS3AuthObj")});var Sf=T((Qde,QP)=>{"use strict";var XT=as(),c9=pf(),u9=zT(),{AsyncParser:l9,Transform:_9}=require("json2csv"),Yu=require("stream"),Yr=z(),JT=require("fs-extra"),d9=require("path"),ps=q(),{promisify:kP}=require("util"),$u=z(),{handleHDBError:Tt,hdb_errors:f9}=Z(),{HDB_ERROR_MSGS:gr,HTTP_STATUS_CODES:gt}=f9,{streamAsJSON:E9}=(Th(),te(YO)),{Upload:h9}=require("@aws-sdk/lib-storage"),GP=["search_by_value","search_by_hash","sql","search_by_conditions"],qP=["json","csv"],VP="json",$P="csv",m9="Successfully exported JSON locally.",p9="Successfully exported CSV locally.",S9=1e3,T9=XT.searchByHash,g9=XT.searchByValue,R9=kP(c9.evaluateSQL),A9=kP(Yu.finished);QP.exports={export_to_s3:y9,export_local:O9,toCsvStream:YP};async function O9(e){ps.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=KP(e);if(!Yr.isEmpty(t))throw ps.error(t),Tt(new Error,t,gt.BAD_REQUEST,void 0,void 0,!0);if(Yr.isEmpty(e.path))throw ps.error(gr.MISSING_VALUE("path")),Tt(new Error,gr.MISSING_VALUE("path"),gt.BAD_REQUEST,void 0,void 0,!0);let r=(Yr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(d9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Yr.buildFolderPath(e.path,r);await b9(e.path);let n=await WP(e);return await N9(s,e.format,n)}a(O9,"export_local");async function b9(e){if(ps.trace("in confirmPath"),Yr.isEmptyOrZeroLength(e))throw Tt(new Error,`Invalid path: ${e}`,gt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await JT.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,ps.error(s),Tt(new Error,s,gt.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 ps.error(r),Tt(new Error,r,gt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(b9,"confirmPath");async function N9(e,t,r){if(ps.trace("in saveToLocal"),$u.isEmptyOrZeroLength(e))throw Tt(new Error,gr.INVALID_VALUE("file_path"),gt.BAD_REQUEST,void 0,void 0,!0);if($u.isEmptyOrZeroLength(t))throw Tt(new Error,gr.INVALID_VALUE("Source format"),gt.BAD_REQUEST,void 0,void 0,!0);if($u.isEmpty(r))throw Tt(new Error,gr.NOT_FOUND("Data"),gt.BAD_REQUEST,void 0,void 0,!0);if(t===VP){let s=JT.createWriteStream(e);return E9(r).pipe(s),await A9(s),{message:m9,path:e}}else if(t===$P){let s=JT.createWriteStream(e),n=Yu.Readable.from(r),i={},o={objectMode:!0};return await new l9(i,o).fromInput(n).toOutput(s).promise(!1),{message:p9,path:e}}throw Tt(new Error,gr.INVALID_VALUE("format"),gt.BAD_REQUEST)}a(N9,"saveToLocal");async function y9(e){if(!e.s3||Object.keys(e.s3).length===0)throw Tt(new Error,gr.MISSING_VALUE("S3 object"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Tt(new Error,gr.MISSING_VALUE("aws_access_key_id"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Tt(new Error,gr.MISSING_VALUE("aws_secret_access_key"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.bucket))throw Tt(new Error,gr.MISSING_VALUE("bucket"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.key))throw Tt(new Error,gr.MISSING_VALUE("key"),gt.BAD_REQUEST);if(Yr.isEmptyOrZeroLength(e.s3.region))throw Tt(new Error,gr.MISSING_VALUE("region"),gt.BAD_REQUEST);let t=KP(e);if(!Yr.isEmpty(t))throw Tt(new Error,t,gt.BAD_REQUEST);ps.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await WP(e)}catch(u){throw ps.error(u),u}let s,n=await u9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Yu.PassThrough;if(e.format===$P){i=e.s3.key+".csv";let u=YP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===VP){i=e.s3.key+".json";let u=new Yu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%S9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw Tt(new Error,gr.INVALID_VALUE("format"),gt.BAD_REQUEST);return new h9({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(y9,"export_to_s3");function YP(e){let t=Yu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new _9(r,s);return t.pipe(n)}a(YP,"toCsvStream");function KP(e){if(ps.trace("in exportCoreValidation"),Yr.isEmpty(e.format))return"format missing";if(qP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${qP.join(", ")}`;let t=e.search_operation.operation;if(Yr.isEmpty(t))return"search_operation.operation missing";if(GP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${GP.join(", ")}`}a(KP,"exportCoreValidation");async function WP(e){ps.trace("in getRecords");let t,r;if($u.isEmpty(e.search_operation)||$u.isEmptyOrZeroLength(e.search_operation.operation))throw Tt(new Error,gr.INVALID_VALUE("Search operation"),gt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=g9;break;case"search_by_hash":t=T9;break;case"search_by_conditions":t=XT.searchByConditions;break;case"sql":t=R9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ps.error(r),Tt(new Error,r,gt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(WP,"getRecords")});var tv={};ze(tv,{contentTypes:()=>rg,findBestSerializer:()=>gf,getDeserializer:()=>lo,registerContentHandlers:()=>sg,serialize:()=>Rf,serializeMessage:()=>hi});function I9(e){try{return e?.[0]===123?tg(e):e}catch{return e}}function sg(e){e.register(C9,{serializers:[{regex:/^application\/json$/,serializer:hc},{regex:/^application\/cbor$/,serializer:function(t){return new uo.EncoderStream(Wu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Tf.Readable.from((0,cn.encodeIter)(t,Wu)):(0,cn.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,jT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,cn.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,uo.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function gf(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Vt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Vt.keys()).join(", "))}};s=Vt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Rf(e,t,r){let s=JP&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=gf(t);if(i.serializer.compressible===!1&&(s=!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);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,vn.createBrotliCompress)({params:{[vn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?vn.constants.BROTLI_MODE_TEXT:vn.constants.BROTLI_MODE_GENERIC,[vn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>JP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,vn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function hi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Ku(e);let r=t.serialize;if(r)return r(e);let s=gf(t);return r=t.serialize=s.serializer.serialize,r(e)}function L9(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function lo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Vt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Vt.get(e)?.deserialize||XP(e,s);return o=>L9(o).then(i)}return e&&Vt.get(e)?.deserialize||XP(e,s)}function XP(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return tg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function D9(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var jT,cn,uo,vn,Tf,jP,ZT,eg,ZP,Ku,tg,Wu,Vt,rg,zP,ev,w9,C9,JP,pa=ge(()=>{Th();jT=M(Sf()),cn=require("msgpackr"),uo=require("cbor-x"),vn=require("zlib"),Tf=require("stream");es();jP=require("../../index"),ZT=M(j()),eg=M(w()),ZP=ZT.default.get(eg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Ku=ZP?Di:JSON.stringify,tg=ZP?Sh:JSON.parse,Wu={useRecords:!1,useToJSON:!0},Vt=new Map,rg=Vt;Ot.contentTypes=rg;(0,jP._assignPackageExport)("contentTypes",rg);Vt.set("application/json",{serializeStream:hc,serialize:Ku,deserialize:tg,q:.8});zP=new uo.Encoder(Wu);Vt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new uo.EncoderStream(Wu).end(e)},serialize:zP.encode,deserialize:zP.decode,q:1});Vt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Tf.Readable.from((0,cn.encodeIter)(e,Wu)):(0,cn.pack)(e)},serialize:cn.pack,deserialize:cn.unpack,q:.9});Vt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,jT.toCsvStream)(e)},q:.1});Vt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Vt.set("text/event-stream",{serializeStream:function(e){return Tf.Readable.from(D9(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+`
18
- `),e.data){let r=e.data;typeof r=="object"&&(r=Ku(r)),t+="data: "+r+`
15
+ `,""):null}catch(f){f.stderr?i[u].npm_error=WU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Ra.info(`finished installModules with response ${i}`),i}a(E6,"installModules");function WU(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
16
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(WU,"parseNPMStdErr");async function h6(e){Ra.info(`starting auditModules for request: ${e}`);let t=zU(e);if(t)throw Ta(t,t.message,ga.BAD_REQUEST);let{projects:r}=e;await tf(),await QU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=ef.join(BT,o);n[o]={npm_output:null,npm_error:null};try{let u=await qu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=WU(u.stderr)}}return Ra.info(`finished auditModules with response ${n}`),n}a(h6,"auditModules");async function tf(){try{return await qu("npm -v"),!0}catch{throw Ta(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",ga.BAD_REQUEST,void 0,void 0,!0)}}a(tf,"checkNPMInstalled");async function QU(e){if(!Array.isArray(e)||e.length===0)throw Ta(new Error,"projects argument must be an array with at least 1 element",ga.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=ef.join(BT,i.toString());if(!await $U.pathExists(o)){t.push(i);continue}let u=ef.join(o,"package.json");await $U.pathExists(u)||r.push(i)}if(t.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,ga.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,ga.BAD_REQUEST,void 0,void 0,!0)}a(QU,"checkProjectPaths");function zU(e){let t=Zd.object({projects:Zd.array().min(1).items(Zd.string()).required(),dry_run:Zd.boolean().default(!1)});return u6.validateBySchema(e,t)}a(zU,"modulesValidator")});var xT=T((Rfe,tP)=>{"use strict";var Aa=require("fs-extra"),HT=require("path"),nf=V(),XU=J(),sf=M(),eP=j(),m6=Lr();tP.exports=p6;async function p6(){let e=S6(),t=eP.get(sf.CONFIG_PARAMS.ROOTPATH),r=HT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+sf.PACKAGE_ROOT}},s=HT.join(t,"node_modules");await Aa.ensureDir(s);let i,o=!0,c=!1;try{i=await Aa.readJson(r)}catch(u){if(XU.isEmptyOrZeroLength(e))return;if(u.code!==sf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!XU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await jU(_);n.dependencies[u]=l+_}if(!o){nf.notify("Installing components"),await ZU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await jU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(nf.notify("Removing component",u),c=!0);c&&(nf.notify("Updating components."),await ZU(r,n,i))}a(p6,"installComponents");function S6(){let e=m6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(S6,"getComponentsConfig");async function jU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":HT.extname(e)||await Aa.pathExists(e)?"file:":"github:"}a(jU,"getPkgPrefix");async function ZU(e,t,r){nf.trace("npm installing components package.json",t),await Aa.writeFile(e,JSON.stringify(t,null," "));try{await rf().installAllRootModules(eP.get(sf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Aa.writeFile(e,JSON.stringify(r,null," ")):await Aa.unlink(e),n}}a(ZU,"installPackages")});var GT=T((bfe,iP)=>{"use strict";var qe=require("fs-extra"),qT=require("fast-glob"),pe=require("path"),nP=require("tar-fs"),Ofe=require("uuid").v4,FT=require("normalize-path"),ns=VU(),wt=V(),Ye=M(),gt=j(),Fu=Lr(),T6=J(),{PACKAGE_ROOT:g6}=M(),{handleHDBError:Ht,hdb_errors:R6}=Z(),{basename:A6}=require("path"),O6=xT(),sP=j(),b6=M(),{Readable:N6}=require("stream"),{isMainThread:y6}=require("worker_threads"),{HDB_ERROR_MSGS:_o,HTTP_STATUS_CODES:xt}=R6,I6=pe.join(g6,"application-template"),rP=pe.join(gt.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function w6(){wt.trace("getting custom api status");let e={};try{e={port:gt.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ht(new Error,_o.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,wt.ERR,t)}return e}a(w6,"customFunctionsStatus");function C6(){wt.trace("getting custom api endpoints");let e={},t=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{qT.sync(FT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:qT.sync(FT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qT.sync(FT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ht(new Error,_o.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,wt.ERR,r)}return e}a(C6,"getCustomFunctions");function L6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=pe.join(r,n,s,i+".js");try{return qe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ht(new Error,_o.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(L6,"getCustomFunction");function D6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.setCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("setting custom function file content");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return qe.outputFileSync(pe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ht(new Error,_o.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(D6,"setCustomFunction");function M6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=ns.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function file");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return qe.unlinkSync(pe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ht(new Error,_o.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,o)}}a(M6,"dropCustomFunction");function U6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.addComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("adding component");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=pe.join(r,n);return qe.mkdirSync(s,{recursive:!0}),qe.copySync(I6,s),`Successfully added project: ${n}`}catch(s){throw Ht(new Error,_o.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,s)}}a(U6,"addComponent");function P6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.dropCustomFunctionProjectValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function project");let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=gt.get(Ye.CONFIG_PARAMS.APPS);if(!T6.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 Fu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=pe.join(r,n);return qe.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Ht(new Error,_o.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,wt.ERR,i)}}a(P6,"dropCustomFunctionProject");async function v6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.packageComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;wt.trace("packaging component",n);let s;try{s=await qe.realpath(pe.join(r,n))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{s=await qe.realpath(pe.join(gt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Ye.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await qe.ensureDir(rP);let i=pe.join(rP,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(s,"node_modules"))}),nP.pack(s,o).pipe(qe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=qe.readFileSync(i,{encoding:"base64"});return await qe.remove(i),{project:n,payload:c}}a(v6,"packageComponent");async function B6(e){e.project&&(e.project=pe.parse(e.project).name);let t=ns.deployComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(wt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=pe.join(r,n),i="file:"+o,await qe.ensureDir(o);let f=N6.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(nP.extract(o,{finish:h})).on("error",p)});let E=await qe.readdir(o);E.length===1&&E[0]==="package"&&(await qe.copy(pe.join(o,"package"),o),await qe.remove(pe.join(o,"package")))}if(await Fu.addConfig(n,{package:i}),!s){await O6();let f=sP.get(b6.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",n)}if(y6)return;let c=new Map;c.isWorker=!0;let u=(af(),ee(of)),_;u.setErrorReporter(f=>_=f);let l=A6(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return wt.info("Installed component"),`Successfully deployed: ${n}`}a(B6,"deployComponent");async function H6(){let e=Fu.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 u=await qe.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=pe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await qe.stat(d),E={name:pe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return wt.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),n=await r(gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT).split(pe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(pe.join(gt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(af(),ee(of)).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(H6,"getComponents");async function x6(e){let t=ns.getComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let n=Fu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(sP.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await qe.stat(pe.join(n,e.project,e.file));return{message:await qe.readFile(pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Ye.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${pe.join(e.project,e.file)}'`):i}}a(x6,"getComponentFile");async function q6(e){let t=ns.setComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=pe.join(gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await qe.ensureFile(n),await qe.outputFile(n,e.payload,r)):await qe.ensureDir(n),"Successfully set component: "+e.file}a(q6,"setComponentFile");async function F6(e){let t=ns.dropComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.file?pe.join(e.project,e.file):e.project,n=pe.join(gt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await qe.pathExists(n)&&await qe.remove(n),Fu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(F6,"dropComponent");iP.exports={customFunctionsStatus:w6,getCustomFunctions:C6,getCustomFunction:L6,setCustomFunction:D6,dropCustomFunction:M6,addComponent:U6,dropCustomFunctionProject:P6,packageComponent:v6,deployComponent:B6,getComponents:H6,getComponentFile:x6,setComponentFile:q6,dropComponent:F6}});var kT=T((yfe,aP)=>{"use strict";var ss=require("joi"),oP=et();aP.exports={readTransactionLogValidator:G6,deleteTransactionLogsBeforeValidator:k6};function G6(e){let t=ss.object({schema:ss.string().required(),table:ss.string().required(),from:ss.date().timestamp(),to:ss.date().timestamp(),limit:ss.number().min(1)});return oP.validateBySchema(e,t)}a(G6,"readTransactionLogValidator");function k6(e){let t=ss.object({schema:ss.string().required(),table:ss.string().required(),timestamp:ss.date().timestamp().required()});return oP.validateBySchema(e,t)}a(k6,"deleteTransactionLogsBeforeValidator")});var uf=T((wfe,dP)=>{"use strict";var VT=M(),cf=St(),cP=J(),uP=j(),lP=gs(),{handleHDBError:Oa,hdb_errors:V6}=Z(),{HTTP_STATUS_CODES:ba}=V6,{readTransactionLogValidator:$6,deleteTransactionLogsBeforeValidator:Y6}=kT(),_P="This operation relies on clustering and cannot run with it disable.",K6="Logs successfully deleted from transaction log.",W6="All logs successfully deleted from transaction log.";dP.exports={readTransactionLog:Q6,deleteTransactionLogsBefore:z6};async function*Q6(e){let t=$6(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST,void 0,void 0,!0);if(!uP.get(VT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oa(new Error,_P,ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=cP.checkSchemaTableExist(r,n);if(s)throw Oa(new Error,s,ba.NOT_FOUND,void 0,void 0,!0);let i=lP.createNatsTableStreamName(r,n),o=await cf.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===VT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Q6,"readTransactionLog");async function z6(e){let t=Y6(e);if(t)throw Oa(t,t.message,ba.BAD_REQUEST,void 0,void 0,!0);if(!uP.get(VT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oa(new Error,_P,ba.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=cP.checkSchemaTableExist(r,n);if(i)throw Oa(new Error,i,ba.NOT_FOUND,void 0,void 0,!0);let o=lP.createNatsTableStreamName(r,n),{jsm:c}=await cf.getNATSReferences(),u=await cf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=K6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=W6):d=(await cf.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(z6,"deleteTransactionLogsBefore")});var EP=T((Lfe,fP)=>{"use strict";var $T=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}};fP.exports=$T});var mP=T((Mfe,hP)=>{"use strict";var YT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};hP.exports=YT});var WT=T((Pfe,SP)=>{"use strict";var pP=EP(),J6=mP(),{HDB_ERROR_MSGS:X6}=Ir(),KT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=X6.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 pP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new J6(c,s[c]);i.push(u)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new pP(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}};SP.exports=KT});var ff=T((Bfe,PP)=>{"use strict";var QT=rn(),lf=tn(),ln=ld(),Vu=xi(),zT=Vi(),j6=oS(),Z6=CL(),$u=vr(),_f=hS(),Ct=V(),e9=SS(),t9=yd(),r9=tT(),n9=wd(),s9=rT(),i9=nT(),o9=oT(),a9=cT(),JT=_T(),Us=J(),c9=yM(),XT=mT(),RP=Yd(),un=M(),AP=yU(),u9=la(),OP=hu(),bP=(Xd(),ee(vu)),NP=Lr(),Vr=GT(),l9=require("alasql"),yP=uf(),IP=rf(),wP=WT(),{handleHDBError:Sr,hdb_errors:CP}=Z(),{HDB_ERROR_MSGS:Vt,HTTP_STATUS_CODES:Gu}=CP,F=new Map,LP="delete",mi="insert",Ps="read",fo="update",ku="describe",TP=Vu.describeSchema.name,gP=Vu.describeTable.name,DP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},_9="catchup",d9="handleGetJob",f9="handleGetJobsByStartDate",df={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},E9=[ln.createTable.name,ln.createAttribute.name,ln.dropTable.name,ln.dropAttribute.name],MP={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},$=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};F.set(QT.insert.name,new $(!1,[mi]));F.set(QT.update.name,new $(!1,[fo]));F.set(QT.upsert.name,new $(!1,[mi,fo]));F.set(lf.searchByConditions.name,new $(!1,[Ps]));F.set(lf.searchByHash.name,new $(!1,[Ps]));F.set(lf.searchByValue.name,new $(!1,[Ps]));F.set(lf.search.name,new $(!1,[Ps]));F.set(ln.createSchema.name,new $(!0,[]));F.set(ln.createTable.name,new $(!0,[]));F.set(ln.createAttribute.name,new $(!1,[mi]));F.set(ln.dropSchema.name,new $(!0,[]));F.set(ln.dropTable.name,new $(!0,[]));F.set(ln.dropAttribute.name,new $(!0,[]));F.set(Vu.describeSchema.name,new $(!1,[Ps]));F.set(Vu.describeTable.name,new $(!1,[Ps]));F.set(zT.deleteRecord.name,new $(!1,[LP]));F.set($u.addUser.name,new $(!0,[]));F.set($u.alterUser.name,new $(!0,[]));F.set($u.dropUser.name,new $(!0,[]));F.set($u.listUsersExternal.name,new $(!0,[]));F.set(_f.listRoles.name,new $(!0,[]));F.set(_f.addRole.name,new $(!0,[]));F.set(_f.alterRole.name,new $(!0,[]));F.set(_f.dropRole.name,new $(!0,[]));F.set(e9.name,new $(!0,[]));F.set(t9.name,new $(!0,[]));F.set(r9.name,new $(!0,[]));F.set(n9.name,new $(!0,[]));F.set(s9.name,new $(!0,[]));F.set(i9.name,new $(!0,[]));F.set(JT.setRoutes.name,new $(!0,[]));F.set(JT.getRoutes.name,new $(!0,[]));F.set(JT.deleteRoutes.name,new $(!0,[]));F.set(NP.setConfiguration.name,new $(!0,[]));F.set(o9.clusterStatus.name,new $(!0,[]));F.set(a9.name,new $(!0,[]));F.set(XT.getFingerprint.name,new $(!0,[]));F.set(XT.setLicense.name,new $(!0,[]));F.set(zT.deleteFilesBefore.name,new $(!0,[]));F.set(zT.deleteAuditLogsBefore.name,new $(!0,[]));F.set(RP.restart.name,new $(!0,[]));F.set(RP.restartService.name,new $(!0,[]));F.set(j6.name,new $(!0,[]));F.set(Z6.name,new $(!0,[Ps]));F.set(u9.systemInformation.name,new $(!0,[]));F.set(NP.getConfiguration.name,new $(!0,[]));F.set(yP.readTransactionLog.name,new $(!0,[]));F.set(yP.deleteTransactionLogsBefore.name,new $(!0,[]));F.set(IP.installModules.name,new $(!0,[]));F.set(IP.auditModules.name,new $(!0,[]));F.set(OP.createTokens.name,new $(!1,[]));F.set(OP.refreshOperationToken.name,new $(!1,[]));F.set(bP.login.name,new $(!1,[]));F.set(bP.logout.name,new $(!1,[]));F.set(Vr.customFunctionsStatus.name,new $(!0,[]));F.set(Vr.getCustomFunctions.name,new $(!0,[]));F.set(Vr.getComponents.name,new $(!0,[]));F.set(Vr.getComponentFile.name,new $(!0,[]));F.set(Vr.setComponentFile.name,new $(!0,[]));F.set(Vr.dropComponent.name,new $(!0,[]));F.set(Vr.getCustomFunction.name,new $(!0,[]));F.set(Vr.setCustomFunction.name,new $(!0,[]));F.set(Vr.dropCustomFunction.name,new $(!0,[]));F.set(Vr.addComponent.name,new $(!0,[]));F.set(Vr.dropCustomFunctionProject.name,new $(!0,[]));F.set(Vr.packageComponent.name,new $(!0,[]));F.set(Vr.deployComponent.name,new $(!0,[]));F.set(XT.getRegistrationInfo.name,new $(!1,[]));F.set($u.userInfo.name,new $(!1,[]));F.set(Vu.describeAll.name,new $(!1,[]));F.set(d9,new $(!1,[]));F.set(f9,new $(!0,[]));F.set(_9,new $(!0,[]));F.set(df.CSV_DATA_LOAD,new $(!1,[mi,fo]));F.set(df.CSV_URL_LOAD,new $(!1,[mi,fo]));F.set(df.CSV_FILE_LOAD,new $(!1,[mi,fo]));F.set(df.IMPORT_FROM_S3,new $(!1,[mi,fo]));F.set(MP.EXPORT_TO_S3,new $(!0,[]));F.set(MP.EXPORT_LOCAL,new $(!0,[]));F.set(un.VALID_SQL_OPS_ENUM.DELETE,new $(!1,[LP]));F.set(un.VALID_SQL_OPS_ENUM.SELECT,new $(!1,[Ps]));F.set(un.VALID_SQL_OPS_ENUM.INSERT,new $(!1,[mi]));F.set(un.VALID_SQL_OPS_ENUM.UPDATE,new $(!1,[fo]));PP.exports={verifyPerms:m9,verifyPermsAst:h9,verifyBulkLoadAttributePerms:S9};function h9(e,t,r){if(Us.isEmptyOrZeroLength(e))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Us.isEmptyOrZeroLength(t))throw Ct.info("verify_perms_ast has an empty user parameter"),Sr(new Error);if(Us.isEmptyOrZeroLength(r))throw Ct.info("verify_perms_ast has a null operation parameter"),Sr(new Error);try{let n=new wP,s=new c9(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ct.info("No schemas defined in verifyPermsAst(), will not continue."),Sr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&DP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(c&&!u)return null;let _=AP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof l9.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 l=UP(t,r,o,n);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=ZT(t.role.permission,f,d[E]);jT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw Sr(n)}}a(h9,"verifyPermsAst");function m9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ct.info("null required parameter in verifyPerms"),Sr(new Error,Vt.DEFAULT_INVALID_REQUEST,Gu.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 wP;if(Us.isEmptyOrZeroLength(e.hdb_user.role)||Us.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Vt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(un.SYSTEM_SCHEMA_NAME)||s===un.SYSTEM_SCHEMA_NAME;if(l&&DP[r])throw Sr(new Error,Vt.DROP_SYSTEM,Gu.FORBIDDEN);if(u&&!l||_===!0&&(r===ln.createSchema.name||r===ln.dropSchema.name))return null;if(E9.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=AP.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===TP||r===gP){if(s===un.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Vt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===TP&&(!d[s]||!d[s][ku]))return c.handleInvalidItem(Vt.SCHEMA_NOT_FOUND(s));if(r===gP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][ku]))return c.handleInvalidItem(Vt.TABLE_NOT_FOUND(s,i))}}let f=UP(e.hdb_user,r,o,c,n);if(f)return f;if(F.get(r)&&F.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&un.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[un.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[un.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=p9(e),h=ZT(e.hdb_user.role.permission,s,i);return jT(E,h,r,i,s,c,n),c.getPermsResponse()}a(m9,"verifyPerms");function UP(e,t,r,n,s){if(Us.arrayHasEmptyValues([e,t,r]))throw Ct.info("hasPermissions has an invalid parameter"),Sr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||F.get(t).requires_su))return null;if(!F.get(t))throw Ct.info(`operation ${t} not found.`),Sr(new Error,Vt.OP_NOT_FOUND(t),Gu.BAD_REQUEST);if(F.get(t)&&F.get(t).requires_su)return Ct.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Vt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ku]===!1){n.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}}catch{n.addInvalidItem(Vt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ku]===!1)n.addInvalidItem(Vt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=F.get(t).perms;!Us.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ct.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=Vt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ct.error(E),Ct.error(f),Sr(CP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(UP,"hasPermissions");function jT(e,t,r,n,s,i,o){if(!e||!t)throw Ct.info("no attributes specified in checkAttributePerms."),Sr(new Error);let c=F.get(r).perms;if(!c||c==="")throw Ct.info(`no permissions found for ${r} in checkAttributePerms().`),Sr(new Error);if(Us.isEmptyOrZeroLength(t))return Ct.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ku]===!1){i.addInvalidItem(Vt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(un.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ps)throw Sr(new Error,Vt.SYSTEM_TIMESTAMP_PERMS_ERR,Gu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Vt.ATTR_NOT_FOUND(s,n,l),s,n)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,s,n,u)}a(jT,"checkAttributePerms");function p9(e){let t=new Set;try{if(e.action)return t;if(e.operation===un.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){Ct.info(r)}return t}a(p9,"getRecordAttributes");function ZT(e,t,r){let n=new Map;if(Us.isEmpty(e))return Ct.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{Ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(ZT,"getAttributePermissions");function S9(e,t,r,n,s,i,o){let c=new Set(i),u=ZT(e,n,s);jT(c,u,t,s,n,o,r)}a(S9,"verifyBulkLoadAttributePerms")});var hf=T((xfe,qP)=>{"use strict";qP.exports={evaluateSQL:D9,processAST:xP,convertSQLToAST:HP,checkASTPermissions:BP};var T9=rn(),vP=require("util"),g9=vP.callbackify(T9.insert),R9=tn().search,A9=RC().update,O9=vP.callbackify(A9),b9=OC().convertDelete,pi=require("alasql"),N9=ff(),Ef=V(),y9=X_(),I9=J(),Yu=M(),{hdb_errors:w9,handleHDBError:eg}=Z(),{HTTP_STATUS_CODES:tg}=w9;y9(pi);var C9=403,L9="There was a problem performing this insert. Please check the logs and try again.",rg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function D9(e,t){let r=e.parsed_sql_object;if(!r){r=HP(e.sql);let n,s=r.ast.statements[0];if(s instanceof pi.yy.Insert?n=s.into.databaseid:s instanceof pi.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof pi.yy.Update||s instanceof pi.yy.Delete?n=s.table.databaseid:Ef.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof pi.yy.Select)&&I9.isEmptyOrZeroLength(n))return t("No schema specified",null)}xP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(D9,"evaluateSQL");function BP(e,t){let r;try{r=N9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(BP,"checkASTPermissions");function HP(e){let t=new rg;if(!e)throw eg(new Error,"The 'sql' parameter is missing from the request body",tg.BAD_REQUEST);try{let r=e.trim(),n=pi.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
17
+ `);throw n[1]?eg(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,tg.BAD_REQUEST):eg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",tg.BAD_REQUEST)}return t}a(HP,"convertSQLToAST");function xP(e,t,r){try{let n=M9;if(!e.bypass_auth&&!t.permissions_checked){let i=BP(e,t);if(i&&i.length>0)return r(C9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Yu.VALID_SQL_OPS_ENUM.SELECT:n=R9,s=t.ast.statements[0];break;case Yu.VALID_SQL_OPS_ENUM.INSERT:n=U9;break;case Yu.VALID_SQL_OPS_ENUM.UPDATE:n=O9;break;case Yu.VALID_SQL_OPS_ENUM.DELETE:n=b9;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(xP,"processAST");function M9(e,t){Ef.info(e),t("unknown sql statement")}a(M9,"nullFunction");function U9({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=P9(i,e.values)}catch(o){return r(o)}g9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Ef.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(U9,"convertInsert");function P9(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]]=pi.compile(`SELECT ${s.toString()} AS [${Yu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Ef.error(r),new Error(L9)}}a(P9,"createDataObjects")});var ng=T((Ffe,GP)=>{"use strict";var{S3:v9,GetObjectCommand:B9}=require("@aws-sdk/client-s3");GP.exports={getFileStreamFromS3:H9,getS3AuthObj:FP};async function H9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await FP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new B9(r))).Body}a(H9,"getFileStreamFromS3");function FP(e,t,r){return new v9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(FP,"getS3AuthObj")});var mf=T((kfe,JP)=>{"use strict";var ig=tn(),x9=hf(),q9=ng(),{AsyncParser:F9,Transform:G9}=require("json2csv"),Wu=require("stream"),$r=J(),sg=require("fs-extra"),k9=require("path"),_n=V(),{promisify:$P}=require("util"),Ku=J(),{handleHDBError:Rt,hdb_errors:V9}=Z(),{HDB_ERROR_MSGS:Tr,HTTP_STATUS_CODES:At}=V9,{streamAsJSON:$9}=(Ch(),ee(rb)),{Upload:Y9}=require("@aws-sdk/lib-storage"),kP=["search_by_value","search_by_hash","sql","search_by_conditions"],VP=["json","csv"],YP="json",KP="csv",K9="Successfully exported JSON locally.",W9="Successfully exported CSV locally.",Q9=1e3,z9=ig.searchByHash,J9=ig.searchByValue,X9=$P(x9.evaluateSQL),j9=$P(Wu.finished);JP.exports={export_to_s3:r7,export_local:Z9,toCsvStream:WP};async function Z9(e){_n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QP(e);if(!$r.isEmpty(t))throw _n.error(t),Rt(new Error,t,At.BAD_REQUEST,void 0,void 0,!0);if($r.isEmpty(e.path))throw _n.error(Tr.MISSING_VALUE("path")),Rt(new Error,Tr.MISSING_VALUE("path"),At.BAD_REQUEST,void 0,void 0,!0);let r=($r.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(k9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=$r.buildFolderPath(e.path,r);await e7(e.path);let s=await zP(e);return await t7(n,e.format,s)}a(Z9,"export_local");async function e7(e){if(_n.trace("in confirmPath"),$r.isEmptyOrZeroLength(e))throw Rt(new Error,`Invalid path: ${e}`,At.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await sg.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,_n.error(n),Rt(new Error,n,At.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw _n.error(r),Rt(new Error,r,At.BAD_REQUEST,void 0,void 0,!0)}return!0}a(e7,"confirmPath");async function t7(e,t,r){if(_n.trace("in saveToLocal"),Ku.isEmptyOrZeroLength(e))throw Rt(new Error,Tr.INVALID_VALUE("file_path"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmptyOrZeroLength(t))throw Rt(new Error,Tr.INVALID_VALUE("Source format"),At.BAD_REQUEST,void 0,void 0,!0);if(Ku.isEmpty(r))throw Rt(new Error,Tr.NOT_FOUND("Data"),At.BAD_REQUEST,void 0,void 0,!0);if(t===YP){let n=sg.createWriteStream(e);return $9(r).pipe(n),await j9(n),{message:K9,path:e}}else if(t===KP){let n=sg.createWriteStream(e),s=Wu.Readable.from(r),i={},o={objectMode:!0};return await new F9(i,o).fromInput(s).toOutput(n).promise(!1),{message:W9,path:e}}throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST)}a(t7,"saveToLocal");async function r7(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rt(new Error,Tr.MISSING_VALUE("S3 object"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rt(new Error,Tr.MISSING_VALUE("aws_access_key_id"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rt(new Error,Tr.MISSING_VALUE("aws_secret_access_key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.bucket))throw Rt(new Error,Tr.MISSING_VALUE("bucket"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.key))throw Rt(new Error,Tr.MISSING_VALUE("key"),At.BAD_REQUEST);if($r.isEmptyOrZeroLength(e.s3.region))throw Rt(new Error,Tr.MISSING_VALUE("region"),At.BAD_REQUEST);let t=QP(e);if(!$r.isEmpty(t))throw Rt(new Error,t,At.BAD_REQUEST);_n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await zP(e)}catch(u){throw _n.error(u),u}let n,s=await q9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Wu.PassThrough;if(e.format===KP){i=e.s3.key+".csv";let u=WP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===YP){i=e.s3.key+".json";let u=new Wu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%Q9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw Rt(new Error,Tr.INVALID_VALUE("format"),At.BAD_REQUEST);return new Y9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(r7,"export_to_s3");function WP(e){let t=Wu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},n={objectMode:!0},s=new G9(r,n);return t.pipe(s)}a(WP,"toCsvStream");function QP(e){if(_n.trace("in exportCoreValidation"),$r.isEmpty(e.format))return"format missing";if(VP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${VP.join(", ")}`;let t=e.search_operation.operation;if($r.isEmpty(t))return"search_operation.operation missing";if(kP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${kP.join(", ")}`}a(QP,"exportCoreValidation");async function zP(e){_n.trace("in getRecords");let t,r;if(Ku.isEmpty(e.search_operation)||Ku.isEmptyOrZeroLength(e.search_operation.operation))throw Rt(new Error,Tr.INVALID_VALUE("Search operation"),At.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=J9;break;case"search_by_hash":t=z9;break;case"search_by_conditions":t=ig.searchByConditions;break;case"sql":t=X9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_n.error(r),Rt(new Error,r,At.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(zP,"getRecords")});var nv={};Ve(nv,{contentTypes:()=>lg,findBestSerializer:()=>Sf,getDeserializer:()=>ho,registerContentHandlers:()=>_g,serialize:()=>Tf,serializeMessage:()=>hi});function n7(e){try{return e?.[0]===123?ug(e):e}catch{return e}}function _g(e){e.register(i7,{serializers:[{regex:/^application\/json$/,serializer:mc},{regex:/^application\/cbor$/,serializer:function(t){return new Eo.EncoderStream(zu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?pf.Readable.from((0,is.encodeIter)(t,zu)):(0,is.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,og.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,is.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Eo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Sf(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=$t.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($t.keys()).join(", "))}};n=$t.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Tf(e,t,r){let n=jP&&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=Sf(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);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,vs.createBrotliCompress)({params:{[vs.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?vs.constants.BROTLI_MODE_TEXT:vs.constants.BROTLI_MODE_GENERIC,[vs.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e)}return n&&s?.length>jP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,vs.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function hi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Qu(e);let r=t.serialize;if(r)return r(e);let n=Sf(t);return r=t.serialize=n.serializer.serialize,r(e)}function o7(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 ho(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=$t.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=$t.get(e)?.deserialize||ZP(e,n);return o=>o7(o).then(i)}return e&&$t.get(e)?.deserialize||ZP(e,n)}function ZP(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 ug(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function a7(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 og,is,Eo,vs,pf,ev,ag,cg,tv,Qu,ug,zu,$t,lg,XP,rv,s7,i7,jP,Sa=Ae(()=>{Ch();og=v(mf()),is=require("msgpackr"),Eo=require("cbor-x"),vs=require("zlib"),pf=require("stream");nr();ev=require("../../index"),ag=v(j()),cg=v(M()),tv=ag.default.get(cg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Qu=tv?Mi:JSON.stringify,ug=tv?wh:JSON.parse,zu={useRecords:!1,useToJSON:!0},$t=new Map,lg=$t;lt.contentTypes=lg;(0,ev._assignPackageExport)("contentTypes",lg);$t.set("application/json",{serializeStream:mc,serialize:Qu,deserialize:ug,q:.8});XP=new Eo.Encoder(zu);$t.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Eo.EncoderStream(zu).end(e)},serialize:XP.encode,deserialize:XP.decode,q:1});$t.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?pf.Readable.from((0,is.encodeIter)(e,zu)):(0,is.pack)(e)},serialize:is.pack,deserialize:is.unpack,q:.9});$t.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,og.toCsvStream)(e)},q:.1});$t.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});$t.set("text/event-stream",{serializeStream:function(e){return pf.Readable.from(a7(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+`
18
+ `),e.data){let r=e.data;typeof r=="object"&&(r=Qu(r)),t+="data: "+r+`
19
19
  `}return e.id&&(t+="id: "+e.id+`
20
20
  `),e.retry&&(t+="retry: "+e.retry+`
21
21
  `),t+`
22
- `}else return typeof e=="object"?`data: ${Ku(e)}
22
+ `}else return typeof e=="object"?`data: ${Qu(e)}
23
23
 
24
24
  `:`data: ${e}
25
25
 
26
- `},compressible:!1,q:.8});Vt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});ev={type:"application/json",serializeStream:hc,serialize:Ku,deserialize:I9,q:.8};Vt.set("*/*",ev);Vt.set("",ev);a(I9,"tryJSONParse");a(sg,"registerContentHandlers");w9=require("fastify-plugin"),C9=w9(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=gf(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(gf,"findBestSerializer");JP=ZT.default.get(eg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Rf,"serialize");a(hi,"serializeMessage");a(L9,"streamToBuffer");a(lo,"getDeserializer");a(XP,"deserializerUnknownType");a(D9,"transformIterable")});var Af={};ze(Af,{start:()=>P9});async function M9(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&jl(e);let n=new io;try{e.responseHeaders=n;let i=e.url.slice(1),o=ig.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Ke(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=lo(r["content-type"],!0)(e.body)}catch(p){throw new zu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new zu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new zu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,ng.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){U9[0]=f;let p=String.fromCharCode(34,($t[0]&63)+62,($t[0]>>6)+($t[1]<<2&63)+62,($t[1]>>4)+($t[2]<<4&63)+62,($t[2]>>2)+62,($t[3]&63)+62,($t[3]>>6)+($t[4]<<2&63)+62,($t[4]>>4)+($t[5]<<4&63)+62,($t[5]>>2)+62,($t[6]&63)+62,($t[6]>>6)+($t[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),ng.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Rf(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?_o.warn(i):_o.info(i):_o.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Rf(i.contentType?i:i.toString(),e,o),o}}function P9(e){ng=e,!rv&&(rv=!0,ig=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return M9(t,r)}),e.server.ws(async(t,r,s)=>{Qu++;let n=new Is;sv||(sv=!0,tu(l=>{Qu>0&&l.push({metric:"ws-connections",connections:Qu,byThread:!0})}));let i;t.on("error",l=>{i=!0,_o.warn(l)});let o;t.on("message",a(function(d){o||(o=lo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{Qu--,us(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=ig.getMatch(u);if(us(!!_,"connection","ws","connect"),!_)t.send(hi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Gr(h=>({count:h.count,total:Qu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ke(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=hi(E.value,r);t.send(h),Gr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var _o,zu,$t,U9,ng,rv,ig,sv,Qu,nv=ge(()=>{pa();ni();_o=M(q()),zu=M(Z());Zl();cc();Ci();IT();$t=new Uint8Array(8),U9=new Float64Array($t.buffer,0,1),ng={};a(M9,"http");Qu=0;a(P9,"start")});var og=T((ofe,iv)=>{var{recordAction:Of,recordActionBinary:v9}=(ni(),te(id)),B9=require("fastify-plugin"),H9=200;iv.exports=B9(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Of(o,"duration",_,d,l),v9(n.raw.statusCode<400,"success",_,d,l);let f=H9;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Of(performance.now()-c,"transfer",_,d,l),Of(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Of(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var lg=T((afe,lv)=>{var wf=require("clone"),Cf=je(),x9=z(),yf=w(),F9=q(),bf=require("fs"),ag=require("joi"),{string:If}=ag.types(),{hdb_errors:G9,handleHDBError:Ju}=Z(),{HDB_ERROR_MSGS:q9,HTTP_STATUS_CODES:Nf}=G9,{common_validators:ba}=Qs(),ov=1e9,av=" is required",k9=["insert","update","upsert"],cg={database:{presence:!1,format:ba.schema_format,length:ba.schema_length},schema:{presence:!1,format:ba.schema_format,length:ba.schema_length},table:{presence:!0,format:ba.schema_format,length:ba.schema_length},action:{inclusion:{within:k9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},V9={schema:If.required(),table:If.required(),action:If.valid("insert","update","upsert")},{AWS_ACCESS_KEY:$9,AWS_SECRET:Y9,AWS_BUCKET:K9,AWS_FILE_KEY:W9,REGION:Q9}=yf.S3_BUCKET_AUTH_KEYS,z9={s3:{presence:!0},[`s3.${$9}`]:{presence:!0,type:"String"},[`s3.${Y9}`]:{presence:!0,type:"String"},[`s3.${K9}`]:{presence:!0,type:"String"},[`s3.${W9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Q9}`]:{presence:!0,type:"String"}},cv=wf(cg);cv.data.presence={message:av};var uv=wf(cg);uv.file_path.presence={message:av};var J9=Object.assign(wf(cg),z9),ug=wf(V9);ug.csv_url=If.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();ug.passthrough_headers=ag.object();function X9(e){let t=Cf.validateObject(e,cv);return Lf(e,t)}a(X9,"dataObject");function j9(e){let t=Cf.validateBySchema(e,ag.object(ug));return Lf(e,t)}a(j9,"urlObject");function Z9(e){let t=Cf.validateObject(e,uv);return Lf(e,t)}a(Z9,"fileObject");function e7(e){let t=Cf.validateObject(e,J9);return Lf(e,t)}a(e7,"s3FileObject");function Lf(e,t){if(!t){let r=x9.checkGlobalSchemaTable(e.schema,e.table);if(r)return Ju(new Error,r,Nf.BAD_REQUEST);if(e.operation===yf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{bf.accessSync(e.file_path,bf.constants.R_OK|bf.constants.F_OK)}catch(s){return s.code===yf.NODE_ERROR_CODES.ENOENT?Ju(s,`No such file or directory ${s.path}`,Nf.BAD_REQUEST):s.code===yf.NODE_ERROR_CODES.EACCES?Ju(s,`Permission denied ${s.path}`,Nf.BAD_REQUEST):Ju(s)}try{let s=bf.statSync(e.file_path).size;if(s>ov)return Ju(new Error,q9.MAX_FILE_SIZE_ERR(s,ov),Nf.BAD_REQUEST)}catch(s){F9.error(s),console.error(s)}}}return t}a(Lf,"postValidateChecks");lv.exports={dataObject:X9,urlObject:j9,fileObject:Z9,s3FileObject:e7}});var _g=T((ufe,_v)=>{"use strict";var Xu=q(),Df=w();async function t7(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Df.OPERATIONS_ENUM.INSERT||t.operation===Df.OPERATIONS_ENUM.UPDATE||t.operation===Df.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Df.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Xu.info(i.message),i):i.http_resp_msg?(Xu.error(`Error calling operation: ${e.name}`),Xu.error(i.http_resp_msg),i):(Xu.error(`Error calling operation: ${e.name}`),Xu.error(i),i)}}a(t7,"callOperationFunctionAsAwait");_v.exports={callOperationFunctionAsAwait:t7}});var fv=T((_fe,dv)=>{"use strict";var dg=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},fg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};dv.exports={BulkLoadFileObject:dg,BulkLoadDataObject:fg}});var hv=T((ffe,Ev)=>{"use strict";var Eg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Ev.exports=Eg});var gg=T((Tfe,Uv)=>{"use strict";var Uf=cs(),Pf=lg(),r7=require("needle"),xs=w(),hfe=et(),Na=z(),{handleHDBError:rt,hdb_errors:bv}=Z(),{HTTP_STATUS_CODES:Yt,HDB_ERROR_MSGS:wt,CHECK_LOGS_WRAPPER:Eo}=bv,ya=q(),hg=require("papaparse");Na.promisifyPapaParse();var Fs=require("fs-extra"),s7=require("path"),{chain:mv}=require("stream-chain"),pv=require("stream-json/streamers/StreamArray"),Sv=require("stream-json/utils/Batch"),Tv=require("stream-chain/utils/comp"),{finished:gv}=require("stream"),n7=j(),Nv=_g(),i7=zT(),{BulkLoadFileObject:pg,BulkLoadDataObject:o7}=fv(),Sg=FT(),{verifyBulkLoadAttributePerms:yv}=hf(),mfe=hv(),pfe=mt(),Sfe=Rn(),{databases:a7}=(Se(),te(Ge)),{coerceType:c7}=(vf(),te(Rg)),Rv="No records parsed from csv file.",fo=`${n7.get("HDB_ROOT")}/tmp`,{schema_regex:u7}=Qs(),Av=1024*1024*2,Ov=5e3,l7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Uv.exports={csvDataLoad:_7,csvURLLoad:d7,csvFileLoad:f7,importFromS3:E7};async function _7(e,t){let r=Pf.dataObject(e);if(r)throw rt(r,r.message,Yt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=Cv(e.schema,e.table),i=hg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:mg.bind(null,n),dynamicTyping:!1}),o=new Sg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&yv(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 rt(new Error,c,Yt.BAD_REQUEST,void 0,void 0,!0);let u=new o7(e.action,e.schema,e.table,i.data);return s=await Nv.callOperationFunctionAsAwait(Lv,u,null),s.message===Rv?Rv:Dv(s.records,s.number_written)}catch(n){throw ho(n)}}a(_7,"csvDataLoad");async function d7(e){let t=Pf.urlObject(e);if(t)throw rt(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${fo}/${r}`;try{await h7(e,r)}catch(n){throw ya.error(wt.DOWNLOAD_FILE_ERR(r)+" - "+n),rt(n,Eo(wt.DOWNLOAD_FILE_ERR(r)))}try{let n=new pg(this.job_operation_function.name,e.action,e.schema,e.table,s,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Tg(n);return await Mf(s),i}catch(n){throw await Mf(s),ho(n)}}a(d7,"csvURLLoad");async function f7(e){let t=Pf.fileObject(e);if(t)throw rt(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=new pg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Tg(r)}catch(s){throw ho(s)}}a(f7,"csvFileLoad");async function E7(e){let t=Pf.s3FileObject(e);if(t)throw rt(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=s7.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${fo}/${n}`;let i=new pg(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await m7(n,e);let o=await Tg(i);return await Mf(r),o}catch(s){throw await Mf(r),ho(s)}}a(E7,"importFromS3");async function h7(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await r7("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw rt(s,n,s.statusCode,xs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}S7(r,e.csv_url),await p7(t,r.raw)}a(h7,"downloadCSVFile");async function m7(e,t){try{let r=`${fo}/${e}`;await Fs.mkdirp(fo),await Fs.writeFile(`${fo}/${e}`,"",{flag:"a+"});let s=await Fs.createWriteStream(r),n=await i7.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){ya.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ya.error(wt.S3_DOWNLOAD_ERR+" - "+r),rt(r,Eo(wt.S3_DOWNLOAD_ERR))}}a(m7,"downloadFileFromS3");async function p7(e,t){try{await Fs.mkdirp(fo),await Fs.writeFile(`${fo}/${e}`,t)}catch(r){throw ya.error(wt.WRITE_TEMP_FILE_ERR),rt(r,Eo(wt.DEFAULT_BULK_LOAD_ERR))}}a(p7,"writeFileToTempFolder");async function Mf(e){if(e)try{await Fs.access(e),await Fs.unlink(e)}catch{ya.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Mf,"deleteTempFile");function S7(e,t){if(e.statusCode!==bv.HTTP_STATUS_CODES.OK)throw rt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Yt.BAD_REQUEST);if(!l7[e.headers["content-type"]])throw rt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Yt.BAD_REQUEST);if(!e.raw)throw rt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Yt.BAD_REQUEST)}a(S7,"validateURLResponse");async function Tg(e){try{let t;switch(e.file_type){case xs.VALID_S3_FILE_TYPES.CSV:t=await T7(e);break;case xs.VALID_S3_FILE_TYPES.JSON:t=await g7(e);break;default:throw rt(new Error,wt.DEFAULT_BULK_LOAD_ERR,Yt.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_FILE_EXT_ERR(e))}return Dv(t.records,t.number_written)}catch(t){throw ho(t)}}a(Tg,"fileLoad");async function Iv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Uf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&yv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=rt(c);r(u)}}a(Iv,"validateChunk");async function wv(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Na.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Na.isEmpty(c)&&!Na.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await Nv.callOperationFunctionAsAwait(Lv,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=rt(c,Eo(wt.INSERT_CSV_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_CSV_ERR+" - "+c);r(u)}}a(wv,"insertChunk");async function T7(e){let t={records:0,number_written:0},r=Cv(e.schema,e.table);try{let s=new Sg,n=Fs.createReadStream(e.file_path,{highWaterMark:Av});n.setEncoding("utf8"),await hg.parsePromise(n,Iv.bind(null,e,s),mg.bind(null,r));let i=s.getPermsResponse();if(i)throw rt(new Error,i,Yt.BAD_REQUEST);return n=Fs.createReadStream(e.file_path,{highWaterMark:Av}),n.setEncoding("utf8"),await hg.parsePromise(n,wv.bind(null,e,t),mg.bind(null,r)),n.destroy(),t}catch(s){throw rt(s,Eo(wt.PAPA_PARSE_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.PAPA_PARSE_ERR+s)}}a(T7,"callPapaParse");function Cv(e,t){let r=a7[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>c7(i,n));return s}a(Cv,"createTransformMap");function mg(e,t,r){let s=e.get(r);return s?s(t):Na.autoCast(t)}a(mg,"typeFunction");async function g7(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Sg,n=mv([Fs.createReadStream(e.file_path,{encoding:"utf-8"}),pv.withParser(),c=>c.value,new Sv({batchSize:Ov}),Tv(async c=>{await Iv(e,s,r,c)})]);await new Promise((c,u)=>{gv(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw rt(new Error,i,Yt.BAD_REQUEST);let o=mv([Fs.createReadStream(e.file_path,{encoding:"utf-8"}),pv.withParser(),c=>c.value,new Sv({batchSize:Ov}),Tv(async c=>{await wv(e,t,r,c)})]);return await new Promise((c,u)=>{gv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw rt(s,Eo(wt.INSERT_JSON_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.INSERT_JSON_ERR+s)}}a(g7,"insertJson");async function Lv(e){let t={};try{e.data&&e.data.length>0&&R7(e.data[0])?t=await A7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ya.info(t.message))}catch(r){throw ho(r)}return t}a(Lv,"callBulkFileLoad");function R7(e){let t=Object.keys(e);for(let r of t)if(!u7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(R7,"validateColumnNames");async function A7(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Uf.insert;break;case"update":i=Uf.update;break;case"upsert":i=Uf.upsert;break;default:throw rt(new Error,wt.INVALID_ACTION_PARAM_ERR(s),Yt.BAD_REQUEST,xs.LOG_LEVELS.ERROR,wt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Na.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw ho(o)}}a(A7,"bulkFileLoad");function Dv(e,t){return`successfully loaded ${t} of ${e} records`}a(Dv,"buildResponseMsg");function ho(e){return rt(e,Eo(wt.DEFAULT_BULK_LOAD_ERR),Yt.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,wt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ho,"buildTopLevelErrMsg")});var Pv=T((Rfe,Mv)=>{"use strict";var Ag=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Mv.exports=Ag});var Hv=T((Ofe,Bv)=>{"use strict";var O7=w(),vv=require("moment"),b7=require("uuid").v4,Og=class{static{a(this,"JobObject")}constructor(){this.id=b7(),this.type=void 0,this.start_datetime=vv().valueOf(),this.created_datetime=vv().valueOf(),this.end_datetime=void 0,this.status=O7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Bv.exports=Og});var Hf=T((Nfe,Vv)=>{"use strict";var N7=require("uuid").v4,Gv=cs(),qv=as(),y7=js(),I7=jo(),w7=Pv(),st=w(),C7=Hv(),L7=dS(),Ss=q(),D7=wc(),Ia=z(),{promisify:U7}=require("util"),mo=require("moment"),M7=pf(),Bf=lg(),xv=pm(),{deleteTransactionLogsBeforeValidator:P7}=PT(),{handleHDBError:v7,hdb_errors:B7}=Z(),{HTTP_STATUS_CODES:H7}=B7,Fv=qv.searchByValue,x7=qv.searchByHash,F7=Gv.insert,G7=U7(M7.evaluateSQL),q7=Gv.update;Vv.exports={addJob:$7,updateJob:K7,handleGetJob:k7,handleGetJobsByStartDate:V7,getJobById:kv};async function k7(e){try{let t=await kv(e.id);return Ia.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Ss.error("There was an error getting job",t),new Error(r)}}a(k7,"handleGetJob");async function V7(e){try{let t=await Y7(e);if(Ss.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=mo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=mo(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 Ss.error(r),new Error(r)}}a(V7,"handleGetJobsByStartDate");async function $7(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ia.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ss.info(l),t.error=l,t}if(!st.JOB_TYPE_ENUM[e.operation])return Ss.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case st.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Bf.fileObject(e);break;case st.OPERATIONS_ENUM.CSV_URL_LOAD:s=Bf.urlObject(e);break;case st.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Bf.dataObject(e);break;case st.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Bf.s3FileObject(e);break;case st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=xv(e,"date");break;case st.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=xv(e,"timestamp");break;case st.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=P7(e);break;default:break}if(s)throw v7(s,s.message,H7.BAD_REQUEST,void 0,void 0,!0);let n=new C7;n.type=e.operation===st.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?st.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new y7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await Fv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ss.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=N7();try{o=await Fv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ss.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ss.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new D7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await F7(u)}catch(l){return Ss.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ss.trace(l)}return t}a($7,"addJob");async function Y7(e){let t=mo(e.from_date,mo.ISO_8601),r=mo(e.to_date,mo.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new w7(s,e.hdb_user);try{return await G7(n)}catch(i){throw Ss.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(Y7,"getJobsInDateRange");async function kv(e){if(Ia.isEmptyOrZeroLength(e))return Ia.errorizeMessage("Invalid job ID specified.");let t=new I7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await x7(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ss.error(s),Ia.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(kv,"getJobById");async function K7(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ia.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===st.JOB_STATUS_ENUM.COMPLETE||e.status===st.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=mo().valueOf());let t=new L7(st.SYSTEM_SCHEMA_NAME,st.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await q7(t),r}a(K7,"updateJob")});var zv=T((Ife,Qv)=>{"use strict";var $v=z(),Rr=w(),W7=require("moment"),xf=gg(),Ff=q(),Yv=Hf(),Kv=Sf(),Wv=qi(),Q7=at(),z7=_f(),bg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function J7(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($v.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if($v.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await Bn(e,xf.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await Bn(e,xf.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await Bn(e,xf.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await Bn(e,xf.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await Bn(e,Kv.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await Bn(e,Kv.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await Bn(e,Wv.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await Bn(e,Wv.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Bn(e,z7.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(J7,"parseMessage");async function Bn(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=W7().valueOf(),await Yv.updateJob(e.job),await X7(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Ff.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ff.error(s),e.job.message=s,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await Yv.updateJob(e.job)}catch(n){throw Ff.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Bn,"runJob");async function X7(e){Ff.trace("launching job thread:",e),Q7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(X7,"launchJobThread");Qv.exports={parseMessage:J7,RunnerMessage:bg}});var Xv=T((Cfe,Jv)=>{"use strict";var Ng=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Jv.exports=Ng});var Ug=T((Dfe,Dg)=>{"use strict";var Vf=as(),wg=pf(),Gf=gg(),Hn=fd(),qf=Bi(),Zu=qi(),j7=Xp(),ju=Br(),kf=oS(),Kt=MT(),Ct=q(),Z7=uS(),eee=Cd(),jv=KS(),tee=Dd(),ree=WS(),see=QS(),nee=XS(),iee=ZS(),yg=rT(),Zv=Sf(),oee=hf(),Cg=Hf(),P=w(),{hdb_errors:tl,handleHDBError:el}=Z(),{HTTP_STATUS_CODES:e0}=tl,Ig=aT(),t0=Qd(),l0=require("util"),wa=cs(),aee=An(),cee=ua(),r0=zv(),s0=fu(),n0=(Zd(),te(Mu)),i0=Cr(),o0=_f(),a0=nf(),{setServerUtilities:uee}=(vf(),te(Rg)),{CONTEXT:lee}=(ws(),te(uh)),{_assignPackageExport:_ee}=require("../../index"),{transformReq:dee}=z(),{server:fee}=(es(),te(Io)),Eee=_g(),c0=Vf.searchByHash,hee=Vf.searchByValue,mee=l0.promisify(Vf.search),pee=l0.promisify(wg.evaluateSQL),See={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},G=Xv();async function _0(e,t){try{if(e.body.operation!=="read_log"&&(Ct.log_level===P.LOG_LEVELS.INFO||Ct.log_level===P.LOG_LEVELS.DEBUG||Ct.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ct.info(o)}}catch(s){Ct.error(s)}let r=await Eee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return See[e.body.operation]&&aee.setSchemaDataToGlobal(s=>{s&&Ct.error(s)}),r}a(_0,"processLocalTransaction");var u0=gee();Dg.exports={chooseOperation:d0,getOperationFunction:f0,operation:Lg,processLocalTransaction:_0};uee(Dg.exports);fee.operation=Lg;function d0(e){let t;try{t=f0(e)}catch(n){throw Ct.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=wg.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=wg.checkASTPermissions(e,i);if(o)throw Ct.error(`${e0.FORBIDDEN} from operation ${e.operation}`),Ct.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),el(new Error,o,tl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=oee.verifyPerms(i,n);if(o)throw Ct.error(`${e0.FORBIDDEN} from operation ${e.operation}`),Ct.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),el(new Error,o,tl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw el(n,"There was an error when trying to choose an operation path")}return r}a(d0,"chooseOperation");function f0(e){if(Ct.trace(`getOperationFunction with operation: ${e.operation}`),u0.has(e.operation))return u0.get(e.operation);throw el(new Error,tl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),tl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(f0,"getOperationFunction");_ee("operation",Lg);function Lg(e,t){e.hdb_user=this[lee]?.user,e.bypass_auth=!t;let r=d0(e);return _0({body:e},r)}a(Lg,"operation");async function Tee(e){Ct.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await wa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await wa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await wa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Zu.deleteRecord(i);break;default:Ct.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Ct.info("Invalid operation in transaction"),Ct.error(o)}}a(Tee,"catchup");async function un(e){dee(e);let t,r;try{r=await Cg.addJob(e),t=r.createdJob,Ct.info("addJob result",r);let s=new r0.RunnerMessage(t,e);return await r0.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ct.error(n),el(s,n)}}a(un,"executeJob");function gee(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new G(wa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new G(wa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new G(wa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new G(Vf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new G(c0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new G(c0)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new G(hee)),e.set(P.OPERATIONS_ENUM.SEARCH,new G(mee)),e.set(P.OPERATIONS_ENUM.SQL,new G(pee)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new G(un,Gf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new G(un,Gf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new G(un,Gf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new G(un,Gf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new G(Hn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new G(Hn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new G(Hn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new G(Hn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new G(Hn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new G(Hn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new G(Hn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new G(Hn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new G(qf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new G(qf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new G(qf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new G(qf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new G(Zu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new G(ju.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new G(ju.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new G(ju.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new G(ju.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new G(kf.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new G(kf.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new G(kf.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new G(kf.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new G(ju.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new G(Z7)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new G(eee)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new G(jv)),e.set(P.OPERATIONS_ENUM.SET_NODE_REPLICATION,new G(jv)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new G(tee)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new G(ree)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new G(see)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new G(i0.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new G(nee.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new G(iee)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new G(yg.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new G(yg.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new G(yg.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new G(un,Zv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new G(un,Zu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new G(un,Zu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new G(un,Zv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new G(Cg.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new G(Cg.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new G(Ig.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new G(Ig.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new G(Ig.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new G(t0.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new G(t0.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new G(Tee)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new G(cee.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new G(un,Zu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new G(j7)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new G(s0.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new G(s0.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new G(n0.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new G(n0.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new G(i0.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new G(Kt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new G(Kt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new G(Kt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new G(Kt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new G(Kt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new G(Kt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new G(Kt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new G(Kt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new G(Kt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new G(Kt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new G(Kt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new G(Kt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new G(Kt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new G(Kt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new G(Kt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new G(Kt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new G(o0.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new G(un,o0.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new G(a0.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new G(a0.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new G(Hn.getBackup)),e}a(gee,"initializeOperationFunctionMap")});var Yf=T((Mfe,m0)=>{"use strict";var Mg=w(),Ree=z(),rl=q(),{handleHDBError:Pg,hdb_errors:$f}=Z(),{isMainThread:Aee}=require("worker_threads"),{Readable:Oee}=require("stream"),E0=require("os"),bee=require("util"),Nee=gS(),yee=bee.promisify(Nee.authorize),h0=Ug(),{createGzip:Iee,constants:wee}=require("zlib");function Cee(e){let t=`Found an uncaught exception with message: ${e.message}. ${E0.EOL}Stack: ${e.stack} ${E0.EOL}Terminating ${Aee?"HDB":"thread"}.`;console.error(t),rl.fatal(t),process.exit(1)}a(Cee,"handleServerUncaughtException");function Lee(e,t,r){if(rl[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:$f.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Lee,"serverErrorHandler");function Dee(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Pg(new Error,"Invalid JSON.",$f.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Ree.isEmpty(e.body.operation)){let s=Pg(new Error,"Request body must include an 'operation' property.",$f.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Dee,"reqBodyValidationHandler");function Uee(e,t,r){let s;e.body.operation!==Mg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Mg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Mg.OPERATIONS_ENUM.LOGOUT?yee(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{rl.warn(n),rl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Pg(n,i,$f.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(Uee,"authHandler");async function Mee(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=h0.chooseOperation(e.body);let n=await h0.processLocalTransaction(e,s);if(n instanceof Oee&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(Iee({level:wee.Z_BEST_SPEED})))}return n}catch(n){throw rl.error(n),n}}a(Mee,"handlePostRequest");m0.exports={authHandler:Uee,handlePostRequest:Mee,handleServerUncaughtException:Cee,serverErrorHandler:Lee,reqBodyValidationHandler:Dee}});var g0=T((vfe,T0)=>{"use strict";var Pee=require("fastify-plugin"),{handlePostRequest:p0,authHandler:vee,reqBodyValidationHandler:Bee}=Yf();async function Hee(e){e.decorate("hdbCore",{preValidation:[Bee,vee],request:t=>S0(p0(t,response)),requestWithoutAuthentication:(t,r)=>S0(p0(t,r,!0))})}a(Hee,"hdbCore");async function S0(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(S0,"convertAsyncIterators");T0.exports=Pee(Hee)});var O0=T((xfe,A0)=>{"use strict";var Hfe=require("fs"),vg=j();vg.initSync();var{CONFIG_PARAMS:R0}=w(),xee=1024*1024*1024;function Fee(e){let t=vg.get(R0.HTTP_TIMEOUT),r=vg.get(R0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:xee,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Fee,"getServerOptions");A0.exports=Fee});var y0=T((Gfe,N0)=>{"use strict";var Bg=j();Bg.initSync();var{CONFIG_PARAMS:b0}=w();function Gee(){let e=Bg.get(b0.HTTP_CORSACCESSLIST),t=Bg.get(b0.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Gee,"getCORSOptions");N0.exports=Gee});var C0=T((kfe,w0)=>{"use strict";var I0=j();I0.initSync();var qee=w();function kee(){return I0.get(qee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(kee,"getHeaderTimeoutConfig");w0.exports=kee});var Hg={};ze(Hg,{customFunctionsServer:()=>Yee,ready:()=>Qee,start:()=>$ee});function $ee(e){let t=e.securePort>0;return{async handleFile(r,s,n,i){xn||(xn=$0(t),Ot.http((await xn).server));let o=await xn,c=(0,D0.dirname)(n),u=s.replace(/\/routes\/.*/g,"");if(u.startsWith("/")&&(u=u.slice(1)),!L0.has(c)){L0.add(c);try{o.register(Wee(c,u))}catch(_){if(_.message==="Root plugin has already booted")ke.warn(`Could not load root fastify route for ${n}, this may require a restart to install properly`);else throw _}}}}}async function Yee(){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 Kee();let e=H0.get(x0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=xn=await $0(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 Kee(){try{ke.info("Custom Functions starting configuration."),await F0.setUsersToGlobal(),ke.info("Custom Functions completed configuration.")}catch(e){ke.error(e)}}function Wee(e,t){return async function(r){try{ke.info("Custom Functions starting buildRoutes"),ke.trace("Loading fastify routes folder "+e),(0,U0.existsSync)(e)&&r.register(B0.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?ke.error(n.message):n&&ke.error(n),o()})}catch(s){ke.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function $0(e){ke.info("Custom Functions starting buildServer.");let t=(0,G0.default)(e),r=(0,M0.default)(t);r.server.headersTimeout=(0,k0.default)(),r.setErrorHandler(V0.serverErrorHandler);let s=(0,q0.default)();return s&&r.register(P0.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(v0.default),await r.register(Vee),await r.after(),sg(r),ke.info("Custom Functions completed buildServer."),r}function Qee(){if(xn)return xn.then?xn.then(e=>e.ready()):xn.ready()}var D0,U0,M0,P0,v0,B0,H0,x0,ke,Vee,F0,G0,q0,k0,V0,xn,L0,Y0=ge(()=>{D0=require("path"),U0=require("fs"),M0=M(require("fastify")),P0=M(require("@fastify/cors")),v0=M(og()),B0=M(require("@fastify/autoload")),H0=M(j()),x0=M(w()),ke=M(q()),Vee=M(g0()),F0=M(Br()),G0=M(O0()),q0=M(y0()),k0=M(C0()),V0=M(Yf());pa();es();L0=new Set;a($ee,"start");a(Yee,"customFunctionsServer");a(Kee,"setUp");a(Wee,"buildRouteFolder");a($0,"buildServer");a(Qee,"ready")});var xg={};ze(xg,{start:()=>zee});function zee(e){return{handleDirectory(t,r){if(t==="/"){let s=(0,J0.default)(r,e);return e.server.http(async(n,i)=>{if(!n.isWebSocket)return new Promise(o=>s(n._nodeRequest,n._nodeResponse,()=>{o(i(n))}))}),!0}},handleFile(t,r,s){W0||(W0=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=K0.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Q0.default)(n,(0,z0.realpathSync)(o))}}return i(n)},{runFirst:!0})),K0.set(r,s)}}}var Q0,z0,J0,K0,W0,X0=ge(()=>{Q0=M(require("send")),z0=require("fs"),J0=M(require("serve-static")),K0=new Map;a(zee,"start")});function jee(e,t=1,r){if(Fg++,(0,po.startWorker)("server/threads/threadServer.js",{name:Qf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Qf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});Xee.push(n),await n,Ca.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Wf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ca.indexOf(s);o>-1&&Ca.splice(o,1)}if(a(i,"removeWorker"),La){let o=La;La=[];for(let c of o)tB[c.localPort](null,c)}}}),r){let s=setInterval(()=>{Gg?Gg=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,po.shutdownWorkers)(),Fg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function rB(e=0,t){if(typeof e=="string")try{(0,zf.existsSync)(e)&&(0,zf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Zee:r=ete(t):r=kg;let s=(0,Da.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=tB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Gg=!0,r(o,(c,u)=>{if(!c){if(j0){let l=o._socket||new Da.Socket({handle:o,writable:!0,readable:!0});j0.deliverSocket(l,e,u),l.resume()}else Fg>0?(La.length===0&&setTimeout(()=>{La.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,La.push(o)):(console.log("start up a dynamic thread to handle request"),jee(0));Gr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Da.Socket({handle:o,writable:!0,readable:!0});nte(l,c,e)}Gr(!0,"socket-routed")})};let n=jc();qg.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function kg(e,t){let r,s=0;for(let n of Ca){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Kf)return Kf=i,t(r);s=i}Kf=0,t(r)}function Zee(e,t){let r={};e.getpeername(r);let s=r.address,n=Ua.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);kg(e,o=>{Ua.set(s,{worker:o,lastUsed:i}),t(o)})}function ete(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Da.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ua.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);kg(s,d=>{Ua.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function rte(){Kf=0;for(let e of Ca)e.expectedIdle=e.recentELU.idle+tte,e.requests=1;Ca.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function nte(e,t,r){let s=ste++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),Wf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),Wf.delete(s)),n.event=="destroy"&&(e.destroy(),Wf.delete(s))})}var po,Da,Qf,qg,zf,eB,Jee,Ca,La,tB,j0,Fg,Xee,Gg,Kf,Z0,Ua,tte,Wf,ste,sB=ge(()=>{po=M(at()),Da=require("net"),Qf=M(w()),qg=M(q()),zf=require("fs");ni();eB=require("worker_threads"),Jee=M(Vo()),Ca=[],La=[],tB=[],Fg=0,Xee=[];eB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(jee,"startHTTPWorker");a(rB,"startSocketServer");Kf=0;a(kg,"findMostIdleWorker");Z0=36e5,Ua=new Map;a(Zee,"findByRemoteAddressAffinity");a(ete,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ua)r.lastUsed+Z0<e&&Ua.delete(t)},Z0).unref();tte=1e3;a(rte,"updateWorkerIdleness");(0,po.setMonitorListener)(rte);Wf=new Map,ste=1;a(nte,"proxySocket")});var iB={};ze(iB,{Request:()=>Vg,createReuseportFd:()=>Jf});var nB,Vg,$g,Yg,Jf,Kg=ge(()=>{nB=require("os"),Vg=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new Yg(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 body(){return this.#e||(this.#e=new $g(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},$g=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Yg=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,nB.platform)()!="win32"&&(Jf=require("node-unix-socket").createReuseportFd)});var uB=T((sEe,cB)=>{"use strict";var ite=require("cluster"),So=j();So.initSync();var aB=w(),jfe=require("util"),Fn=q(),Zfe=require("fs"),ote=require("fastify"),eEe=jc(),ate=require("@fastify/cors"),cte=require("@fastify/compress"),ute=require("@fastify/static"),lte=og(),_te=require("path"),{PACKAGE_ROOT:dte}=w(),fte=An(),Ete=z(),hte=Br(),mte=Vo(),{server:pte}=(es(),te(Io)),{node_request_key:tEe}=(Kg(),te(iB)),{authHandler:Ste,handlePostRequest:Tte,serverErrorHandler:gte,reqBodyValidationHandler:Rte}=Yf(),rEe=require("net"),{registerContentHandlers:Ate}=(pa(),te(tv)),Ote=6e4,bte=1024*1024*1024,Nte="TRUE",{CONFIG_PARAMS:sl}=aB,Ma;cB.exports={hdbServer:oB,start:oB};async function oB(e){try{Fn.info("In Fastify server"+process.cwd()),Fn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=ite.isMaster,await yte();let t=e.securePort>0;Ma=Ite(t),await Ma.ready(),e||(e={}),e.isOperationsServer=!0;try{pte.http(Ma.server,e),Ma.server.closeIdleConnections||await Ma.listen({port:0,host:"::"})}catch(r){throw Ma.close(),Fn.error(r),Fn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Fn.fatal(t),process.exit(1)}}a(oB,"operationsServer");async function yte(){Fn.trace("Configuring HarperDB process."),fte.setSchemaDataToGlobal(),await hte.setUsersToGlobal(),await mte.getLicense()}a(yte,"setUp");function Ite(e){Fn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=wte(e),r=ote(t);r.server.headersTimeout=Lte(),r.setErrorHandler(gte);let s=Cte();s&&r.register(ate,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(lte),r.register(cte),r.register(ute,{root:_te.join(dte,"studio/build-local")}),Ate(r);let n=So.get(aB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Ete.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Rte,Ste],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Tte(i,o)}),r.get("/health",()=>"HarperDB is running."),Fn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Ite,"buildServer");function wte(e){let t=So.get(sl.OPERATIONSAPI_NETWORK_TIMEOUT),r=So.get(sl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:bte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(wte,"getServerOptions");function Cte(){let e=So.get(sl.OPERATIONSAPI_NETWORK_CORS),t=So.get(sl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Nte)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Cte,"getCORSOpts");function Lte(){return So.get(sl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ote}a(Lte,"getHeaderTimeoutConfig")});var TB=T((cEe,SB)=>{"use strict";var{decode:Dte}=require("msgpackr"),{isMainThread:iEe,parentPort:Ute,threadId:oEe}=require("worker_threads"),Qg=mt(),Gn=et(),Mte=w(),Si=q(),lB=j(),dB=w();at();var Pte=Rn(),{recordAction:vte,recordActionBinary:Bte}=(ni(),te(id)),{publishToStream:Hte}=Qg,{ConsumerEvents:xte}=require("nats"),aEe={durable:Gn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Gn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Fte,Gte,qte,fB,EB;SB.exports={initialize:zg,workQueueListener:pB,setSubscription:kte,setIgnoreOrigin:$te,getDatabaseSubscriptions:Vte};async function zg(){EB=!0,Si.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Qg.getNATSReferences();Fte=e,Gte=e.info.server_name,qte=t,fB=r}a(zg,"initialize");var jf=new Map;function kte(e,t,r){let s=jf.get(e);s||jf.set(e,s=new Map),s.set(t,r),EB||zg().then(pB)}a(kte,"setSubscription");function Vte(){return jf}a(Vte,"getDatabaseSubscriptions");var hB;function $te(e){hB=e}a($te,"setIgnoreOrigin");var mB=100,_B=new Array(mB),Xf=0;async function pB(){let e=await fB.consumers.get(Gn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Gn.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Ute?.on("message",async s=>{let{type:n}=s;n===dB.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let s of await r.status())if(s.type===xte.HeartbeatsMissed){let n=s.data;Si.trace(`${n} clustering ingest consumer heartbeats missed`),n===2&&(Si.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let s of r)await _B[Xf],_B[Xf]=Yte(s).catch(n=>{Si.error(n)}),++Xf>=mB&&(Xf=0)}catch(s){Si.error("Error consuming clustering ingest, restarting consumer",s)}Qg.clearClientCache(),await zg()}}a(pB,"workQueueListener");async function Yte(e){let t=Dte(e.data);vte(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=lB.get(Mte.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Gn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Gn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Gn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!hB),Bte(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Gn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Si.trace("processing message:",o,c,_,(l?"records: "+l.map(y=>y?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Si.trace(`messageProcessor nats msg id: ${e.headers.get(Gn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},O=jf.get(c)?.get(_);if(!O)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,O.send(t);else if(l.length===1&&!u)O.send({type:Wg(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let y=l.map((F,K)=>({type:Wg(o),value:F,expiresAt:E,id:d?.[K],table:_}));for(;u;)y.push({type:Wg(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;O.send({type:"transaction",writes:y,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}lB.get(dB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Hte(e.subject.split(".").slice(0,-1).join("."),Pte.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Si.error(o)}e.ack()}a(Yte,"messageProcessor");function Wg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Wg,"convertOperation")});var nE={};ze(nE,{disableNATS:()=>Wte,publishToStream:()=>sE,setNATSReplicator:()=>Jg,setPublishToStream:()=>Qte,setSubscription:()=>eR,start:()=>Kte});function Kte(){eE.default.get(tE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Jte()}function Wte(e=!0){bB=e}function Qte(e,t){sE=e,eR=t}function Jte(){if(bB||process.env._DISABLE_NATS)return;let e=Ps(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];Jg(n,r,i)}}rR((r,s)=>{Jg(r.tableName,r.databaseName,r),s&&yB(r)}),!gB&&(gB=!0)}function Jg(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends xt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){yB(i)}static subscribe(){let i=new Is;return eR(t,e,i),i}static subscribeOnThisThread(i){return i<zte}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Zf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=NB;return i}a(s,"getNATSTransaction")}function yB(e){let t=eE.default.get(tE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);sE(`${jg.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Zg.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 RB,jg,Zg,AB,OB,eE,tE,rE,bB,sE,eR,zte,NB,gB,Zf,Xg,tR=ge(()=>{Se();ws();RB=M(mt()),jg=M(et()),Zg=M(Rn());cc();AB=M(TB()),OB=M(Lr()),eE=M(j()),tE=M(w()),rE=M(q());a(Kte,"start");a(Wte,"disableNATS");sE=RB.publishToStream,eR=AB.setSubscription;a(Qte,"setPublishToStream");zte=2;a(Jte,"assignReplicationSource");a(Jg,"setNATSReplicator");a(yB,"publishSchema");Zf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=eE.default.get(tE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(rE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(sE(`${jg.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,Zg.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw rE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},Xg=class extends Zf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,OB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};NB=new Xg});async function CB({clientId:e,user:t,clean:r,will:s}){let n;if(e&&!r){let i=await sR.getResource(e,{});n=new oR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await sR.get(e);i&&i.delete()}n=new oE(e,t)}return s&&(s.id=e,s.user={username:t?.username},nl.put(s)),n}function nR(){return iE++,iE>65500&&(iE=1),iE}function iR(e,t,r=e){let{topic:s,retain:n}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Ei.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Ke(r,()=>n?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var IB,To,wB,sR,nl,iE,oE,oR,LB=ge(()=>{Se();Uu();IB=M(Lr()),To=M(q());Ci();wB=M(at()),sR=ct({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"}]}}]}),nl=ct({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,wB.getWorkerIndex)()===0&&(async()=>{for await(let e of nl.search({})){let t=e.data,r=Object.assign({},e);Ke(r,()=>{iR(r,t),nl.delete(e.id,r)})}})();a(CB,"getSession");iE=1;a(nR,"getNextMessageId");oE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,rh:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(A=>A.topic===n),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,To.trace)("Resuming subscription from",n,"from",o);let E=Ei.getMatch(_);if(!E){let A=new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let O=A.split("/"),y;for(let H=0;H<O.length;H++)if(O[H].indexOf("+")>-1)if(O[H]==="+")y=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(s&&y)throw new Error("Filters can not be combined");let F=!0;O[O.length-1]==="#"&&(O.length--,F=!1),y&&(s=a(H=>{let D=H.id;if(!Array.isArray(D)||F&&D.length!==O.length)return!1;for(let $=0;$<O.length;$++)if(O[$]!=="+"&&O[$]!==D[$])return!1;return!0},"filter"));let K=O.indexOf("+");f.url="/"+(K>-1?O.slice(0,K):O).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Ke(f,async()=>{let A=await p.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let O of A)try{let y;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,y=this.needsAcknowledge(O)):(O.acknowledge?.(),y=nR());let F=O.id;Array.isArray(F)&&(F=ma(F)),F==null&&(F=""),this.listener(h+"/"+F,O.value,y,t)}catch(y){(0,To.warn)(y)}})(),A});return S.topic=n,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=nR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,iR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Ke(r,async()=>{if(!t){let s=await nl.get(this.sessionId,r);s.doesExist()&&await iR(s,s.data,r)}await nl.delete(this.sessionId,r)}).catch(s=>{(0,To.warn)(`Error publishing MQTT will for ${this.sessionId}`,s)});for(let s of this.subscriptions)s.end();this.subscriptions=[]}};a(iR,"publish");oR=class extends oE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=nR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,To.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,IB.getNextMonotonicTime)()),(0,To.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),sR.put(this.sessionRecord)),t.qos}}});var aR={};ze(aR,{start:()=>jte});function jte({server:e,port:t,network:r,webSocket:s,securePort:n,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,u=r?.mtls;return s&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=MB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Ar.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||n)&&(c=e.socket(async _=>{let l;if(u)if(_.authorized)try{let E=u.user;l!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Ar.error)(E)}else return(0,Ar.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&Xte&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,PB.getSuperUser)());let{onMessage:d,onClose:f}=MB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Ar.info)("Socket error",E)})},{port:t,securePort:n,mtls:u})),c}function MB(e,t,r,s,n){UB||(UB=!0,tu(d=>{aE>0&&d.push({metric:"mqtt-connections",connections:aE,byThread:!0})}));let i;aE++;let o,c={protocolVersion:4},u=(0,uE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){aE--,i||(i=!0,o?.disconnect(),us(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await Ot.getUser(d.username,d.password.toString(),r),(0,cE.get)(ln.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DB.notify({username:s.username,status:ln.AUTH_AUDIT_STATUS.SUCCESS,type:ln.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,cE.get)(ln.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DB.error({username:s.username,status:ln.AUTH_AUDIT_STATUS.FAILURE,type:ln.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(n.authorizeClient?.(d,s),d.will){let y=e.deserialize||(e.deserialize=lo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?y(d.will.payload):void 0,delete d.will.payload}o=CB({user:s,...d}),o=await o}catch(y){return(0,Ar.error)(y),us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:y.code||5,returnCode:y.code||128})}us(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((y,F,K,H)=>{try{let D=y.indexOf("/",1),$=D>0?y.slice(0,D):y;f({cmd:"publish",topic:y,payload:E(F),messageId:K||Math.floor(Math.random()*1e8),qos:H.qos},$)}catch(D){(0,Ar.error)(D),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let y of d.subscriptions){let F;try{F=(await o.addSubscription(y,y.qos>=1)).qos||0}catch(K){(0,Ar.error)(K),F=c.protocolVersion<5?128:K.statusCode===403?135:K.statusCode===404?143:128}h.push(F)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let y=[];for(let F of d.unsubscriptions)y.push(o.removeSubscription(F)?0:17);f({cmd:"unsuback",granted:y,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=lo(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,O;try{O=await o.publish(d,A)}catch(y){(0,Ar.warn)(y),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:O===!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),us(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Ar.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,uE.generate)(h,c);t(S),Gr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return hi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var uE,PB,cE,ln,Ar,DB,Xte,UB,aE,vB=ge(()=>{uE=require("mqtt-packet");LB();PB=M(Br());pa();ni();es();cE=M(j()),ln=M(w()),Ar=M(q()),DB=(0,Ar.loggerWithTag)("auth-event"),Xte=(0,cE.get)(ln.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(jte,"start");aE=0;a(MB,"onSocket")});var cf={};ze(cf,{component_errors:()=>va,loadComponent:()=>lE,loadComponentDirectories:()=>$B,setErrorReporter:()=>rre});function $B(e,t){t&&(uR=t),e&&(lR=e);let r=[];if((0,Gs.existsSync)(cR)){let n=(0,Gs.readdirSync)(cR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(cR,o);r.push(lE(c,uR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(lE(s,uR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{VB=!0})}function rre(e){ol=e}async function lE(e,t,r,s,n,i){if(!HB.has(e)){HB.set(e,!0),n&&(lR=n);try{let o;s&&(va=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Gs.existsSync)(c)?o=s?(0,kB.getConfigObj)():(0,xB.parseDocument)((0,Gs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=_R;let u=[],_=s;for(let l in o){let d=o[l];if(va.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let O=e,y;for(;!(0,Gs.existsSync)(y=(0,Rt.join)(O,"node_modules",l));)if(O=(0,Rt.dirname)(O),O.length<(0,qB.getHdbBasePath)().length){y=null;break}if(y)f=await lE(y,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=tre[l];if(!f)continue;u.push(f);let h=a(O=>(O.origin=r,ct(O)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(Pa.isMainThread&&(f=await f.startOnMainThread?.({server:Ot,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let O of[A,S])try{if(+O&&!BB.includes(O)){let y=dR.get(fR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);y&&il.default.warn("Session affinity is not recommended and may cause memory leaks"),(y||!Jf)&&(BB.push(O),rB(O,y))}}catch(y){console.error("Error listening on socket",O,y,l)}if(t.isWorker&&(f=await f.start?.({server:Ot,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),lR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,GB.handleHDBError)("Can not reference parent directories");let O=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),y=O.indexOf("/*");if(y>-1&&d.files!==_R[l]?.files&&!(0,Gs.existsSync)(O.slice(0,y)))throw new Error(`The path '${O.slice(0,y)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let F=(0,Rt.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+F+K.slice(2):K==="."?"/"+F:"/"+F+"/"+K;let H,D,$;if(d.root){let W=d.root;W.startsWith("/")&&(W=W.slice(1)),W.endsWith("/")&&(W=W.slice(0,-1)),W+="/",D=(0,Rt.join)(e,W)}else($=O.indexOf("/*"))>-1&&(D=O.slice(0,$+1),H=(0,Rt.relative)(e,D));let V=!1;if(Pa.isMainThread&&f.setupDirectory&&(V=await f.setupDirectory?.(K,D,t)),t.isWorker&&f.handleDirectory&&(V=await f.handleDirectory?.(K,D,t)),V)continue;for(let W of await(0,FB.default)(O,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:be}=W;_=!0;let ne=(0,Rt.relative)(e,re).replace(/\\/g,"/");if(H)if(ne.startsWith(H))ne=ne.slice(H.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ne}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ot=K+(K.endsWith("/")?"":"/")+ne;try{if(be.isFile()){let Te=await ere(re);Pa.isMainThread&&await f.setupFile?.(Te,ot,re,t),t.isWorker&&await f.handleFile?.(Te,ot,re,t)}else Pa.isMainThread&&await f.setupDirectory?.(ot,re,t),t.isWorker&&await f.handleDirectory?.(ot,re,t)}catch(Te){Te.message=`Could not load ${be.isFile()?"file":"directory"} '${re}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Te.message}`,ol?.(Te),((0,Ba.getWorkerIndex)()===0?console:il.default).error(Te),t.set(d.path||"/",new al(Te)),va.set(s?l:(0,Rt.basename)(e),Te.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.basename)(e)}' due to: ${h.message}`,ol?.(h),((0,Ba.getWorkerIndex)()===0?console:il.default).error(h),t.set(d.path||"/",new al(h),null,!0),va.set(s?l:(0,Rt.basename)(e),h.message)}}if(Pa.isMainThread&&!VB&&i&&(0,Ba.watchDir)(e,async()=>$B()),o.extensionModule)return await s_((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;ol?.(new Error(l)),((0,Ba.getWorkerIndex)()===0?console:il.default).error(l),va.set((0,Rt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,ol?.(o),t.set("",new al(o))}}}var Gs,Rt,Pa,xB,dR,fR,FB,Ba,il,GB,qB,Zte,kB,ere,cR,lR,VB,uR,va,tre,_R,BB,HB,ol,al,uf=ge(()=>{Gs=require("fs"),Rt=require("path"),Pa=require("worker_threads"),xB=require("yaml"),dR=M(j()),fR=M(w());MO();HO();xO();nv();Y0();X0();FB=M(require("fast-glob")),Ba=M(at()),il=M(q());dh();es();GB=M(Z());ws();Se();sB();qB=M(j()),Zte=M(uB());Zd();tR();vB();kB=M(Cr());Kg();({readFile:ere}=Gs.promises),cR=dR.get(fR.CONFIG_PARAMS.COMPONENTSROOT),lR=new Map,va=new Map;a($B,"loadComponentDirectories");tre={REST:Af,rest:Af,graphqlSchema:_h,jsResource:Eh,fastifyRoutes:Hg,login:mh,static:xg,operationsApi:Zte,customFunctions:{},http:{},clustering:nE,authentication:Mu,mqtt:aR},_R={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(_R,"static",{value:{files:"web/**"}});BB=[],HB=new Map;a(rre,"setErrorReporter");a(lE,"loadComponent");al=class extends xt{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 WB=T((HEe,KB)=>{var{isMainThread:YB}=require("worker_threads"),{getTables:sre}=(Se(),te(Ge)),{loadComponentDirectories:nre,loadComponent:ire}=(uf(),te(cf)),{resetResources:ore}=(Uu(),te(yM)),are=LT(),cre=Cr(),{dirname:ure}=require("path"),{getConnection:lre}=mt(),_re=j(),dre=w(),ER=new Map;async function fre(e=!1){!YB&&_re.get(dre.CONFIG_PARAMS.CLUSTERING_ENABLED)&&lre();try{YB&&await are()}catch(s){console.error(s)}let t=ore();sre(),t.isWorker=e,await ire(ure(cre.getConfigFilePath()),t,"hdb",!0,ER),await nre(ER,t);let r=[];for(let[s]of ER)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(fre,"loadRootComponents");KB.exports.loadRootComponents=fre});var at=T((FEe,gi)=>{"use strict";var{Worker:Ere,MessageChannel:hre,parentPort:_n,isMainThread:TR,threadId:mre,workerData:qn}=require("worker_threads"),{PACKAGE_ROOT:pre}=w(),{join:XB,isAbsolute:Sre,extname:Tre}=require("path"),{server:jB}=(es(),te(Io)),{watch:gre,readdir:Rre}=require("fs/promises"),{totalmem:QB}=require("os"),cl=w(),ZB=j(),kn=q(),{randomBytes:Are}=require("crypto"),{_assignPackageExport:Ore}=require("../../index"),bre=w(),zB=1024*1024,Ti=[],Ts=[],Nre=50,gR=1e4,yre="restart",eH="request_thread_info",tH="resource_report",rH="thread_info",sH="added-port",Ire="ack",hR;Ore("threads",Ts);gi.exports={startWorker:mR,restartWorkers:AR,shutdownWorkers:Ure,workers:Ti,setMonitorListener:Gre,onMessageFromWorkers:Mre,onMessageByType:uH,broadcast:vre,broadcastWithAcknowledgement:Hre,setChildListenerByType:Dre,getWorkerIndex:nH,getWorkerCount:iH,getTicketKeys:oH,setMainIsWorker:Cre,setTerminateTimeout:wre,restartNumber:qn?.restartNumber||1};Ts.onMessageByType=uH;Ts.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ts.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var RR;function wre(e){gR=e}a(wre,"setTerminateTimeout");function nH(){return qn?qn.workerIndex:RR?0:void 0}a(nH,"getWorkerIndex");function iH(){return qn?qn.workerCount:RR?1:void 0}a(iH,"getWorkerCount");function Cre(e){RR=e}a(Cre,"setMainIsWorker");var _E;function oH(){return _E||(_E=TR?Are(48):qn.ticketKeys,_E)}a(oH,"getTicketKeys");Object.defineProperty(jB,"workerIndex",{get(){return nH()}});Object.defineProperty(jB,"workerCount",{get(){return iH()}});var aH={[eH](e,t){xre(t)},[tH](e,t){Fre(t,e)}};function mR(e,t={}){let r=process.constrainedMemory?.()||QB();r=Math.min(r,QB(),2e4*zB);let s=ZB.get(cl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/zB/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Ts){let _=new hre;_.existingPort=u,i.push(_),o.push(_.port2)}Tre(e)||(e+=".js");let c=new Ere(Sre(e)?e:XB(pre,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:gi.exports.restartNumber,ticketKeys:oH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:sH,port:u,threadId:c.threadId},[u]);return fE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>mR(e,t),c.on("error",u=>{console.error("Worker error:",u),kn.error("Worker error:",u)}),c.on("exit",u=>{Ti.splice(Ti.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Nre?(t.unexpectedRestarts=c.unexpectedRestarts+1,mR(e,t)):kn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{aH[u.type]?.(u,c)}),Ti.push(c),kre(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(mR,"startWorker");var Lre=[cl.THREAD_TYPES.HTTP];async function AR(e=null,t=2,r=!0){if(TR){if(r){let{loadRootComponents:o}=WB();await o()}gi.exports.restartNumber++,t<1&&(t=t*Ti.length);let s=[],n=[];for(let o of Ti.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;kn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:gi.exports.restartNumber,type:cl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Lre.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),gR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===bre.ITC_EVENT_TYPES.CHILD_STARTED&&(kn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");kn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Qd();r&&(e==="http"||!e)&&ZB.get(cl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _n.postMessage({type:yre,workerType:e})}a(AR,"restartWorkers");function Dre(e,t){aH[e]=t}a(Dre,"setChildListenerByType");function Ure(e){return AR(e,1/0,!1)}a(Ure,"shutdownWorkers");var cH=[];function Mre(e){cH.push(e)}a(Mre,"onMessageFromWorkers");var pR=new Map;function uH(e,t){let r=pR.get(e);r||pR.set(e,r=[]),r.push(t)}a(uH,"onMessageByType");var Pre=10;async function vre(e){let t=0;for(let r of Ts)try{r.postMessage(e),t++>Pre&&(t=0,await new Promise(setImmediate))}catch(s){kn.error("Unable to send message to worker",s)}}a(vre,"broadcast");var dE=new Map,Bre=1;function Hre(e){return new Promise(t=>{let r=0;for(let s of Ts)try{let n=Bre++,i=a(()=>{dE.delete(n),--r===0&&t(),s!==_n&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,dE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of dE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){kn.error("Unable to send message to worker",n)}r===0&&t()})}a(Hre,"broadcastWithAcknowledgement");function xre(e){e.postMessage({type:rH,workers:lH()})}a(xre,"sendThreadInfo");function lH(){let e=Date.now();return Ti.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(lH,"getChildWorkerInfo");function Fre(e,t){e.resources=t,e.resources.updated=Date.now()}a(Fre,"recordResourceReport");var SR;function Gre(e){SR=e}a(Gre,"setMonitorListener");var qre=1e3,JB=!1;function kre(){JB||(JB=!0,setInterval(()=>{for(let e of Ti){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}SR&&SR()},qre).unref())}a(kre,"startMonitoring");var Vre=1e3;if(_n){fE(_n);for(let e=0,t=qn.addPorts.length;e<t;e++){let r=qn.addPorts[e];r.threadId=qn.addThreadIds[e],fE(r)}setInterval(()=>{let e=process.memoryUsage();_n.postMessage({type:tH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Vre).unref(),hR=a(()=>new Promise((e,t)=>{_n.on("message",r),_n.postMessage({type:eH});function r(s){s.type===rH&&(_n.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else hR=lH;gi.exports.getThreadInfo=hR;function fE(e,t){Ts.push(e),e.on("message",r=>{if(r.type===sH)r.port.threadId=r.threadId,fE(r.port);else if(r.type===Ire){let s=dE.get(r.id);s&&s()}else{for(let n of cH)n(r,e);let s=pR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){kn.error(i)}}}).on("close",()=>{Ts.splice(Ts.indexOf(e),1)}).on("exit",()=>{Ts.splice(Ts.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(fE,"addPort");if(TR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Rre(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(XB(s,i.name));try{for await(let{filename:i}of gre(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await AR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");gi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else _n.on("message",async e=>{let{type:t}=e;t===cl.ITC_EVENT_TYPES.SHUTDOWN&&(gi.exports.restartNumber=e.restartNumber,_n.unref(),setTimeout(()=>{kn.warn("Thread did not voluntarily terminate",mre),process.exit(0)},gR).unref())})});function dH(e,t,r,s){let n=e.primaryStore.env.path,i=e.primaryStore.tableId;Ha||((0,ll.onMessageByType)(_H,l=>{fH(l.path)}),(0,ll.onMessageByType)($re,l=>{(0,ul.trace)("confirming to proceed with txn",l.txnId)}),Ha=Object.create(null));let o=Ha[n]||(Ha[n]=[]);o.auditStore=e.auditStore;let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ma(t);let u=new bR(r);u.startTime=s;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function fH(e,t){if(!Ha)return;let r=Ha[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:OR,exclusiveStart:!0})){OR=n;let o=Mr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ma(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=n){(0,ul.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,ul.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},OR,!0)}function EH(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,ll.broadcast)({type:_H,path:n}),fH(n,!0)})}}var ul,ll,_H,$re,Ha,YEe,bR,OR,hH=ge(()=>{ul=M(q()),ll=M(at());cc();Uu();Po();_H="transaction",$re="transaction-await",YEe=Buffer.alloc(4096);a(dH,"addSubscription");bR=class extends Is{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},OR=Date.now();a(fH,"notifyFromTransactionData");a(EH,"listenToCommits")});var Rg={};ze(Rg,{coerceType:()=>mE,makeTable:()=>SE,setServerUtilities:()=>Xre,updateResource:()=>hl});function SE(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),EH(i,u);let S=Fh(i,s,u),A=0,O,y,F,K={},H=Promise.resolve(),D,$,V;for(let Y of p)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(D=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&($=Y),Y.expiresAt&&(V=Y),Y.isPrimaryKey&&(K=Y);let W,re=[],be=[],ne=1,ot=2,Te={},Bt={},As=864e5,HR,Ol,Vn,xR=!1,wE,KH=10,WH=6;E&&GR();class We extends xt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=D;static updatedTimeProperty=$;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),y=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let L=a(b=>{let I=this.sources.slice(0,-1);if(I=I.filter(U=>U[b]&&(!U[b].reliesOnPrototype||U.prototype[b])),I.length>0)if(I.length===1){let U=I[0];return(v,B,Q)=>{if(v?.source!==U)return U[b](B,Q,v)}}else return(U,v,B)=>{let Q=[];for(let X of I){if(U?.source===X)break;Q.push(X[b](v,B,U))}return Promise.all(Q)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],C=a(b=>{if(R[b]&&(!R[b].reliesOnPrototype||R.prototype[b]))return(I,U,v)=>{if(!I?.source)return R[b](U,v,I)}},"getApplyToCanonicalSource");return Te={put:C("put"),delete:C("delete"),publish:C("publish")},Bt={put:L("put"),delete:L("delete"),publish:L("publish"),invalidate:L("invalidate")},(async()=>{let b=!1,I=a(async(U,v)=>{let B=U.value,Q=U.table?Ze[c][U.table]:We;if(c===qs.SYSTEM_SCHEMA_NAME&&(U.table===qs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===qs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),U.id===void 0&&(U.id=B[Q.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let X=await Q.getResource(U.id,v,_l);switch(U.type){case"put":return X._writeUpdate(B,_l);case"delete":return X._writeDelete(_l);case"publish":return X._writePublish(B,_l);case"invalidate":return X.invalidate(_l);default:nt.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&h==null&&(h=!0);let v=m.subscribeOnThisThread?m.subscribeOnThisThread((0,go.getWorkerIndex)()):(0,go.getWorkerIndex)()===0,B=U&&v&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(B){let Q;for await(let X of B)try{if(!(X.type==="transaction"?X.writes[0]:X)){nt.error("Bad subscription event",X);continue}if(X.source=m,Q)if(X.beginTxn)Q.resolve();else{I(X,Q);continue}if(X.type==="end_txn")continue;let Ue=Ke(X,()=>{if(X.type==="transaction"){let se=[];for(let he of X.writes)try{se.push(I(he,X))}catch(Lt){throw Lt.message+=" writing "+JSON.stringify(he)+" of event "+JSON.stringify(X),Lt}return Promise.all(se)}else if(X.type==="define_schema"){let se=this.attributes.slice(0),he;for(let Lt of X.attributes)se.find(xe=>xe.name===Lt.name)||(se.push(Lt),he=!0);he&&(ct({table:n,database:c,attributes:se,origin:"cluster"}),pl.signalSchemaChange(new Sl.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return X.beginTxn?(Q=X,I(X,X),new Promise(se=>{Q.resolve=se})):I(X,X)});b&&(await Ue,pl.signalUserChange(new Sl.UserEventMsg(process.pid))),X.onCommit&&(Ue?.then?Ue.then(X.onCommit):X.onCommit())}catch(Qe){nt.error("error in subscription handler",Qe)}}}catch(U){nt.error(U)}})(),this}static getResource(m,g,L){let R=super.getResource(m,g,L);if(m!=null){qa(m);try{if(R.hasOwnProperty(ye))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let C=!L?.async||i.cache?.get(m),b=zr(g),I=b.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return CE(m,g,{transaction:I},C,U=>{if(U?hl(R,U):R[ye]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new gs.ServerError("Entry is not cached",504)}else if(L?.ensureLoaded){let v=LE(m,U,g,R);if(v)return b?.disregardReadTxn(),R[yR]=!0,wR(v,B=>(hl(R,B),R))}return R})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(m)),C}}return R}ensureLoaded(){let m=LE(this[Le],this[dn],this[pe]);if(m)return this[yR]=!0,wR(m,g=>{this[dn]=g,this[ye]=g.value,this[hE]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,As=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");As=As||(d+f)/4,UE()}static enableAuditing(m=!0){E=m,m&&GR(),We.audit=m}static coerceId(m){return m===""?null:mE(m,K)}static async dropTable(){if(delete Ze[c][n],c===o){for(let m of p)l.remove(We.tableName+"/"+m.name),r[m.name]?.drop();l.remove(We.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));pl.signalSchemaChange(new Sl.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.DROP_TABLE,c,n))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[ns])return this.search(m);if(this[Le]===null){if(m?.conditions)return this.search(m);let g=We.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:n,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[pe]?.returnNonexistent)return this}allowRead(m,g){let L=Nl(m);if(L?.read){if(L.isSuperUser)return!0;let R=L.attribute_permissions,C=g?.select;if(R?.length>0||xR&&C){if(g||(g={}),C){let b=R?.length>0&&IR(R,"read");g.select=C.map(I=>{let U=I.name||I;if(!b||b[U]){let v=Vn[U]?.definition?.tableClass;if(v){if(I.name||(I={name:I}),!v.prototype.allowRead.call(null,m,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else g.select=R.filter(b=>b.read&&!Vn[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let L=Nl(m);if(L?.update){let R=L.attribute_permissions;if(R?.length>0){let C=IR(R,"update");for(let b in g)if(!C[b])return!1;for(let b of R){let I=b.attribute_name;!b.update&&!(I in g)&&(g[I]=this.getProperty(I))}}return!0}}allowCreate(m,g){if(this[ns]){let L=Nl(m);if(L?.insert){let R=L.attribute_permissions;if(R?.length>0){let C=IR(R,"insert");for(let b in g)if(!C[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Nl(m)?.delete}update(m,g){if(!zr(this[pe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let C in this[ye])m[C]===void 0&&(m[C]=void 0);this[Wt]=m}else R=this[Wt],R&&(m=Object.assign(R,m)),this[Wt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[pe],L=this[Le];qa(L),zr(this[pe]).addWrite({key:L,store:i,invalidated:!0,entry:this[dn],nodeName:this[pe]?.nodeName,before:Te.invalidate?.bind(this,g,L),beforeIntermediate:Bt.invalidate?.bind(this,g,L),commit:(C,b)=>{if(b?.version>C)return;let I=null;for(let U in r)I||(I={}),I[U]=this.getProperty(U);S(L,I,this[dn],C,dl,E,this[pe],0,"invalidate")}})}static evict(m,g,L){let R=this.Source,C;if(!((y||E)&&(!g||(C=i.getEntry(m),!C||!g)||C.version!==L))){if(y){if(i.hasLock(m,C.version))return;let b;for(let I in r)b||(b={}),b[I]=g[I];if(b)return S(m,b,C,L,fl,null,null,0,null,!0)}return i.ifVersion(L,()=>{bl(m,g,null)}),E?S(m,null,C,L,fl,null,null,0,null,!0):i.remove(m,L)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,OH.operation(m,g)}put(m){this.update(m,!0)}_writeUpdate(m,g){let L=this[pe],R=zr(L),C=this[Le];qa(C);let b=this[dn];this[NR]=!0;let I={key:C,store:i,entry:b,nodeName:L?.nodeName,validate:U=>{if(!m[pH]||Kl(m)){if(this.validate(m),L?.source?m=uc(m):(t&&m[t]!==C&&(m[t]=C),$&&(m[$.name]=$.type==="Date"?new Date(U):$.type==="String"?new Date(U).toISOString():U),D&&(b?.value?m[D.name]=b?.value[D.name]:m[D.name]=D.type==="Date"?new Date(U):D.type==="String"?new Date(U).toISOString():U),m=uc(m)),m[ye])throw new Error("Can not assign a record with a record property");this[ye]=m}else R.removeWrite(I)},before:Te.put&&(()=>Te.put(L,C,m)),beforeIntermediate:Bt.put&&(()=>Bt.put(L,C,m)),commit:(U,v,B)=>{B&&(L&&v?.version>(L.lastModified||0)&&(L.lastModified=v.version),hl(this,v));let Q=v?.value;this[NR]=!1,!(v?.version>U)&&(bl(C,Q,m),S(C,m,v,U,0,E,L,L.expiresAt||(d?d+Date.now():0)))}};R.addWrite(I)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[ns]){for await(let g of this.search(m))(await We.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let g=zr(this[pe]),L=this[Le];qa(L);let R=this[pe];return g.addWrite({key:L,store:i,resource:this,nodeName:R?.nodeName,before:Te.delete?.bind(this,R,L),beforeIntermediate:Bt.delete?.bind(this,R,L),commit:(C,b,I)=>{let U=b?.value;I&&(R&&b?.version>(R.lastModified||0)&&(R.lastModified=b.version),hl(this,b)),!(b?.version>C)&&(bl(this[Le],U),nt.trace("Write delete entry",L,C),E||h?(S(L,null,this[dn],C,0,E,this[pe],0,"delete"),E||UE()):i.remove(this[Le]))}}),!0}search(m){let g=this[pe],L=zr(g);if(!m)throw new Error("No query provided");let R=m.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Le]&&(R=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(R));let C,b={};function I(ee,Fe){let He;switch(Fe){case"and":case void 0:if(ee.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(ee.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Fe)}let dt=He&&{},er;for(let Ne of ee){if(Ne.conditions){Ne.conditions=I(Ne.conditions,Ne.operator);continue}let we=Ne[0]??Ne.attribute,Dt=we==null?K:Sn(p,we);if(Dt){if(He){let br=zn(we),Ht=dt[br];Ht?(Ht.push(Ne),er=!0):dt[br]=[Ne]}Dt.type&&(Ne[1]===void 0?Ne.value=v(Ne.value,Dt):Ne[1]=v(Ne[1],Dt))}else if(we!=null)throw(0,gs.handleHDBError)(new Error,`${we} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return ee;if(er)for(let Ne in dt){let we=dt[Ne],Dt=we.length;if(Dt>1)for(let br=0;br<Dt;br++){let Ht=we[br];if(Ht.comparator==="ge"||Ht.comparator==="greater_than_equal")for(let Pe=0;Pe<Dt;Pe++){let Xr=we[Pe];(Xr.comparator==="le"||Xr.comparator==="less_than_equal")&&(Ht.comparator="between",Ht.value=[Ht.value,Xr.value],ee.splice(ee.indexOf(Xr),1))}if(Ht.comparator==="equals"||!Ht.comparator){for(let Pe=0;Pe<Dt;Pe++)if(Pe!==br){let Xr=we[Pe];ee.splice(ee.indexOf(Xr),1)}break}}}return ee}a(I,"prepareConditions");function U(ee,Fe){if(m.enforceExecutionOrder)return ee;for(let He of ee)He.conditions&&(He.conditions=U(He.conditions,He.operator));return ee.length>1&&Fe!=="or"?(0,AH.sortBy)(ee,oh(We)):ee}a(U,"orderConditions");function v(ee,Fe){return Array.isArray(ee)?ee.map(He=>mE(He,Fe)):mE(ee,Fe)}a(v,"coerceTypedValues");let B=m.operator;(R.length>0||B)&&(R=I(R,B));let Q=typeof m.sort=="object"&&m.sort,X;if(Q&&B!=="or"){let ee=Q.attribute;if(C=R.find(Fe=>zn(Fe.attribute)===zn(ee)),!C){if(!Sn(p,ee))throw(0,gs.handleHDBError)(new Error,`${ee} is not a defined attribute`,404);C={attribute:ee},R.push(C)}C.descending=!!Q.descending}R=U(R,B),Q&&(R[0]===C?Q.next&&(X={dbOrderedAttribute:Q.attribute,attribute:Q.next.attribute,descending:Q.next.descending,next:Q.next.next}):(C&&R.splice(R.indexOf(C),1),X=Q));function Qe(ee,Fe){let He=ee[0];if(Fe==="or"){let dt=se(He);for(let Ne=1;Ne<ee.length;Ne++){let we=ee[Ne],Dt=se(we);dt=dt.concat(Dt)}let er=new Set;return dt.filter(Ne=>{let we=Ne.key??Ne;return er.has(we)?!1:(er.add(we),!0)})}else{let dt=se(He),er=ee.slice(1).map(Ne=>dc(Ne,We,g,b)).filter(Boolean);return er.length>0?Jr(dt,er):dt}}a(Qe,"executeConditions");let Ue=m.reverse===!0;function se(ee){return ee.conditions?Qe(ee.conditions,ee.operator):_c(ee,L,ee.descending||Ue,We,m.allowFullScan,b)}a(se,"executeCondition");let he=m.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:R,operator:B,postOrdering:X,selectApplied:!!he};let Lt=L.useReadTxn(),xe=Qe(R,B);(m.offset||m.limit!==void 0)&&(xe=xe.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let Me=m.ensureLoaded!==!1;function Jr(ee,Fe){let He=Fe?.length,dt={transaction:Lt,lazy:He>0||typeof he=="string"||he?.length<4,alwaysPrefetch:!0};function er(we,Dt){let br=we?.value;if(!br)return EE.SKIP;for(let Ht=0;Ht<He;Ht++)if(!Fe[Ht](br,we))return EE.SKIP;return Dt!==void 0&&(we.key=Dt),we}a(er,"processEntry");let Ne=He>0||!ee.hasEntries?ee.map(we=>typeof we=="object"&&we.key!==void 0?He>0?er(we):we:CE(we,g,dt,!1,er)):ee;return Ne.hasEntries=!0,Ne}a(Jr,"transformToEntries");let ce,ka=We.transformEntryForSelect(he,g,b,Me,!0);if(X){xe=Jr(xe,null);let ee;ce=new xe.constructor({[Symbol.iterator](){let Fe,He=xe[Symbol.asyncIterator](),dt,er=X.dbOrderedAttribute,Ne,we,Dt=!0;function br(Pe){let Xr=Pe.next&&br(Pe.next),Va=Pe.descending;return(qR,kR)=>{let VR=DE(qR,Pe.attribute,g),$R=DE(kR,Pe.attribute,g),YR=Va?(0,Ro.compareKeys)($R,VR):(0,Ro.compareKeys)(VR,$R);return YR===0?Xr?.(qR,kR)||0:YR}}a(br,"createComparator");let Ht=br(X);return{async next(){let Pe;if(Fe)if(Pe=Fe.next(),Pe.done){if(dt)return ce.onDone&&ce.onDone(),Pe}else return{value:ka(Pe.value)};ee=[],Ne&&ee.push(Ne);do if(Pe=await He.next(),Pe.done){if(dt=!0,ee.length)break;return ce.onDone&&ce.onDone(),Pe}else{let Xr=Pe.value;if(er){let Va=DE(Xr,er,g);if(Dt)Dt=!1,we=Va;else if(Va!==we){we=Va,Ne=Xr;break}}ee.push(Xr)}while(!0);return X.isGrouped,ee.sort(Ht),Fe=ee[Symbol.iterator](),Pe=Fe.next(),Pe.done?(ce.onDone&&ce.onDone(),Pe):{value:await ka(Pe.value)}},return(){ce.onDone&&ce.onDone(),He.return()},throw(){ce.onDone&&ce.onDone(),He.throw()}}}})}else ce=xe.map(ka);return ce.onDone=()=>{ce.results=null,L.doneReadTxn()},ce.selectApplied=!0,ce}static transformEntryForSelect(m,g,L,R,C){if(m===t||m?.length===1&&m[0]===t){let v=a(B=>B?.key??B,"transform");return m===t?v:m.asArray?B=>[v(B)]:B=>({[t]:v(B)})}let b;R&&y&&!m?.every(v=>{let B;return typeof v=="object"?B=v.name:B=v,r[B]||B===t})&&(b=!0);let I,U=a(v=>{let B;if(v){if(wE=v,B=v.value||v.deref?.(),!B&&(v.key===void 0||v.deref)){if(v=CE(v.key??v,g,{transaction:zr(g).getReadTxn(),lazy:m?.length<4},!1,Q=>Q),v?.then)return v.then(U);B=v?.value}if(b&&(v.metadataFlags&(dl|fl)||v.expiresAt&&v.expiresAt<Date.now())){let Q=LE(v.key??v,v,g);if(Q?.then)return Q.then(U)}}if(B==null)return C?EE.SKIP:B;if(m&&!(m[0]==="*"&&m.length===1)){let Q,X=a((Ue,se)=>{let he;typeof Ue=="object"?he=Ue.name:he=Ue;let Lt=Vn?.[he],xe;if(Lt){let Me=L?.[he];if(Me)if(Me.fromRecord)xe=Me.fromRecord(B);else{let ce=zn(v.key);xe=Me.get(ce),xe||(xe=[])}else xe=Lt(B,g,v);let Jr=a(ce=>{if(ce&&typeof ce=="object"){let ka=Lt.definition?.tableClass;I||(I={});let ee=I[he]||(I[he]=(ka||We).transformEntryForSelect(he===Ue?null:Ue.select||Ue,g,Me,R));if(Array.isArray(ce)){let Fe;if(ce=ce.map(He=>{let dt=ee(He);return dt?.then&&(Fe=!0),dt}),Fe){Q||(Q=[]),Q.push(Promise.all(ce).then(He=>se(He,he)));return}}else if(ce=ee(ce),ce?.then){Q||(Q=[]),Q.push(ce.then(Fe=>se(Fe,he)));return}}se(ce,he)},"handleResolvedValue");xe?.then?(Q||(Q=[]),Q.push(xe.then(Jr))):Jr(xe);return}else xe=B[he],xe&&typeof xe=="object"&&he!==Ue&&(xe=this.transformEntryForSelect(Ue.select||Ue,g,null)({value:xe}));se(xe,he)},"selectAttribute"),Qe;if(typeof m=="string")X(m,Ue=>{Qe=Ue});else if(Array.isArray(m))if(m.asArray)Qe=[],m.forEach((Ue,se)=>{Ue==="*"?m[se]=B:X(Ue,he=>Qe[se]=he)});else{Qe={};for(let Ue of m)if(Ue==="*")for(let se in B)Qe[se]=B[se];else X(Ue,(se,he)=>Qe[he]=se)}else throw new gs.ClientError("Invalid select"+m);return Q?Promise.all(Q).then(()=>Qe):Qe}return B},"transform");return U}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ct({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=dH(We,this[Le]??null,function(b,I,U,v){try{let B=I.getValue?.(i);this.send({id:b,timestamp:U,value:B,version:I.version,type:I.type,beginTxn:v})}catch(B){nt.error(B)}},m.startTime,this[ns]);this[ns]&&(g.includeDescendants=!0,m.onlyChildren&&(g.onlyChildren=!0)),m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let L=this[Le],R=m.previousCount;R>1e3&&(R=1e3);let C=m.startTime;if(this[ns]){if(C){if(R)throw new gs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:b,value:I}of u.getRange({start:C,exclusiveStart:!0})){let U=Mr(I,i);if(U.tableId!==s)continue;let v=U.recordId;(L==null||gH(L,v))&&g.send({id:v,timestamp:b,...U}),g.startTime=b}}else if(R){let b=[];for(let{key:I,value:U}of u.getRange({start:"z",end:!1,reverse:!0}))try{let v=Mr(U);if(v.tableId!==s)continue;let B=v.recordId;if(L==null||gH(L,B)){let Q=v.getValue(i);if(b.push({id:B,timestamp:I,value:Q,version:v.version,type:v.type}),--R<=0)break}}catch(v){nt.error("Error getting history entry",I,v)}for(let I=b.length;I>0;)g.send(b[--I]);b[0]&&(g.startTime=b[0].timestamp)}else if(!m.omitCurrent)for(let{key:b,value:I,version:U,localTime:v}of i.getRange({start:L??!1,end:L==null?void 0:[L,Ro.MAXIMUM_KEY],versions:!0}))I&&g.send({id:b,version:U,timestamp:v,value:I})}else{R&&!C&&(C=0);let b=this[dn]?.localTime;if(nt.trace("Subscription from",C,"from",L),C<b){let I=[],U=b;do{let v=u.get(U);if(v){m.omitCurrent=!0;let B=Mr(v),Q=B.getValue(i);I.push({id:L,value:Q,timestamp:U,...B}),U=B.previousLocalTime}else break;R&&R--}while(U>C&&R!==0);for(let v=I.length;v>0;)g.send(I[--v]);g.startTime=b}!m.omitCurrent&&this.doesExist()&&g.send({id:L,version:this[hE],timestamp:this[dn]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[ye]||this[NR])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let L=zr(this[pe]),R=this[Le]||null;qa(R);let C=this[pe];L.addWrite({key:R,store:i,entry:this[dn],nodeName:C?.nodeName,validate:()=>{this.validate(m)},before:Te.publish?.bind(this,C,R,m),beforeIntermediate:Bt.publish?.bind(this,C,R,m),commit:(b,I,U)=>{I===void 0&&h&&!E&&UE(),S(R,I?.value??null,I,I?.version||b,0,!0,C,I?.expiresAt,"message",!1,m)}})}validate(m){let g,L=a((R,C,b)=>{if(C.type&&R!=null)if(C.properties){typeof R!="object"&&(g||(g=[])).push(`Property ${b} must be an object${C.type?" ("+C.type+")":""}`);let I=C.properties;for(let U=0,v=I.length;U<v;U++){let B=I[U],Q=L(R[B.name],B,b+"."+B.name);Q&&(R[B.name]=Q)}}else switch(C.type){case"Int":(typeof R!="number"||R>>0!==R)&&(g||(g=[])).push(`Property ${b} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(g||(g=[])).push(`Property ${b} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(g||(g=[])).push(`Property ${b} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(I=>typeof I=="string")||(g||(g=[])).push(`Property ${b} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(g||(g=[])).push(`Property ${b} must be a string`);break;case"Boolean":typeof R!="boolean"&&(g||(g=[])).push(`Property ${b} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(g||(g=[])).push(`Property ${b} must be a Date`)}break;case"BigInt":if(typeof R!="bigint"){if(typeof R=="string"||typeof R=="number")return BigInt(R);(g||(g=[])).push(`Property ${b} must be a bigint`)}break;case"Bytes":R instanceof Uint8Array||(g||(g=[])).push(`Property ${b} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(C.elements)for(let I=0,U=R.length;I<U;I++){let v=R[I],B=L(v,C.elements,b+"[*]");B&&(R[I]=B)}}else(g||(g=[])).push(`Property ${b} must be a Buffer or Uint8Array`);break}C.nullable===!1&&R==null&&(g||(g=[])).push(`Property ${b} is required (and not does not allow null values)`)},"validateValue");for(let R=0,C=p.length;R<C;R++){let b=p[R];if(b.relationship)continue;let I=L(m[b.name],b,b.name);I&&(m[b.name]=I)}if(g)throw new gs.ClientError(g.join(". "))}getUpdatedTime(){return this[hE]}wasLoadedFromSource(){return y?!!this[yR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let L of m){if(!L.name)throw new gs.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new gs.ClientError("Attribute names cannot include backticks or forward slashes");g.push(L)}return ct({table:n,database:c,schemaDefined:_,attributes:g}),We.indexingOperation}static async removeAttributes(m){let g=p.filter(L=>!m.includes(L.name));return ct({table:n,database:c,schemaDefined:_,attributes:g}),We.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,L=5e3,R=1e3,C;g>L&&!m?.exactCount&&(C=R);let b=0;for(let{value:I}of i.getRange({start:!0,lazy:!0,limit:C}))I!=null&&b++;if(C){let I=b;b=0;for(let{value:he}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))he!=null&&b++;let U=C*2,v=(b+I)/U,B=Math.pow((b-I+1)/C/2,2)+v*(1-v)/U,Q=Math.max(Math.sqrt(B)*g,1),X=Math.round(v*g),Qe=Math.max(X-1.96*Q,0),Ue=Math.min(X+1.96*Q,g),se=Math.pow(10,Math.round(Math.log10(Q)));return se>X&&(se=se/10),b=Math.round(X/se)*se,{recordCount:b,estimatedRange:[Math.round(Qe),Math.round(Ue)]}}return{recordCount:b}}static updatedAttributes(){Vn=this.propertyResolvers={$id:(m,g,L)=>L.key,$updatedtime:(m,g,L)=>L.version,$record:(m,g,L)=>L?{value:m}:m};for(let m of this.attributes){m.resolve=null;let g=m.relationship;if(g)if(xR=!0,g.to)m.elements?.definition?(Vn[m.name]=m.resolve=(L,R,C)=>{let b=L[g.from?g.from:t],I=m.elements.definition.tableClass;return C?_c({attribute:g.to,value:b},zr(R).getReadTxn(),!1,I).asArray:I.search([{attribute:g.to,value:b}],R).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${n}" must have an array type referencing a table as the elements`);else if(g.from){let L=m.definition||m.elements?.definition;L?(Vn[m.name]=m.resolve=(R,C,b)=>{let I=R[g.from];if(I!==void 0){if(m.elements){let U,v=I.map(B=>{let Q=b?L.tableClass.primaryStore.getEntry(B,{transaction:zr(C).getReadTxn()}):L.tableClass.get(B,C);return Q?.then&&(U=!0),Q});return g.filterMissing?U?Promise.all(v).then(B=>B.filter(RH)):v.filter(RH):U?Promise.all(v):v}return b?L.tableClass.primaryStore.getEntry(I,{transaction:zr(C).getReadTxn()}):L.tableClass.get(I,C)}},m.set=(R,C)=>{if(Array.isArray(C)){let b=C.map(I=>I[Le]||I[L.tableClass.primaryKey]);R[g.from]=b}else{let b=C[Le]||C[L.tableClass.primaryKey];R[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${n}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${n}" must use either "from" or "to" arguments`)}Ql(this,this)}static async deleteHistory(m=0){let g;for(let{key:L,value:R}of u.getRange({start:0,end:m}))await El(),Mr(R).tableId===s&&(g=u.remove(L));await g}static async*getHistory(m=0,g=1/0){for(let{key:L,value:R}of u.getRange({start:m,end:g})){await El();let C=Mr(R);C.tableId===s&&(yield{id:C.recordId,localTime:L,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(m){let g=[],L=i.getEntry(m);if(!L)return g;let R=L.localTime,C=0;do{await El();let b=u.get(R);if(b){let I=Mr(b);g.push({id:I.recordId,localTime:R,version:I.version,type:I.type,value:I.getValue(i),user:I.user}),R=I.previousLocalTime}else break}while(C<1e3&&R);return g.reverse()}static cleanup(){W?.remove()}}We.updatedAttributes();let QH=We.prototype;return QH[pH]=!0,d&&We.setTTLExpiration(d/1e3),V&&zH(),We;function bl(Y,m,g){let L;for(let R in r){let C=r[R],b=C.isIndexing,I=g?.[R],U=m?.[R];if(I===U&&!b)continue;L=!0;let v=C.indexNulls,B=(0,ml.getIndexedValues)(U,v);if(B){mH&&C.prefetch(B.map(Q=>({key:Q,value:Y})),TH);for(let Q=0,X=B.length;Q<X;Q++)C.remove(B[Q],Y)}if(B=(0,ml.getIndexedValues)(I,v),B){mH&&C.prefetch(B.map(Q=>({key:Q,value:Y})),TH);for(let Q=0,X=B.length;Q<X;Q++)C.put(B[Q],Y)}}return L}a(bl,"updateIndices");function qa(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>SH)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)return!0;break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,Ro.writeKey)(Y,zre,0)>SH)throw new Error("Primary key size is too large: "+Y.length);return!0}a(qa,"checkValidId");function CE(Y,m,g,L,R){let C=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,Y);let b=i.getEntry(Y,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),R(b,Y)},"whenPrefetched");return L?C():ne>0?(ne--,C()):new Promise((b,I)=>{ne===0?(ne--,i.prefetch([Y],()=>{U(),v()})):(re.push(Y),be.push(v),re.length>WH&&(ne--,U()));function U(){if(re.length>0){let B=be;i.prefetch(re,()=>{ne===-1?U():ne++;for(let Q of B)Q()}),re=[],be=[],ot>2&&ot--}else ne=ot,ot<KH&&ot++}a(U,"prefetch");function v(){try{b(C())}catch(B){I(B)}}a(v,"load")})}a(CE,"loadLocalRecord");function Nl(Y){if(!Y)return;let m=Y.role.permission;if(m.super_user)return Jre;let g=m[c],L,R=g?.tables;if(R)return R[n];if(c==="data"&&(L=m[n])&&!L.tables)return L}a(Nl,"getTablePermissions");function LE(Y,m,g,L){if(y){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(dl|fl)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,us(!R,"cache-hit",n)),R){let C=FR(Y,m,g).then(b=>(b?.value?.[ye]&&nt.error("Can not assign a record with a record property"),g&&(b?.version>(g.lastModified||0)&&(g.lastModified=b.version),g.lastRefreshed=Date.now()),b));if(g?.onlyIfCached||m?.value&&L?.allowStaleWhileRevalidate?.(m,Y)){if(C.catch(b=>nt.warn(b)),g?.onlyIfCached&&!L.doesExist())throw new gs.ServerError("Entry is not cached",504);return}else return C}}}a(LE,"ensureLoadedFromSource");function zr(Y){let m=Y?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new wi,m.lmdbDb=i,m;m=g}while(!0)}else return new Xl}a(zr,"txnForContext");function DE(Y,m,g){if(!Y)return;wE=Y;let L=Y.value||Y.deref?.()||(wE=i.getEntry(Y.key))?.value;if(typeof m=="object"){let C=Vn,b=L;for(let I=0,U=m.length;I<U;I++){let v=m[I],B=C?.[v];b=B?B(b,g):b?.[v],C=B?.definition?.tableClass?.propertyResolvers}return b}let R=Vn[m];return R?R(L,g):L[m]}a(DE,"getAttributeValue");async function FR(Y,m,g){let L=m?.metadataFlags,R=m?.version,C,b;if(!i.attemptLock(Y,R,()=>{clearTimeout(b);let B=i.getEntry(Y);!B||!B.value||B.metadataFlags&(dl|fl)?C(FR(Y,i.getEntry(Y),g)):C(B)}))return new Promise(B=>{C=B,b=setTimeout(()=>{i.unlock(Y,R)},Qre)});let I=m?.value,U={requestContext:g,replacingRecord:I,replacingVersion:R,source:null,resourceCache:g?.resourceCache},v=g?.responseHeaders;return new Promise((B,Q)=>{let X;wR(Ke(U,async Qe=>{let Ue=performance.now(),se,he,Lt;try{for(let ce of We.sources)if(ce.get&&(!ce.get.reliesOnPrototype||ce.prototype.get)&&(U.source=ce,se=await ce.get(Y,U),se))break;Lt=L&dl;let Me=U.lastModified||Lt&&R;he=Lt||Me>R||!I,Me||(Me=(0,ml.getNextMonotonicTime)());let Jr=performance.now()-Ue;if(Gr(Jr,"cache-resolution",n),v&&v.append("Server-Timing",`cache-resolve;dur=${Jr.toFixed(2)}`),Qe.timestamp=Me,d&&!U.expiresAt&&(U.expiresAt=Date.now()+d),se){if(typeof se!="object")throw new Error("Only objects can be cached and stored in tables");typeof se.toJSON=="function"&&(se=se.toJSON()),t&&se[t]!==Y&&(se[t]=Y)}X=!0,B({version:Me,value:se})}catch(Me){Me.message+=` while resolving record ${Y} for ${n}`,I&&((Me.code==="ECONNRESET"||Me.code==="ECONNREFUSED"||Me.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(Me.statusCode===500||Me.statusCode===502||Me.statusCode===503||Me.statusCode===504))?(B({version:R,value:I}),nt.trace(Me.message,"(returned stale record)")):Q(Me),U.transaction.abort();return}if(g?.noCacheStore){U.transaction.abort();return}zr(U).addWrite({key:Y,store:i,entry:m,nodeName:"source",commit:(Me,Jr)=>{if(Jr?.version!==R)return;let ce=bl(Y,I,se);se?(Bt.put?.(U,Y,se),S(Y,se,Jr,Me,0,E&&he||null,U,U.expiresAt,"put",!!Lt)):(Bt.delete?.(U,Y),E||h?S(Y,null,Jr,Me,0,E&&he||null,U,0,"delete",!!Lt):i.remove(Y,R))}})}),()=>{i.unlock(Y,R)},Qe=>{i.unlock(Y,R),X&&nt.error("Error committing cache update",Qe)})})}a(FR,"getFromSource");function UE(){if(As!==HR&&(HR=As,(0,go.getWorkerIndex)()===(0,go.getWorkerCount)()-1)){if(Ol&&clearTimeout(Ol),!As)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let m=Math.ceil((Date.now()-Y.getTime())/As)*As+Y.getTime(),g=a(L=>{nt.trace(`Scheduled next cleanup scan at ${new Date(L)}ms`),Ol=setTimeout(()=>H=H.then(async()=>{if(g(Math.max(L+As,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ol);return}let R=50,C=new Array(R),b=0;nt.trace(`Starting cleanup scan for ${n}`);try{let I=0;for(let{key:U,value:v,version:B,expiresAt:Q}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let X;v===null&&!E&&B+Wre<Date.now()?X=i.remove(U,B):Q&&Q+f<Date.now()&&(X=We.evict(U,v,B),I++),X&&(await C[b],C[b]=X.catch(Qe=>{nt.error("Cleanup error",Qe)}),++b>=R&&(b=0)),await El()}nt.trace(`Finished cleanup scan for ${n}, evicted ${I} entries`)}catch(I){nt.trace(`Error in cleanup scan for ${n}:`,I)}}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(UE,"scheduleCleanup");function GR(){W=u?.addDeleteRemovalCallback(s,Y=>{let m=i.getEntry(Y);m?.value===null&&i.remove(Y,m.version)})}a(GR,"addDeleteRemoval");function zH(){(0,go.getWorkerIndex)()===0&&setInterval(async()=>{try{let Y=V.name,m=r[Y];if(!m)throw new Error(`expiresAt attribute ${V} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(g);L?.value?.[Y]<Date.now()&&We.evict(g,L.value,L.version),await El()}}catch(Y){nt.error("Error in evicting old records",Y)}},Kre).unref()}a(zH,"runRecordExpirationEviction")}function IR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function TH(){}function Xre(e){OH=e}function mE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!jre.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,pE.autoCast)(e):e}function gH(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function wR(e,t,r){return e?.then?e.then(t,r):t(e)}function hl(e,t){e[dn]=t,e[ye]=t?.value??null,e[hE]=t?.version}function RH(e){return e!=null}var qs,EE,ml,AH,Tl,gs,pl,Sl,nt,Ro,go,pE,Yre,OH,Kre,Wre,mH,Qre,hE,pH,dn,NR,yR,_l,dl,fl,zre,SH,Jre,ahe,jre,El,vf=ge(()=>{qs=M(w()),EE=require("lmdb"),ml=M(Lr()),AH=require("lodash");ws();nh();Tl=M(j());hH();gs=M(Z()),pl=M(On()),Sl=M(Us());Se();Zl();nt=M(q());Jl();Ci();Ro=require("ordered-binary"),go=M(at());Po();pE=M(z());Tc();ni();Yre=new Uint8Array(9);Yre[8]=192;Kre=6e4,Wre=864e5;Tl.initSync();mH=Tl.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Qre=1e4,hE=Symbol.for("version"),pH=Symbol.for("incremental-update"),dn=Symbol("entry"),NR=Symbol("is-saving"),yR=Symbol("loaded-from-source"),_l={isNotification:!0,ensureLoaded:!1},dl=1,fl=8,zre=Buffer.allocUnsafeSlow(8192),SH=1978,Jre={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ahe=(0,pE.convertToMS)(Tl.get(qs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(SE,"makeTable");a(IR,"attributesAsObject");a(TH,"noop");a(Xre,"setServerUtilities");jre=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(mE,"coerceType");a(gH,"isDescendantId");El=a(()=>new Promise(setImmediate),"rest");a(wR,"when");a(hl,"updateResource");a(RH,"exists")});var Ge={};ze(Ge,{database:()=>Qc,databases:()=>Ze,dropDatabase:()=>Cp,dropTableMeta:()=>nse,getDatabases:()=>Ps,getTables:()=>Zre,onUpdatedTable:()=>rR,readMetaDb:()=>gl,resetDatabases:()=>ese,table:()=>ct,tables:()=>Ur});function Zre(){return OE||Ps(),Ur||{}}function Ps(){if(OE)return Ze;OE=!0,Ga=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Xe.join)((0,Zt.getHdbBasePath)(),Wr.DATABASES_DIR_NAME),t=(0,Zt.get)(Wr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(Wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Kr.existsSync)(e)?e:(0,Xe.join)((0,Zt.getHdbBasePath)(),Wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Kr.existsSync)(e))for(let r of(0,Kr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&gl((0,Xe.join)(e,r.name),null,s)}if((0,Kr.existsSync)((0,Fa.getBaseSchemaPath)())){for(let r of(0,Kr.readdirSync)((0,Fa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Xe.join)((0,Fa.getBaseSchemaPath)(),r.name),n=(0,Xe.join)((0,Fa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Kr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(n,i.name);gl((0,Xe.join)(s,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Kr.existsSync)(n))for(let o of(0,Kr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&gl((0,Xe.join)(n,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,Kr.existsSync)(u)&&gl(u,o,r,null,!0)}}for(let r in Ze){let s=Ga.get(r);if(s){let n=Ze[r];r.includes("delete")&&Rs.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Rs.trace(`delete table class ${i}`),delete n[i])}else if(delete Ze[r],r==="data"){for(let n in Ur)delete Ur[n];delete Ur[bE]}}return Ga=null,Ze}}function ese(){OE=!1;for(let[,e]of Ri)e.needsDeletion=!0;Ps();for(let[e,t]of Ri)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ri.delete(e));return Ze}function gl(e,t,r=DR,s,n){let i=new CR.default(e,!1);try{let o=Ri.get(e);o?o.needsDeletion=!1:(o=(0,gE.open)(i),Ri.set(e,o));let c=new Ao.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(TE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Kr.existsSync)(s)&&(i.path=s,_=(0,gE.open)(i),_.isLegacy=!0):_=o_(o));let l=IH(r),d=l[bE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let W of p)if(W.is_hash_attribute||W.isPrimaryKey){S=W;break}if(!S){Rs.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],O={},y=[],F,K,H=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Wr.CONFIG_PARAMS.LOGGING_AUDITLOG),D=S.trackDeletes,$=S.expiration,V=S.eviction;if(A)O=A.indices,y=A.attributes,A.schemaVersion++;else{F=S.tableId,F?F>=(u.get(xa)||0)&&u.putSync(xa,F+1):(S.tableId=F=u.get(xa),F||(F=1),u.putSync(xa,F+1),u.putSync(S.key,S));let W=new Ao.default(!S.is_hash_attribute,S.is_hash_attribute);K=__(o.openDB(S.key,W)),K.rootStore=o,K.tableId=F}for(let W of p){W.attribute=W.name;try{if(!W.is_hash_attribute&&(W.indexed||W.attribute&&!W.name)){if(!O[W.name]){let be=new Ao.default(!W.is_hash_attribute,W.is_hash_attribute);O[W.name]=o.openDB(W.key,be),O[W.name].indexNulls=W.indexNulls}let re=y.find(be=>be.name===W.name);re?y.splice(y.indexOf(re),1,W):y.push(W)}}catch(re){Rs.error("Error trying to update attribute",W,y,O,re)}}if(!A){A=wH(l,E,SE({primaryStore:K,auditStore:_,audit:H,expirationMS:$&&$*1e3,evictionMS:V&&V*1e3,trackDeletes:D,tableName:E,tableId:F,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:O,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let W of UR)W(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function IH(e){let t=Ze[e];if(t||(e==="data"?t=Ze[e]=Ur:e==="system"?Object.defineProperty(Ze,"system",{value:t=Object.create(null),configurable:!0}):t=Ze[e]=Object.create(null)),Ga&&!Ga.has(e)){let r=new Set;t[bE]=r,Ga.set(e,r)}return t}function wH(e,t,r){return e[t]=r,r}function Qc({database:e,table:t}){e||(e=DR),Ps();let r=IH(e),s=(0,Xe.join)((0,Zt.getHdbBasePath)(),Wr.DATABASES_DIR_NAME),n=(0,Zt.get)(Wr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,Zt.get)(Wr.CONFIG_PARAMS.STORAGE_PATH)||((0,Kr.existsSync)(s)?s:(0,Xe.join)((0,Zt.getHdbBasePath)(),Wr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(s,(i?t:e)+".mdb"),c=Ri.get(o);if(!c){let u=new CR.default(o,!1);c=(0,gE.open)(u),Ri.set(o,c)}return c}async function Cp(e){if(!Ze[e])throw new Error("Schema does not exist");let t=Ze[e];for(let r in t){let n=t[r].primaryStore.rootStore;Ri.delete(n.path),n.status==="open"&&(await n.close(),await bH.remove(n.path))}if(e==="data"){for(let r in Ur)delete Ur[r];delete Ur[bE]}delete Ze[e]}function ct({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=DR);let l=Qc({database:t,table:e}),d=Ze[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new Ao.default(!1);for(let D of i)D.attribute?(D.name=D.attribute,D.indexed=!0):D.attribute=D.name,D.expiresAt&&(D.indexed=!0);let O,y;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let D=l.auditStore;D||(D=o_(l)),h=i.find(re=>re.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Zt.get)(Wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Rs.trace(`${e} table loading, opening primary store`);let $=new Ao.default(!1,!0),V=e+"/",W=__(l.openDB(V,$));W.rootStore=l,S=l.dbisDb=l.openDB(TE.INTERNAL_DBIS_NAME,A),W.tableId=S.get(xa),W.tableId||(W.tableId=1),S.putSync(xa,W.tableId+1),h.tableId=W.tableId,f=wH(d,e,SE({primaryStore:W,auditStore:D,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:W.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,O=!0,H(),S.put(V,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(TE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let F=[];for(let{key:D,value:$}of S.getRange({start:!0})){let[V,W]=D.toString().split("/");if(W===""&&(W=$.name),W){if(V!==e)continue}else W=V;if(!i.find(be=>be.name===W)?.indexed&&$.indexed&&!$.isPrimaryKey){H(),O=!0,S.remove(D);let be=f.indices[V];be&&F.push(be)}}let K=[];try{for(let D of i||[]){if(D.relationship)continue;let $=e+"/"+(D.name||"");Object.defineProperty(D,"key",{value:$,configurable:!0});let V=S.get($);if(D.isPrimaryKey){if(V=V||S.get($=e+"/")||{},o!==f.audit||(+r||void 0)!==(+V.expiration||void 0)||(+s||void 0)!==(+V.eviction||void 0)){let re=Object.assign({},V);typeof o=="boolean"&&(o&&f.enableAuditing(o),re.audit=o),r&&(re.expiration=+r),s&&(re.eviction=+s),O=!0,H(),S.put($,re)}continue}V?.attribute&&!V.name&&(V.indexed=!0);let W=!V||V.type!==D.type||V.indexed!==D.indexed||JSON.stringify(V.attributes)!==JSON.stringify(D.attributes)||JSON.stringify(V.elements)!==JSON.stringify(D.elements);if(D.indexed){let re=new Ao.default(!0,!1),be=l.openDB($,re);(W||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Rl.workerData?.restartNumber)&&(O=!0,H(),V=S.get($),(W||V.indexingPID&&V.indexingPID!==process.pid||V.restartNumber<Rl.workerData?.restartNumber)&&(O=!0,D.lastIndexedKey=V?.lastIndexedKey||!1,D.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(D,"dbi",{value:be}),D.indexNulls===void 0&&(D.indexNulls=!0),K.push(D)),S.put($,D)),V?.indexNulls&&D.indexNulls===void 0&&(D.indexNulls=!0),be.indexNulls=D.indexNulls,p[D.name]=be}else W&&(O=!0,H(),S.put($,D))}}finally{y&&y()}if(O&&(f.schemaVersion++,f.updatedAttributes()),Rs.trace(`${e} table loading, running index`),K.length>0||F.length>0?f.indexingOperation=sse(f,K,F):O&&RE.signalSchemaChange(new AE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,O)for(let D of UR)D(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Rs.trace(`${e} table loaded`),f;function H(){y||l.transactionSync(()=>({then(D){y=D}}))}a(H,"startTxn")}async function sse(e,t,r){try{let s=e.schemaVersion;await RE.signalSchemaChange(new AE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,NH.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Rs.error(f)}),Rl.workerData&&Rl.workerData.restartNumber!==yH.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>tse?await n:u>rse&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await RE.signalSchemaChange(new AE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Rs.error("Error in indexing",s)}}function nse({table:e,database:t}){let r=Qc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function rR(e){UR.push(e)}var Zt,TE,gE,Xe,Kr,Fa,Ao,CR,Wr,bH,LR,NH,RE,AE,Rl,Rs,yH,DR,bE,Ur,Ze,xa,UR,OE,Ri,Ga,tse,rse,Se=ge(()=>{Zt=M(j()),TE=M(ft()),gE=require("lmdb"),Xe=require("path"),Kr=require("fs"),Fa=M(Ye());vf();Ao=M(d_()),CR=M(E_()),Wr=M(w()),bH=M(require("fs-extra")),LR=require("../../index"),NH=M(Lr()),RE=M(On()),AE=M(Us()),Rl=require("worker_threads"),Rs=M(q()),yH=M(at());Po();Tc();DR="data",bE=Symbol("defined-tables");(0,Zt.initSync)();Ur=Object.create(null),Ze=Object.create(null);(0,LR._assignPackageExport)("databases",Ze);(0,LR._assignPackageExport)("tables",Ur);xa=Symbol.for("next-table-id"),UR=[],Ri=new Map;a(Zre,"getTables");a(Ps,"getDatabases");a(ese,"resetDatabases");a(gl,"readMetaDb");a(IH,"ensureDB");a(wH,"setTable");a(Qc,"database");a(Cp,"dropDatabase");a(ct,"table");tse=1e3,rse=10;a(sse,"runIndexing");a(nse,"dropTableMeta");a(rR,"onUpdatedTable")});var z=T((mhe,kH)=>{"use strict";var Ai=require("path"),MH=require("fs-extra"),Or=q(),CH=require("fs-extra"),NE=require("os"),ise=require("net"),ose=require("recursive-iterator"),it=w(),ase=bA(),LH=require("papaparse"),yE=require("moment"),{inspect:cse}=require("util"),DH=require("is-number"),hhe=require("lodash"),use=require("minimist"),lse=require("https"),_se=require("http"),{hdb_errors:IE}=Z(),dse=/^((\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)))$/,PH=require("util").promisify(setTimeout),fse=100,Ese=5,hse="",mse=4,UH={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};kH.exports={isEmpty:Qr,isEmptyOrZeroLength:fn,arrayHasEmptyValues:Tse,arrayHasEmptyOrZeroLengthValues:gse,buildFolderPath:Rse,isBoolean:vH,errorizeMessage:pse,stripFileExtension:Ose,autoCast:bse,autoCastJSON:BH,autoCastJSONDeep:PR,removeDir:Nse,compareVersions:yse,isCompatibleDataVersion:Ise,escapeRawValue:wse,unescapeValue:Cse,stringifyProps:Lse,timeoutPromise:Use,isClusterOperation:Pse,getClusterUser:Bse,checkGlobalSchemaTable:vse,getHomeDir:xH,getPropsFilePath:Dse,promisifyPapaParse:Hse,removeBOM:FH,createEventPromise:xse,checkProcessRunning:Fse,checkSchemaTableExist:Gse,checkSchemaExists:GH,checkTableExists:qH,getStartOfTomorrowInSeconds:qse,getLimitKey:kse,isObject:Ase,isNotEmptyAndHasValue:Sse,autoCasterIsNumberCheck:HH,backtickASTSchemaItems:Vse,isPortTaken:Mse,createForkArgs:$se,autoCastBoolean:Yse,async_set_timeout:PH,getTableHashAttribute:Kse,doesSchemaExist:Wse,doesTableExist:Qse,stringifyObj:zse,ms_to_time:Jse,changeExtension:Xse,getEnvCliRootPath:vR,noBootFile:jse,httpRequest:Zse,transformReq:ene,convertToMS:tne,PACKAGE_ROOT:it.PACKAGE_ROOT};function pse(e){return e instanceof Error?e:new Error(e)}a(pse,"errorizeMessage");function Qr(e){return e==null}a(Qr,"isEmpty");function Sse(e){return!Qr(e)&&(e||e===0||e===""||vH(e))}a(Sse,"isNotEmptyAndHasValue");function fn(e){return Qr(e)||e.length===0||e.size===0}a(fn,"isEmptyOrZeroLength");function Tse(e){if(Qr(e))return!0;for(let t=0;t<e.length;t++)if(Qr(e[t]))return!0;return!1}a(Tse,"arrayHasEmptyValues");function gse(e){if(fn(e))return!0;for(let t=0;t<e.length;t++)if(fn(e[t]))return!0;return!1}a(gse,"arrayHasEmptyOrZeroLengthValues");function Rse(...e){try{return e.join(Ai.sep)}catch{console.error(e)}}a(Rse,"buildFolderPath");function vH(e){return Qr(e)?!1:e===!0||e===!1}a(vH,"isBoolean");function Ase(e){return Qr(e)?!1:typeof e=="object"}a(Ase,"isObject");function Ose(e){return fn(e)?hse:e.slice(0,-mse)}a(Ose,"stripFileExtension");function bse(e){return Qr(e)||e===""||typeof e!="string"?e:UH[e]!==void 0?UH[e]:HH(e)===!0?Number(e):dse.test(e)?new Date(e):e}a(bse,"autoCast");function BH(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(BH,"autoCastJSON");function PR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=PR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=PR(r);s!==r&&(e[t]=s)}return e}else return BH(e)}a(PR,"autoCastJSONDeep");function HH(e){if(e.startsWith("0.")&&DH(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&DH(e))}a(HH,"autoCasterIsNumberCheck");async function Nse(e){if(fn(e))throw new Error(`Directory path: ${e} does not exist`);try{await CH.emptyDir(e),await CH.remove(e)}catch(t){throw Or.error(`Error removing files in ${e} -- ${t}`),t}}a(Nse,"removeDir");function yse(e,t){if(fn(e)){Or.info("Invalid current version sent as parameter.");return}if(fn(t)){Or.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(yse,"compareVersions");function Ise(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Ise,"isCompatibleDataVersion");function wse(e){if(Qr(e))return e;let t=String(e);return t==="."?it.UNICODE_PERIOD:t===".."?it.UNICODE_PERIOD+it.UNICODE_PERIOD:t.replace(it.FORWARD_SLASH_REGEX,it.UNICODE_FORWARD_SLASH)}a(wse,"escapeRawValue");function Cse(e){if(Qr(e))return e;let t=String(e);return t===it.UNICODE_PERIOD?".":t===it.UNICODE_PERIOD+it.UNICODE_PERIOD?"..":String(e).replace(it.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Cse,"unescapeValue");function Lse(e,t){if(Qr(e))return Or.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+NE.EOL}!fn(s)&&s[0]===";"?r+=" "+s+n+NE.EOL:fn(s)||(r+=s+"="+n+NE.EOL)}catch{Or.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Lse,"stringifyProps");function xH(){let e;try{e=NE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xH,"getHomeDir");function Dse(){let e=Ai.join(xH(),it.HDB_HOME_DIR_NAME,it.BOOT_PROPS_FILE_NAME);return MH.existsSync(e)||(e=Ai.join(__dirname,"../","hdb_boot_properties.file")),e}a(Dse,"getPropsFilePath");function Use(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Use,"timeoutPromise");async function Mse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=ise.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Mse,"isPortTaken");function Pse(e){try{return it.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Or.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Pse,"isClusterOperation");function vse(e,t){let r=(Se(),te(Ge)).getDatabases();if(!r[e])return IE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return IE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(vse,"checkGlobalSchemaTable");function Bse(e,t){if(Qr(t)){Or.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Qr(e)||fn(e)){Or.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Or.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Or.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Bse,"getClusterUser");function Hse(){LH.parsePromise=function(e,t,r){return new Promise(function(s,n){LH.parse(e,{header:!0,transformHeader:FH,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Hse,"promisifyPapaParse");function FH(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(FH,"removeBOM");function xse(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Or.info(`Got cluster status event response: ${cse(n)}`);try{i.cancel()}catch{Or.error("Error trying to cancel timeout.")}s(n)})})}a(xse,"createEventPromise");async function Fse(e){let t=!0,r=0;do await PH(fse*r++),(await ase.findPs(e)).length>0&&(t=!1);while(t&&r<Ese);if(t)throw new Error(`process ${e} was not started`)}a(Fse,"checkProcessRunning");function Gse(e,t){let r=GH(e);if(r)return r;let s=qH(e,t);if(s)return s}a(Gse,"checkSchemaTableExist");function GH(e){let{getDatabases:t}=(Se(),te(Ge));if(!t()[e])return IE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(GH,"checkSchemaExists");function qH(e,t){let{getDatabases:r}=(Se(),te(Ge));if(!r()[e][t])return IE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(qH,"checkTableExists");function qse(){let e=yE().utc().add(1,it.MOMENT_DAYS_TAG).startOf(it.MOMENT_DAYS_TAG).unix(),t=yE().utc().unix();return e-t}a(qse,"getStartOfTomorrowInSeconds");function kse(){return yE().utc().format("DD-MM-YYYY")}a(kse,"getLimitKey");function Vse(e){try{let t=new ose(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){Or.error("Got an error back ticking items."),Or.error(t)}}a(Vse,"backtickASTSchemaItems");function $se(e){return[e]}a($se,"createForkArgs");function Yse(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Yse,"autoCastBoolean");function Kse(e,t){let{getDatabases:r}=(Se(),te(Ge)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Kse,"getTableHashAttribute");function Wse(e){let{getDatabases:t}=(Se(),te(Ge));return t()[e]!==void 0}a(Wse,"doesSchemaExist");function Qse(e,t){let{getDatabases:r}=(Se(),te(Ge));return r()[e]?.[t]!==void 0}a(Qse,"doesTableExist");function zse(e){try{return JSON.stringify(e)}catch{return e}}a(zse,"stringifyObj");function Jse(e){let t=yE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Jse,"ms_to_time");function Xse(e,t){let r=Ai.basename(e,Ai.extname(e));return Ai.join(Ai.dirname(e),r+t)}a(Xse,"changeExtension");function vR(){if(process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=use(process.argv);if(e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[it.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(vR,"getEnvCliRootPath");var MR;function jse(){if(MR)return MR;let e=vR();vR()&&MH.pathExistsSync(Ai.join(e,it.HDB_CONFIG_FILE))&&(MR=!0)}a(jse,"noBootFile");function Zse(e,t){let r;return e.protocol==="http:"?r=_se:r=lse,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Zse,"httpRequest");function ene(e){if(!e.schema&&!e.database){e.schema=it.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(ene,"transformReq");function tne(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(tne,"convertToMS")});var BR=w(),VH=z(),Al=q(),rne=An(),sne=Br(),nne=Ug(),{start:ine}=(tR(),te(nE)),{closeConnection:one}=mt(),$H=require("moment"),YH=Hf(),{cloneDeep:ane}=require("lodash"),cne=process.env[BR.PROCESS_NAME_ENV_PROP],Oo=cne.substring(4);a(async function(){let t={id:Oo,request:void 0},r=0;try{Al.notify("Starting job:",Oo),ine(),rne.setSchemaDataToGlobal(),await sne.setUsersToGlobal();let s=await YH.getJobById(Oo);if(VH.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Oo}`);let{request:n}=s[0];if(VH.isEmptyOrZeroLength(n))throw new Error("Did not find job request in hdb_job table, unable to proceed");n=ane(n);let i=nne.getOperationFunction(n);Al.trace("Running operation:",n.operation,"for job",Oo);let o=await i.job_operation_function(n);Al.trace("Result from job:",Oo,o),t.status=BR.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=$H().valueOf(),Al.notify("Successfully completed job:",Oo)}catch(s){r=1,Al.error(s),t.status=BR.JOB_STATUS_ENUM.ERROR,t.message=s.message?s.message:s,t.end_datetime=$H().valueOf()}finally{await YH.updateJob(t),await one(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();
26
+ `},compressible:!1,q:.8});$t.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()}});rv={type:"application/json",serializeStream:mc,serialize:Qu,deserialize:n7,q:.8};$t.set("*/*",rv);$t.set("",rv);a(n7,"tryJSONParse");a(_g,"registerContentHandlers");s7=require("fastify-plugin"),i7=s7(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Sf(n.raw);s.type(c),s.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Sf,"findBestSerializer");jP=ag.default.get(cg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Tf,"serialize");a(hi,"serializeMessage");a(o7,"streamToBuffer");a(ho,"getDeserializer");a(ZP,"deserializerUnknownType");a(a7,"transformIterable")});function ju(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let A=o[0],I=Bs(n.attributes,A);if(I.relationship){if(o.length<2)throw new mo.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=I.definition?.tableClass||I.elements?.definition?.tableClass,B=new Map,K=ju({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,w,s,B);if(I.relationship.to){i[o[0]]=B;let q=!!Bs(w.attributes,I.relationship.to)?.elements;K=_7(K,I,w.primaryStore,q,B)}if(I.relationship.from){let q=a(P=>ju({attribute:I.relationship.from,value:P},t,r,n,s,B),"searchEntry");I.elements?(i[o[0]]=B,K=d7(K,I,w.primaryStore,B,q)):K=K.flatMap(q)}return K}else if(o.length===1)o=o[0];else throw new mo.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(iv[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=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,l=c.slice(0),l[l.length-1]=as.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case ze.SEARCH_TYPES.EQUALS:case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new mo.ClientError(`Unknown query comparator "${u}"`)}if(r){let A=_;_=l,l=A,A=!f,f=!d,d=A}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new mo.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let A=Zu(e);if(!A)throw new mo.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:I,value:w})=>new Promise((B,K)=>setImmediate(()=>{try{B(w&&A(w)?I:dg.SKIP)}catch(q){K(q)}})))}let S={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let A=p.getRange(S).map(I=>I.value==null?dg.SKIP:I);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function Bs(e,t){if(Array.isArray(t))if(t.length>1){let r=Bs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Bs(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 _7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Ti(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),l=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[u];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);l++>100&&(await new Promise(setImmediate),l=0)}}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 d7(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){let c;if(o&&(c=o.next(),!c.done))return c;if(!i)return(async()=>{let u=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>u.has(Ti(d)));let _=0;for await(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(f=>!f(d)))continue}u.set(Ti(l),l),_++>100&&(await new Promise(setImmediate),_=0)}return i=u.values()[Symbol.iterator](),this.next()})();do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Zu(e,t,r,n){if(e.conditions){let c=e.conditions.map(Zu);return e.operator==="or"?u=>c.some(_=>_(u)):u=>c.every(_=>_(u))}let s=e.comparator,i=e[0]??e.attribute,o=e[1]??e.value;if(Array.isArray(i)){if(i.length===0)return()=>!0;if(i.length===1)i=i[0];else if(i.length>1){let c=i[0],u=Bs(t.attributes,c),_=u.definition?.tableClass||u.elements.definition?.tableClass,l=n?.[c],d=Zu({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:s},t,r,l?.[c]?.joined);if(!d)return;if(l){l.filters||(l.filters=[]),l.filters.push(d);return}let f=t.propertyResolvers?.[c];return(E,h)=>{let p,S;return f?(S=f(E,r,h),p=S?.value):p=E[c],p?Array.isArray(p)?p.some(d):d(p,S):!1}}}switch(o instanceof Date&&(o=o.getTime()),iv[s]||s){case ze.SEARCH_TYPES.EQUALS:case void 0:return os(i,c=>c===o);case ze.SEARCH_TYPES.CONTAINS:return os(i,c=>c?.toString().includes(o));case ze.SEARCH_TYPES.ENDS_WITH:case ze.SEARCH_TYPES._ENDS_WITH:return os(i,c=>c?.toString().endsWith(o));case ze.SEARCH_TYPES.STARTS_WITH:case ze.SEARCH_TYPES._STARTS_WITH:return os(i,c=>typeof c=="string"&&c.startsWith(o));case ze.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),os(i,c=>(0,as.compareKeys)(c,o[0])>=0&&(0,as.compareKeys)(c,o[1])<=0);case"gt":case ze.SEARCH_TYPES.GREATER_THAN:case ze.SEARCH_TYPES._GREATER_THAN:return os(i,c=>(0,as.compareKeys)(c,o)>0);case"ge":case ze.SEARCH_TYPES.GREATER_THAN_EQUAL:case ze.SEARCH_TYPES._GREATER_THAN_EQUAL:return os(i,c=>(0,as.compareKeys)(c,o)>=0);case ze.SEARCH_TYPES.LESS_THAN:case"lt":case ze.SEARCH_TYPES._LESS_THAN:return os(i,c=>(0,as.compareKeys)(c,o)<0);case"le":case ze.SEARCH_TYPES.LESS_THAN_EQUAL:case ze.SEARCH_TYPES._LESS_THAN_EQUAL:return os(i,c=>(0,as.compareKeys)(c,o)<=0);case"ne":return os(i,c=>(0,as.compareKeys)(c,o)!==0);default:throw new mo.ClientError(`Unknown query comparator "${s}"`)}}function os(e,t){return r=>{let n=r[e];return typeof n!="object"||!n?t(n):Array.isArray(n)?n.some(t):n instanceof Date?t(n.getTime()):!1}}function fg(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let n;if(t.operator==="or"){n=0;for(let s of t.conditions)n+=s.estimated_count}else{n=1/0;for(let s of t.conditions)n=1/(1/n+1/s.estimated_count)}return t.estimated_count=n,t.estimated_count}let r=t.comparator||t.search_type;if(r===ze.SEARCH_TYPES.EQUALS){let n=t[0]??t.attribute;if(n==null||n===e.primaryKey)t.estimated_count=1;else if(Array.isArray(n)){let s=Bs(e.attributes,n[0]),i=s.definition?.tableClass||s.elements.definition?.tableClass,o=fg(i)({value:t.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[s.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let s=e.indices[n];t.estimated_count=s?s.getValuesCount(t[1]??t.value):1/0}}else r===ze.SEARCH_TYPES.CONTAINS||r===ze.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=sv:t.estimated_count=1/0:r===ze.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=sv:r===ze.SEARCH_TYPES.BETWEEN?t.estimated_count=u7:t.estimated_count=c7;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function gf(e){if(e)if(Si=e,Na.lastIndex=0,f7.test(e))try{let t=Ju(new ya,"");if(gr!==Si.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 '${Si}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ju(e,t){let r=Na,n,s,i,o,c;for(;n=r.exec(Si);){gr=r.lastIndex;let[,u,_]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let l;switch(_){case"=":if(s)if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);else{if(i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=Xu(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=l7[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Xu(u);break;case"|":e.operator="or";case"":case void 0:case"&":if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.conditions.push({comparator:i,attribute:s,value:decodeURIComponent(u)})}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Xu(u)),s=void 0;break;case"(":Na.lastIndex=gr;let d=Ju(u?[]:new ya,")");switch(u){case"":e.conditions.push(d);break;case"limit":switch(d.length){case 1:e.limit=+d[0];break;case 2:e.offset=+d[0],e.limit=d[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(d[0])&&d.length===1&&!d[0].name?(e.select=d[0],e.select.asArray=!0):d.length===1?e.select=d[0]:d.length===2&&d[1]===""?e.select=d.slice(0,1):e.select=d;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=ov(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Si[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");Na.lastIndex=gr,l=Ju([],"}"),l.name=u,e.push(l),Si[gr]===","?r.lastIndex=++gr:o=!0;break;case"[":Na.lastIndex=gr,u?(l=Ju(new ya,"]"),l.name=u):l=Ju(e.conditions?new ya:[],"]"),e.conditions?(e.conditions.push(l),s=null):e.push(l),Si[gr]===","?r.lastIndex=++gr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s)e.conditions.push({comparator:i||"equals",attribute:s,value:decodeURIComponent(u)});else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(Xu(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?E7:Na,r.lastIndex=gr),gr===Si.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Xu(e){return e.indexOf(".")>-1?e.split(".").map(Xu):decodeURIComponent(e)}function ov(e){let t=av(e[0]);return e.length>1&&(t.next=ov(e.slice(1))),t}function av(e){if(Array.isArray(e)){let t=av(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 Ti(e){return Array.isArray(e)?e.join("\0"):e}var mo,ze,as,dg,c7,u7,sv,l7,iv,f7,Na,E7,gr,Si,ya,Rf=Ae(()=>{mo=v(Z()),ze=v(ht()),as=require("ordered-binary"),dg=require("lmdb"),c7=1e8,u7=15e6,sv=1e7,l7={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ju,"searchByIndex");a(Bs,"findAttribute");a(_7,"joinTo");a(d7,"joinFrom");iv={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",sw:"starts_with",ew:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Zu,"filterByType");a(os,"attributeComparator");a(fg,"estimateCondition");f7=/[()[\]|!<>.]|(=\w+=)/,Na=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,E7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(gf,"parseQuery");a(Ju,"parseBlock");a(Xu,"decodeProperty");a(ov,"toSortObject");a(av,"toSortEntry");ya=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(Ti,"flattenKey")});var Af={};Ve(Af,{start:()=>p7});async function m7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&gf(e);let s=new Ei;try{e.responseHeaders=s;let i=e.url.slice(1),o=hg.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Qe(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=ho(r["content-type"],!0)(e.body)}catch(p){throw new tl.ClientError(p,400)}switch(e.authorize=!0,n){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new tl.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new tl.ServerError(`Method ${n} is not recognized`,501)}}),d=200,f;if(l==null)d=n==="GET"||n==="HEAD"?404:204,Eg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){h7[0]=f;let p=String.fromCharCode(34,(Yt[0]&63)+62,(Yt[0]>>6)+(Yt[1]<<2&63)+62,(Yt[1]>>4)+(Yt[2]<<4&63)+62,(Yt[2]>>2)+62,(Yt[3]&63)+62,(Yt[3]>>6)+(Yt[4]<<2&63)+62,(Yt[4]>>4)+(Yt[5]<<4&63)+62,(Yt[5]>>2)+62,(Yt[6]&63)+62,(Yt[6]>>6)+(Yt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):s.setIfNone("ETag",p),Eg.lastModified&&s.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:d,headers:s,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Tf(l,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?po.warn(i):po.info(i):po.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=Tf(i.contentType?i:i.toString(),e,o),o}}function p7(e){Eg=e,!cv&&(cv=!0,hg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return m7(t,r)}),e.server.ws(async(t,r,n)=>{el++;let s=new Nn;uv||(uv=!0,ru(l=>{el>0&&l.push({metric:"ws-connections",connections:el,byThread:!0})}));let i;t.on("error",l=>{i=!0,po.warn(l)});let o;t.on("message",a(function(d){o||(o=ho(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{el--,nn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=hg.getMatch(u);if(nn(!!_,"connection","ws","connect"),!_)t.send(hi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,qr(h=>({count:h.count,total:el}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Qe(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=hi(E.value,r);t.send(h),qr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var po,tl,Yt,h7,Eg,cv,hg,uv,el,lv=Ae(()=>{Sa();ys();po=v(V()),tl=v(Z());Rf();Ec();Ji();Wd();Yt=new Uint8Array(8),h7=new Float64Array(Yt.buffer,0,1),Eg={};a(m7,"http");el=0;a(p7,"start")});var mg=T((nEe,_v)=>{var{recordAction:Of,recordActionBinary:S7}=(ys(),ee(nu)),T7=require("fastify-plugin"),g7=200;_v.exports=T7(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(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Of(o,"duration",_,d,l),S7(s.raw.statusCode<400,"success",_,d,l);let f=g7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Of(performance.now()-c,"transfer",_,d,l),Of(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Of(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var gg=T((sEe,mv)=>{var wf=require("clone"),Cf=et(),R7=J(),yf=M(),A7=V(),bf=require("fs"),pg=require("joi"),{string:If}=pg.types(),{hdb_errors:O7,handleHDBError:rl}=Z(),{HDB_ERROR_MSGS:b7,HTTP_STATUS_CODES:Nf}=O7,{common_validators:Ia}=Kn(),dv=1e9,fv=" is required",N7=["insert","update","upsert"],Sg={database:{presence:!1,format:Ia.schema_format,length:Ia.schema_length},schema:{presence:!1,format:Ia.schema_format,length:Ia.schema_length},table:{presence:!0,format:Ia.schema_format,length:Ia.schema_length},action:{inclusion:{within:N7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},y7={schema:If.required(),table:If.required(),action:If.valid("insert","update","upsert")},{AWS_ACCESS_KEY:I7,AWS_SECRET:w7,AWS_BUCKET:C7,AWS_FILE_KEY:L7,REGION:D7}=yf.S3_BUCKET_AUTH_KEYS,M7={s3:{presence:!0},[`s3.${I7}`]:{presence:!0,type:"String"},[`s3.${w7}`]:{presence:!0,type:"String"},[`s3.${C7}`]:{presence:!0,type:"String"},[`s3.${L7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${D7}`]:{presence:!0,type:"String"}},Ev=wf(Sg);Ev.data.presence={message:fv};var hv=wf(Sg);hv.file_path.presence={message:fv};var U7=Object.assign(wf(Sg),M7),Tg=wf(y7);Tg.csv_url=If.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Tg.passthrough_headers=pg.object();function P7(e){let t=Cf.validateObject(e,Ev);return Lf(e,t)}a(P7,"dataObject");function v7(e){let t=Cf.validateBySchema(e,pg.object(Tg));return Lf(e,t)}a(v7,"urlObject");function B7(e){let t=Cf.validateObject(e,hv);return Lf(e,t)}a(B7,"fileObject");function H7(e){let t=Cf.validateObject(e,U7);return Lf(e,t)}a(H7,"s3FileObject");function Lf(e,t){if(!t){let r=R7.checkGlobalSchemaTable(e.schema,e.table);if(r)return rl(new Error,r,Nf.BAD_REQUEST);if(e.operation===yf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{bf.accessSync(e.file_path,bf.constants.R_OK|bf.constants.F_OK)}catch(n){return n.code===yf.NODE_ERROR_CODES.ENOENT?rl(n,`No such file or directory ${n.path}`,Nf.BAD_REQUEST):n.code===yf.NODE_ERROR_CODES.EACCES?rl(n,`Permission denied ${n.path}`,Nf.BAD_REQUEST):rl(n)}try{let n=bf.statSync(e.file_path).size;if(n>dv)return rl(new Error,b7.MAX_FILE_SIZE_ERR(n,dv),Nf.BAD_REQUEST)}catch(n){A7.error(n),console.error(n)}}}return t}a(Lf,"postValidateChecks");mv.exports={dataObject:P7,urlObject:v7,fileObject:B7,s3FileObject:H7}});var Rg=T((oEe,pv)=>{"use strict";var nl=V(),Df=M();async function x7(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===Df.OPERATIONS_ENUM.INSERT||t.operation===Df.OPERATIONS_ENUM.UPDATE||t.operation===Df.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Df.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(nl.info(i.message),i):i.http_resp_msg?(nl.error(`Error calling operation: ${e.name}`),nl.error(i.http_resp_msg),i):(nl.error(`Error calling operation: ${e.name}`),nl.error(i),i)}}a(x7,"callOperationFunctionAsAwait");pv.exports={callOperationFunctionAsAwait:x7}});var Tv=T((cEe,Sv)=>{"use strict";var Ag=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}},Og=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Sv.exports={BulkLoadFileObject:Ag,BulkLoadDataObject:Og}});var Rv=T((lEe,gv)=>{"use strict";var bg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};gv.exports=bg});var Lg=T((mEe,xv)=>{"use strict";var Mf=rn(),Pf=gg(),q7=require("needle"),Bn=M(),dEe=nt(),wa=J(),{handleHDBError:it,hdb_errors:Lv}=Z(),{HTTP_STATUS_CODES:Kt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:To}=Lv,Ca=V(),Ng=require("papaparse");wa.promisifyPapaParse();var Hn=require("fs-extra"),F7=require("path"),{chain:Av}=require("stream-chain"),Ov=require("stream-json/streamers/StreamArray"),bv=require("stream-json/utils/Batch"),Nv=require("stream-chain/utils/comp"),{finished:yv}=require("stream"),G7=j(),Dv=Rg(),k7=ng(),{BulkLoadFileObject:Ig,BulkLoadDataObject:V7}=Tv(),wg=WT(),{verifyBulkLoadAttributePerms:Mv}=ff(),fEe=Rv(),EEe=St(),hEe=gs(),{databases:$7}=(ge(),ee(xe)),{coerceType:Y7}=(vf(),ee(Dg)),Iv="No records parsed from csv file.",So=`${G7.get("HDB_ROOT")}/tmp`,{schema_regex:K7}=Kn(),wv=1024*1024*2,Cv=5e3,W7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};xv.exports={csvDataLoad:Q7,csvURLLoad:z7,csvFileLoad:J7,importFromS3:X7};async function Q7(e,t){let r=Pf.dataObject(e);if(r)throw it(r,r.message,Kt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=vv(e.schema,e.table),i=Ng.parse(e.data,{header:!0,skipEmptyLines:!0,transform:yg.bind(null,s),dynamicTyping:!1}),o=new wg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Mv(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 it(new Error,c,Kt.BAD_REQUEST,void 0,void 0,!0);let u=new V7(e.action,e.schema,e.table,i.data);return n=await Dv.callOperationFunctionAsAwait(Bv,u,null),n.message===Iv?Iv:Hv(n.records,n.number_written)}catch(s){throw go(s)}}a(Q7,"csvDataLoad");async function z7(e){let t=Pf.urlObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${So}/${r}`;try{await j7(e,r)}catch(s){throw Ca.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),it(s,To(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Ig(this.job_operation_function.name,e.action,e.schema,e.table,n,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Cg(s);return await Uf(n),i}catch(s){throw await Uf(n),go(s)}}a(z7,"csvURLLoad");async function J7(e){let t=Pf.fileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=new Ig(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Bn.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Cg(r)}catch(n){throw go(n)}}a(J7,"csvFileLoad");async function X7(e){let t=Pf.s3FileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=F7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${So}/${s}`;let i=new Ig(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await Z7(s,e);let o=await Cg(i);return await Uf(r),o}catch(n){throw await Uf(r),go(n)}}a(X7,"importFromS3");async function j7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await q7("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 it(n,s,n.statusCode,Bn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}tee(r,e.csv_url),await eee(t,r.raw)}a(j7,"downloadCSVFile");async function Z7(e,t){try{let r=`${So}/${e}`;await Hn.mkdirp(So),await Hn.writeFile(`${So}/${e}`,"",{flag:"a+"});let n=await Hn.createWriteStream(r),s=await k7.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(){Ca.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ca.error(Lt.S3_DOWNLOAD_ERR+" - "+r),it(r,To(Lt.S3_DOWNLOAD_ERR))}}a(Z7,"downloadFileFromS3");async function eee(e,t){try{await Hn.mkdirp(So),await Hn.writeFile(`${So}/${e}`,t)}catch(r){throw Ca.error(Lt.WRITE_TEMP_FILE_ERR),it(r,To(Lt.DEFAULT_BULK_LOAD_ERR))}}a(eee,"writeFileToTempFolder");async function Uf(e){if(e)try{await Hn.access(e),await Hn.unlink(e)}catch{Ca.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Uf,"deleteTempFile");function tee(e,t){if(e.statusCode!==Lv.HTTP_STATUS_CODES.OK)throw it(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Kt.BAD_REQUEST);if(!W7[e.headers["content-type"]])throw it(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Kt.BAD_REQUEST);if(!e.raw)throw it(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Kt.BAD_REQUEST)}a(tee,"validateURLResponse");async function Cg(e){try{let t;switch(e.file_type){case Bn.VALID_S3_FILE_TYPES.CSV:t=await ree(e);break;case Bn.VALID_S3_FILE_TYPES.JSON:t=await nee(e);break;default:throw it(new Error,Lt.DEFAULT_BULK_LOAD_ERR,Kt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return Hv(t.records,t.number_written)}catch(t){throw go(t)}}a(Cg,"fileLoad");async function Uv(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 Mf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Mv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=it(c);r(u)}}a(Uv,"validateChunk");async function Pv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;wa.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!wa.isEmpty(c)&&!wa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await Dv.callOperationFunctionAsAwait(Bv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=it(c,To(Lt.INSERT_CSV_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(Pv,"insertChunk");async function ree(e){let t={records:0,number_written:0},r=vv(e.schema,e.table);try{let n=new wg,s=Hn.createReadStream(e.file_path,{highWaterMark:wv});s.setEncoding("utf8"),await Ng.parsePromise(s,Uv.bind(null,e,n),yg.bind(null,r));let i=n.getPermsResponse();if(i)throw it(new Error,i,Kt.BAD_REQUEST);return s=Hn.createReadStream(e.file_path,{highWaterMark:wv}),s.setEncoding("utf8"),await Ng.parsePromise(s,Pv.bind(null,e,t),yg.bind(null,r)),s.destroy(),t}catch(n){throw it(n,To(Lt.PAPA_PARSE_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(ree,"callPapaParse");function vv(e,t){let r=$7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Y7(i,s));return n}a(vv,"createTransformMap");function yg(e,t,r){let n=e.get(r);return n?n(t):wa.autoCast(t)}a(yg,"typeFunction");async function nee(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new wg,s=Av([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new bv({batchSize:Cv}),Nv(async c=>{await Uv(e,n,r,c)})]);await new Promise((c,u)=>{yv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw it(new Error,i,Kt.BAD_REQUEST);let o=Av([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),Ov.withParser(),c=>c.value,new bv({batchSize:Cv}),Nv(async c=>{await Pv(e,t,r,c)})]);return await new Promise((c,u)=>{yv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw it(n,To(Lt.INSERT_JSON_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(nee,"insertJson");async function Bv(e){let t={};try{e.data&&e.data.length>0&&see(e.data[0])?t=await iee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ca.info(t.message))}catch(r){throw go(r)}return t}a(Bv,"callBulkFileLoad");function see(e){let t=Object.keys(e);for(let r of t)if(!K7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(see,"validateColumnNames");async function iee(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Mf.insert;break;case"update":i=Mf.update;break;case"upsert":i=Mf.upsert;break;default:throw it(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),Kt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,Lt.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 l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=wa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw go(o)}}a(iee,"bulkFileLoad");function Hv(e,t){return`successfully loaded ${t} of ${e} records`}a(Hv,"buildResponseMsg");function go(e){return it(e,To(Lt.DEFAULT_BULK_LOAD_ERR),Kt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(go,"buildTopLevelErrMsg")});var Fv=T((SEe,qv)=>{"use strict";var Mg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};qv.exports=Mg});var Vv=T((gEe,kv)=>{"use strict";var oee=M(),Gv=require("moment"),aee=require("uuid").v4,Ug=class{static{a(this,"JobObject")}constructor(){this.id=aee(),this.type=void 0,this.start_datetime=Gv().valueOf(),this.created_datetime=Gv().valueOf(),this.end_datetime=void 0,this.status=oee.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};kv.exports=Ug});var Hf=T((AEe,zv)=>{"use strict";var cee=require("uuid").v4,Kv=rn(),Wv=tn(),uee=Jn(),lee=Zo(),_ee=Fv(),ot=M(),dee=Vv(),fee=RS(),dn=V(),Eee=Cc(),La=J(),{promisify:hee}=require("util"),Ro=require("moment"),mee=hf(),Bf=gg(),$v=Am(),{deleteTransactionLogsBeforeValidator:pee}=kT(),{handleHDBError:See,hdb_errors:Tee}=Z(),{HTTP_STATUS_CODES:gee}=Tee,Yv=Wv.searchByValue,Ree=Wv.searchByHash,Aee=Kv.insert,Oee=hee(mee.evaluateSQL),bee=Kv.update;zv.exports={addJob:Iee,updateJob:Cee,handleGetJob:Nee,handleGetJobsByStartDate:yee,getJobById:Qv};async function Nee(e){try{let t=await Qv(e.id);return La.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 dn.error("There was an error getting job",t),new Error(r)}}a(Nee,"handleGetJob");async function yee(e){try{let t=await wee(e);if(dn.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=Ro(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ro(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 dn.error(r),new Error(r)}}a(yee,"handleGetJobsByStartDate");async function Iee(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||La.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return dn.info(l),t.error=l,t}if(!ot.JOB_TYPE_ENUM[e.operation])return dn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Bf.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=Bf.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Bf.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Bf.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=$v(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=$v(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=pee(e);break;default:break}if(n)throw See(n,n.message,gee.BAD_REQUEST,void 0,void 0,!0);let s=new dee;s.type=e.operation===ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new uee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Yv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=cee();try{o=await Yv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return dn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return dn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new Eee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Aee(u)}catch(l){return dn.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,dn.trace(l)}return t}a(Iee,"addJob");async function wee(e){let t=Ro(e.from_date,Ro.ISO_8601),r=Ro(e.to_date,Ro.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 _ee(n,e.hdb_user);try{return await Oee(s)}catch(i){throw dn.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(wee,"getJobsInDateRange");async function Qv(e){if(La.isEmptyOrZeroLength(e))return La.errorizeMessage("Invalid job ID specified.");let t=new lee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Ree(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return dn.error(n),La.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Qv,"getJobById");async function Cee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(La.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ot.JOB_STATUS_ENUM.COMPLETE||e.status===ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ro().valueOf());let t=new fee(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await bee(t),r}a(Cee,"updateJob")});var t0=T((bEe,e0)=>{"use strict";var Jv=J(),Rr=M(),Lee=require("moment"),xf=Lg(),qf=V(),Xv=Hf(),jv=mf(),Zv=Vi(),Dee=tt(),Mee=uf(),Pg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Uee(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(Jv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Jv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await Hs(e,xf.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await Hs(e,xf.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await Hs(e,xf.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await Hs(e,xf.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await Hs(e,jv.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await Hs(e,jv.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await Hs(e,Zv.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await Hs(e,Zv.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Hs(e,Mee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Uee,"parseMessage");async function Hs(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Lee().valueOf(),await Xv.updateJob(e.job),await Pee(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):qf.error(`There was an error running ${t.name} job with id ${e.job.id}`),qf.error(n),e.job.message=n,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await Xv.updateJob(e.job)}catch(s){throw qf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Hs,"runJob");async function Pee(e){qf.trace("launching job thread:",e),Dee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Pee,"launchJobThread");e0.exports={parseMessage:Uee,RunnerMessage:Pg}});var n0=T((yEe,r0)=>{"use strict";var vg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};r0.exports=vg});var kg=T((wEe,Gg)=>{"use strict";var Vf=tn(),xg=hf(),Ff=Lg(),xs=ld(),Gf=xi(),il=Vi(),vee=oS(),sl=vr(),kf=hS(),Wt=GT(),Dt=V(),Bee=SS(),Hee=yd(),s0=tT(),xee=wd(),qee=rT(),Fee=nT(),Gee=oT(),kee=cT(),Bg=_T(),i0=mf(),Vee=ff(),qg=Hf(),H=M(),{hdb_errors:al,handleHDBError:ol}=Z(),{HTTP_STATUS_CODES:o0}=al,Hg=mT(),a0=Yd(),m0=require("util"),Da=rn(),$ee=Rs(),Yee=la(),c0=t0(),u0=hu(),l0=(Xd(),ee(vu)),_0=Lr(),d0=uf(),f0=rf(),{setServerUtilities:Kee}=(vf(),ee(Dg)),{CONTEXT:Wee}=(yn(),ee(_p)),{_assignPackageExport:Qee}=require("../../index"),{transformReq:zee}=J(),{server:Jee}=(nr(),ee(Ci)),Xee=Rg(),E0=Vf.searchByHash,jee=Vf.searchByValue,Zee=m0.promisify(Vf.search),ete=m0.promisify(xg.evaluateSQL),tte={[H.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.CREATE_TABLE]:!0,[H.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[H.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[H.OPERATIONS_ENUM.DROP_TABLE]:!0,[H.OPERATIONS_ENUM.DROP_SCHEMA]:!0},G=n0();async function p0(e,t){try{if(e.body.operation!=="read_log"&&(Dt.log_level===H.LOG_LEVELS.INFO||Dt.log_level===H.LOG_LEVELS.DEBUG||Dt.log_level===H.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Dt.info(o)}}catch(n){Dt.error(n)}let r=await Xee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return tte[e.body.operation]&&$ee.setSchemaDataToGlobal(n=>{n&&Dt.error(n)}),r}a(p0,"processLocalTransaction");var h0=nte();Gg.exports={chooseOperation:S0,getOperationFunction:T0,operation:Fg,processLocalTransaction:p0};Kee(Gg.exports);Jee.operation=Fg;function S0(e){let t;try{t=T0(e)}catch(s){throw Dt.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=xg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=xg.checkASTPermissions(e,i);if(o)throw Dt.error(`${o0.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==H.OPERATIONS_ENUM.LOGIN&&e.operation!==H.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=Vee.verifyPerms(i,s);if(o)throw Dt.error(`${o0.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ol(new Error,o,al.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw ol(s,"There was an error when trying to choose an operation path")}return r}a(S0,"chooseOperation");function T0(e){if(Dt.trace(`getOperationFunction with operation: ${e.operation}`),h0.has(e.operation))return h0.get(e.operation);throw ol(new Error,al.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),al.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(T0,"getOperationFunction");Qee("operation",Fg);function Fg(e,t){e.hdb_user=this[Wee]?.user,e.bypass_auth=!t;let r=S0(e);return p0({body:e},r)}a(Fg,"operation");async function rte(e){Dt.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[H.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case H.OPERATIONS_ENUM.INSERT:o=await Da.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await Da.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await Da.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await il.deleteRecord(i);break;default:Dt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Dt.info("Invalid operation in transaction"),Dt.error(o)}}a(rte,"catchup");async function cs(e){zee(e);let t,r;try{r=await qg.addJob(e),t=r.createdJob,Dt.info("addJob result",r);let n=new c0.RunnerMessage(t,e);return await c0.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 Dt.error(s),ol(n,s)}}a(cs,"executeJob");function nte(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new G(Da.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new G(Da.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new G(Da.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new G(Vf.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new G(E0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new G(E0)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new G(jee)),e.set(H.OPERATIONS_ENUM.SEARCH,new G(Zee)),e.set(H.OPERATIONS_ENUM.SQL,new G(ete)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new G(cs,Ff.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new G(cs,Ff.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new G(cs,Ff.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new G(cs,Ff.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new G(xs.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new G(xs.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new G(xs.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new G(xs.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new G(xs.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new G(xs.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new G(xs.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new G(xs.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new G(Gf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new G(Gf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new G(Gf.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new G(Gf.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new G(il.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new G(sl.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new G(sl.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new G(sl.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new G(sl.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new G(kf.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new G(kf.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new G(kf.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new G(kf.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new G(sl.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new G(Bee)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new G(Hee)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new G(s0)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new G(s0)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new G(xee)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new G(qee)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new G(Fee)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new G(_0.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new G(Gee.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new G(kee)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new G(Bg.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new G(Bg.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new G(Bg.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new G(cs,i0.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new G(cs,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new G(cs,il.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new G(cs,i0.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new G(qg.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new G(qg.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new G(Hg.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new G(Hg.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new G(Hg.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new G(a0.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new G(a0.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new G(rte)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new G(Yee.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new G(cs,il.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new G(vee)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new G(u0.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new G(u0.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new G(l0.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new G(l0.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new G(_0.getConfiguration)),e.set(H.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new G(Wt.customFunctionsStatus)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new G(Wt.getCustomFunctions)),e.set(H.OPERATIONS_ENUM.GET_COMPONENT_FILE,new G(Wt.getComponentFile)),e.set(H.OPERATIONS_ENUM.GET_COMPONENTS,new G(Wt.getComponents)),e.set(H.OPERATIONS_ENUM.SET_COMPONENT_FILE,new G(Wt.setComponentFile)),e.set(H.OPERATIONS_ENUM.DROP_COMPONENT,new G(Wt.dropComponent)),e.set(H.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new G(Wt.getCustomFunction)),e.set(H.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new G(Wt.setCustomFunction)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new G(Wt.dropCustomFunction)),e.set(H.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new G(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.ADD_COMPONENT,new G(Wt.addComponent)),e.set(H.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new G(Wt.dropCustomFunctionProject)),e.set(H.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new G(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.PACKAGE_COMPONENT,new G(Wt.packageComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new G(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.DEPLOY_COMPONENT,new G(Wt.deployComponent)),e.set(H.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new G(d0.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new G(cs,d0.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new G(f0.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new G(f0.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new G(xs.getBackup)),e}a(nte,"initializeOperationFunctionMap")});var Yf=T((LEe,A0)=>{"use strict";var Vg=M(),ste=J(),cl=V(),{handleHDBError:$g,hdb_errors:$f}=Z(),{isMainThread:ite}=require("worker_threads"),{Readable:ote}=require("stream"),g0=require("os"),ate=require("util"),cte=CS(),ute=ate.promisify(cte.authorize),R0=kg(),{createGzip:lte,constants:_te}=require("zlib");function dte(e){let t=`Found an uncaught exception with message: ${e.message}. ${g0.EOL}Stack: ${e.stack} ${g0.EOL}Terminating ${ite?"HDB":"thread"}.`;console.error(t),cl.fatal(t),process.exit(1)}a(dte,"handleServerUncaughtException");function fte(e,t,r){if(cl[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:$f.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(fte,"serverErrorHandler");function Ete(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=$g(new Error,"Invalid JSON.",$f.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(ste.isEmpty(e.body.operation)){let n=$g(new Error,"Request body must include an 'operation' property.",$f.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Ete,"reqBodyValidationHandler");function hte(e,t,r){let n;e.body.operation!==Vg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Vg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Vg.OPERATIONS_ENUM.LOGOUT?ute(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{cl.warn(s),cl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r($g(s,i,$f.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(hte,"authHandler");async function mte(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=R0.chooseOperation(e.body);let s=await R0.processLocalTransaction(e,n);if(s instanceof ote&&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(lte({level:_te.Z_BEST_SPEED})))}return s}catch(s){throw cl.error(s),s}}a(mte,"handlePostRequest");A0.exports={authHandler:hte,handlePostRequest:mte,handleServerUncaughtException:dte,serverErrorHandler:fte,reqBodyValidationHandler:Ete}});var y0=T((MEe,N0)=>{"use strict";var pte=require("fastify-plugin"),{handlePostRequest:O0,authHandler:Ste,reqBodyValidationHandler:Tte}=Yf();async function gte(e){e.decorate("hdbCore",{preValidation:[Tte,Ste],request:t=>b0(O0(t,response)),requestWithoutAuthentication:(t,r)=>b0(O0(t,r,!0))})}a(gte,"hdbCore");async function b0(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(b0,"convertAsyncIterators");N0.exports=pte(gte)});var C0=T((vEe,w0)=>{"use strict";var PEe=require("fs"),Yg=j();Yg.initSync();var{CONFIG_PARAMS:I0}=M(),Rte=1024*1024*1024;function Ate(e){let t=Yg.get(I0.HTTP_TIMEOUT),r=Yg.get(I0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Rte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Ate,"getServerOptions");w0.exports=Ate});var M0=T((HEe,D0)=>{"use strict";var Kg=j();Kg.initSync();var{CONFIG_PARAMS:L0}=M();function Ote(){let e=Kg.get(L0.HTTP_CORSACCESSLIST),t=Kg.get(L0.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(Ote,"getCORSOptions");D0.exports=Ote});var v0=T((qEe,P0)=>{"use strict";var U0=j();U0.initSync();var bte=M();function Nte(){return U0.get(bte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Nte,"getHeaderTimeoutConfig");P0.exports=Nte});var Qg={};Ve(Qg,{customFunctionsServer:()=>wte,ready:()=>J0,start:()=>Ite});function Ite(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){qs||(qs=z0(t),lt.http((await qs).server));let o=await qs,c=(0,Wg.dirname)(s),u=(0,Wg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!B0.has(c)){B0.add(c);try{o.register(Lte(c,u))}catch(_){if(_.message==="Root plugin has already booted")Fe.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:J0}}async function wte(){try{Fe.info("In Custom Functions Fastify server"+process.cwd()),Fe.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fe.debug(`Custom Functions server process ${process.pid} starting up.`),await Cte();let e=k0.get(V0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=qs=await z0(e)}catch(r){throw Fe.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Fe.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Fe.error(`Custom Functions ${process.pid} Error: ${e}`),Fe.error(e),process.exit(1)}}async function Cte(){try{Fe.info("Custom Functions starting configuration."),await $0.setUsersToGlobal(),Fe.info("Custom Functions completed configuration.")}catch(e){Fe.error(e)}}function Lte(e,t){return async function(r){try{Fe.info("Custom Functions starting buildRoutes"),Fe.trace("Loading fastify routes folder "+e),(0,H0.existsSync)(e)&&r.register(G0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Fe.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Fe.error(s.message):s&&Fe.error(s),o()})}catch(n){Fe.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function z0(e){Fe.info("Custom Functions starting buildServer.");let t=(0,Y0.default)(e),r=(0,x0.default)(t);r.server.headersTimeout=(0,W0.default)(),r.setErrorHandler(Q0.serverErrorHandler);let n=(0,K0.default)();return n&&r.register(q0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(F0.default),await r.register(yte),await r.after(),_g(r),Fe.info("Custom Functions completed buildServer."),r}function J0(){if(qs)return qs.then?qs.then(e=>e.ready()):qs.ready()}var Wg,H0,x0,q0,F0,G0,k0,V0,Fe,yte,$0,Y0,K0,W0,Q0,qs,B0,X0=Ae(()=>{Wg=require("path"),H0=require("fs"),x0=v(require("fastify")),q0=v(require("@fastify/cors")),F0=v(mg()),G0=v(require("@fastify/autoload")),k0=v(j()),V0=v(M()),Fe=v(V()),yte=v(y0()),$0=v(vr()),Y0=v(C0()),K0=v(M0()),W0=v(v0()),Q0=v(Yf());Sa();nr();B0=new Set;a(Ite,"start");a(wte,"customFunctionsServer");a(Cte,"setUp");a(Lte,"buildRouteFolder");a(z0,"buildServer");a(J0,"ready")});var zg={};Ve(zg,{start:()=>Dte});function Dte(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,rB.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){Z0||(Z0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=j0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,eB.default)(s,(0,tB.realpathSync)(o))}}return i(s)},{runFirst:!0})),j0.set(r,n)}}}var eB,tB,rB,j0,Z0,nB=Ae(()=>{eB=v(require("send")),tB=require("fs"),rB=v(require("serve-static")),j0=new Map;a(Dte,"start")});function Pte(e,t=1,r){if(Jg++,(0,Ao.startWorker)("server/threads/threadServer.js",{name:Qf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Qf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});Ute.push(s),await s,Ma.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Wf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Ma.indexOf(n);o>-1&&Ma.splice(o,1)}if(a(i,"removeWorker"),Ua){let o=Ua;Ua=[];for(let c of o)aB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Xg?Xg=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ao.shutdownWorkers)(),Jg=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function cB(e=0,t){if(typeof e=="string")try{(0,zf.existsSync)(e)&&(0,zf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=vte:r=Bte(t):r=Zg;let n=(0,Pa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=aB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Xg=!0,r(o,(c,u)=>{if(!c){if(sB){let l=o._socket||new Pa.Socket({handle:o,writable:!0,readable:!0});sB.deliverSocket(l,e,u),l.resume()}else Jg>0?(Ua.length===0&&setTimeout(()=>{Ua.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,Ua.push(o)):(console.log("start up a dynamic thread to handle request"),Pte(0));qr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Pa.Socket({handle:o,writable:!0,readable:!0});Fte(l,c,e)}qr(!0,"socket-routed")})};let s=Zc();jg.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 Zg(e,t){let r,n=0;for(let s of Ma){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Kf)return Kf=i,t(r);n=i}Kf=0,t(r)}function vte(e,t){let r={};e.getpeername(r);let n=r.address,s=va.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Zg(e,o=>{va.set(n,{worker:o,lastUsed:i}),t(o)})}function Bte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Pa.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=va.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);Zg(n,d=>{va.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function xte(){Kf=0;for(let e of Ma)e.expectedIdle=e.recentELU.idle+Hte,e.requests=1;Ma.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Fte(e,t,r){let n=qte++;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(),Wf.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")),Wf.delete(n)),s.event=="destroy"&&(e.destroy(),Wf.delete(n))})}var Ao,Pa,Qf,jg,zf,oB,Mte,Ma,Ua,aB,sB,Jg,Ute,Xg,Kf,iB,va,Hte,Wf,qte,uB=Ae(()=>{Ao=v(tt()),Pa=require("net"),Qf=v(M()),jg=v(V()),zf=require("fs");ys();oB=require("worker_threads"),Mte=v($i()),Ma=[],Ua=[],aB=[],Jg=0,Ute=[];oB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Pte,"startHTTPWorker");a(cB,"startSocketServer");Kf=0;a(Zg,"findMostIdleWorker");iB=36e5,va=new Map;a(vte,"findByRemoteAddressAffinity");a(Bte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of va)r.lastUsed+iB<e&&va.delete(t)},iB).unref();Hte=1e3;a(xte,"updateWorkerIdleness");(0,Ao.setMonitorListener)(xte);Wf=new Map,qte=1;a(Fte,"proxySocket")});var nR={};Ve(nR,{Request:()=>eR,createReuseportFd:()=>Jf});var lB,eR,tR,rR,Jf,Xf=Ae(()=>{lB=require("os"),eR=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 rR(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 body(){return this.#e||(this.#e=new tR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},tR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},rR=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,lB.platform)()!="win32"&&(Jf=require("node-unix-socket").createReuseportFd)});var EB=T((ehe,fB)=>{"use strict";var Gte=require("cluster"),Oo=j();Oo.initSync();var dB=M(),zEe=require("util"),Fs=V(),JEe=require("fs"),kte=require("fastify"),XEe=Zc(),Vte=require("@fastify/cors"),$te=require("@fastify/compress"),Yte=require("@fastify/static"),Kte=mg(),Wte=require("path"),{PACKAGE_ROOT:Qte}=M(),zte=Rs(),Jte=J(),Xte=vr(),jte=$i(),{server:Zte}=(nr(),ee(Ci)),{node_request_key:jEe}=(Xf(),ee(nR)),{authHandler:ere,handlePostRequest:tre,serverErrorHandler:rre,reqBodyValidationHandler:nre}=Yf(),ZEe=require("net"),{registerContentHandlers:sre}=(Sa(),ee(nv)),ire=6e4,ore=1024*1024*1024,are="TRUE",{CONFIG_PARAMS:ul}=dB,Ba;fB.exports={hdbServer:_B,start:_B};async function _B(e){try{Fs.info("In Fastify server"+process.cwd()),Fs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Gte.isMaster,await cre();let t=e.securePort>0;Ba=ure(t),await Ba.ready(),e||(e={}),e.isOperationsServer=!0;try{Zte.http(Ba.server,e),Ba.server.closeIdleConnections||await Ba.listen({port:0,host:"::"})}catch(r){throw Ba.close(),Fs.error(r),Fs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Fs.fatal(t),process.exit(1)}}a(_B,"operationsServer");async function cre(){Fs.trace("Configuring HarperDB process."),zte.setSchemaDataToGlobal(),await Xte.setUsersToGlobal(),await jte.getLicense()}a(cre,"setUp");function ure(e){Fs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=lre(e),r=kte(t);r.server.headersTimeout=dre(),r.setErrorHandler(rre);let n=_re();n&&r.register(Vte,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Kte),r.register($te),r.register(Yte,{root:Wte.join(Qte,"studio/build-local")}),sre(r);let s=Oo.get(dB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Jte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[nre,ere],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),tre(i,o)}),r.get("/health",()=>"HarperDB is running."),Fs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ure,"buildServer");function lre(e){let t=Oo.get(ul.OPERATIONSAPI_NETWORK_TIMEOUT),r=Oo.get(ul.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:ore,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(lre,"getServerOptions");function _re(){let e=Oo.get(ul.OPERATIONSAPI_NETWORK_CORS),t=Oo.get(ul.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===are)&&(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(_re,"getCORSOpts");function dre(){return Oo.get(ul.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ire}a(dre,"getHeaderTimeoutConfig")});var bB=T((ihe,OB)=>{"use strict";var{decode:fre}=require("msgpackr"),{isMainThread:rhe,parentPort:Ere,threadId:nhe}=require("worker_threads"),iR=St(),Gs=nt(),hre=M(),gi=V(),hB=j(),pB=M();tt();var mre=gs(),{recordAction:pre,recordActionBinary:Sre}=(ys(),ee(nu)),{publishToStream:Tre}=iR,{ConsumerEvents:gre}=require("nats"),she={durable:Gs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Gs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Rre,Are,Ore,SB,TB;OB.exports={initialize:oR,workQueueListener:AB,setSubscription:bre,setIgnoreOrigin:yre,getDatabaseSubscriptions:Nre};async function oR(){TB=!0,gi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iR.getNATSReferences();Rre=e,Are=e.info.server_name,Ore=t,SB=r}a(oR,"initialize");var Zf=new Map;function bre(e,t,r){let n=Zf.get(e);n||Zf.set(e,n=new Map),n.set(t,r),TB||oR().then(AB)}a(bre,"setSubscription");function Nre(){return Zf}a(Nre,"getDatabaseSubscriptions");var gB;function yre(e){gB=e}a(yre,"setIgnoreOrigin");var RB=100,mB=new Array(RB),jf=0;async function AB(){let e=await SB.consumers.get(Gs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Gs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Ere?.on("message",async n=>{let{type:s}=n;s===pB.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===gre.HeartbeatsMissed){let s=n.data;gi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(gi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await mB[jf],mB[jf]=Ire(n).catch(s=>{gi.error(s)}),++jf>=RB&&(jf=0)}catch(n){gi.error("Error consuming clustering ingest, restarting consumer",n)}iR.clearClientCache(),await oR()}}a(AB,"workQueueListener");async function Ire(e){let t=fre(e.data);pre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=hB.get(hre.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Gs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Gs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Gs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!gB),Sre(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Gs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;gi.trace("processing message:",o,c,_,(l?"records: "+l.map(w=>w?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),gi.trace(`messageProcessor nats msg id: ${e.headers.get(Gs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Zf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:sR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let w=l.map((B,K)=>({type:sR(o),value:B,expiresAt:E,id:d?.[K],table:_}));for(;u;)w.push({type:sR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:w,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}hB.get(pB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Tre(e.subject.split(".").slice(0,-1).join("."),mre.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){gi.error(o)}e.ack()}a(Ire,"messageProcessor");function sR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sR,"convertOperation")});var iE={};Ve(iE,{disableNATS:()=>Cre,publishToStream:()=>sE,setNATSReplicator:()=>aR,setPublishToStream:()=>Lre,setSubscription:()=>_R,start:()=>wre});function wre(){tE.default.get(rE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Mre()}function Cre(e=!0){CB=e}function Lre(e,t){sE=e,_R=t}function Mre(){if(CB||process.env._DISABLE_NATS)return;let e=Mn(),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];aR(s,r,i)}}fR((r,n)=>{aR(r.tableName,r.databaseName,r),n&&DB(r)}),!NB&&(NB=!0)}function aR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends qt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[De],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[De]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[De],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[De],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[De]})}static defineSchema(i){DB(i)}static subscribe(){let i=new Nn;return _R(t,e,i),i}static subscribeOnThisThread(i){return i<Dre}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 eE(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=LB;return i}a(n,"getNATSTransaction")}function DB(e){let t=tE.default.get(rE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);sE(`${uR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lR.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 yB,uR,lR,IB,wB,tE,rE,nE,CB,sE,_R,Dre,LB,NB,eE,cR,dR=Ae(()=>{ge();yn();yB=v(St()),uR=v(nt()),lR=v(gs());Ec();IB=v(bB()),wB=v(Dr()),tE=v(j()),rE=v(M()),nE=v(V());a(wre,"start");a(Cre,"disableNATS");sE=yB.publishToStream,_R=IB.setSubscription;a(Lre,"setPublishToStream");Dre=2;a(Mre,"assignReplicationSource");a(aR,"setNATSReplicator");a(DB,"publishSchema");eE=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=tE.default.get(rE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(nE.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(sE(`${uR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,lR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw nE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},cR=class extends eE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,wB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};LB=new cR});var YB=T(No=>{"use strict";var{isMainThread:Ure,parentPort:dl,threadId:ll}=require("worker_threads"),{Socket:Pre,createServer:vre}=require("net"),{createServer:Bre,IncomingMessage:Hre}=require("http"),{createServer:xre}=require("https"),{readFileSync:Ha,unlinkSync:MB,existsSync:qre}=require("fs"),xn=V(),Ge=j(),Ar=M(),{server:cE}=(nr(),ee(Ci)),{WebSocketServer:Fre}=require("ws"),{createServer:Gre}=require("tls"),{getTicketKeys:kre,restartNumber:Vre,getWorkerIndex:UB}=tt(),{Headers:xB}=(Wd(),ee(wU)),{recordAction:_l,recordActionBinary:$re}=(ys(),ee(nu)),{Request:qB,createReuseportFd:PB}=(Xf(),ee(nR)),{checkMemoryLimit:Yre}=$i(),FB=require("tls"),vB=FB.createSecureContext;FB.createSecureContext=function(e){if(!e.cert||!e.key)return vB(e);let t={...e};delete t.key,delete t.cert;let r=vB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Vre<=1&&xn.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:dhe,CONFIG_PARAMS:Kre}=Ar;Ge.initSync();var Wre=Ge.get(Kre.HTTP_SESSIONAFFINITY),us={};No.registerServer=SR;No.httpServer=TR;No.deliverSocket=pR;No.startServers=GB;No.when_components_loaded=null;cE.http=TR;cE.request=Xre;cE.socket=jre;cE.ws=Zre;var ER=[],oE=[],Qre,bo={},aE={},zre=[],hR=[];function GB(){return No.when_components_loaded=gR().loadRootComponents(!0).then(()=>{dl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)pR(n,r,s);else if(t.requestId)Jre(t);else if(t.type===Ar.ITC_EVENT_TYPES.SHUTDOWN){xn.trace("received shutdown request",ll);for(let i in us){let o=us[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),xn.info("Closed all http connections",i,ll)},4e3).unref()),o.close?.(()=>{if(Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&UB()==0)try{MB(Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ll),o.cantCleanupProperly||xn.warn("Had to forcefully exit the thread",ll),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(PB&&!Wre)for(let t in us){let r=us[t];if(isNaN(t)&&UB()==0){qre(t)&&MB(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),xn.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=PB(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),xn.trace("Listening on port "+t,ll)}).on("error",i)}))}Promise.all(e).then(()=>{dl?.postMessage({type:Ar.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(GB,"startServers");Ure||GB();function pR(e,t,r){let n=e?.read?e:new Pre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=us[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=us[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(xn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(pR,"deliverSocket");var BB=new Map;function Jre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=BB.get(s),r){case"connection":i=pR(void 0,t),BB.set(s,i),i.write=(c,u,_)=>(dl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(dl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),dl.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(Jre,"proxyRequest");function SR(e,t,r=!0){!+t&&t!==Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ge.get(Ar.CONFIG_PARAMS.HTTP_PORT),10));let n=us[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",HB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else us[t]=e;e.on("unhandled",HB)}a(SR,"registerServer");function kB(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=[],Ge.get(Ar.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ge.get(Ar.CONFIG_PARAMS.HTTP_PORT),secure:Ge.get(Ar.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ge.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ge.get(Ar.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ge.get(Ar.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(kB,"getPorts");function TR(e,t){for(let{port:r,secure:n}of kB(t))VB(r,n,t?.isOperationsServer),typeof e=="function"?hR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,SR(e,r,!1)),aE[r]=mR(hR,r),Qre=mR(zre,r)}a(TR,"httpServer");function VB(e,t,r){if(!bo[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Ge.get(n+"_keepAliveTimeout"),headersTimeout:Ge.get(n+"_headersTimeout"),requestTimeout:Ge.get(n+"_timeout")},i=Ge.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=Ge.get(n+"tls_privateKey"),u=Ge.get(n+"tls_certificate"),_=Ge.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ha(c),ciphers:Ge.get("tls_ciphers"),cert:Ha(u),ca:_&&Ha(_),requestCert:!!i,ticketKeys:kre()})}let o=Yre();bo[e]=(t?xre:Bre)(s,async(c,u)=>{try{let l=performance.now(),d=new qB(c,u);r&&(d.isOperationsServer=!0);let f=await aE[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=$B(d)}if(o?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let B of f.headers||[])u.setHeader(B[0],B[1]);return c.baseRequest=d,u.baseResponse=f,bo[e].emit("unhandled",c,u)}let E=f.status||200,h=performance.now(),p=h-l,S=f.body,A;if(!f.handlesHeaders){let B=f.headers||new xB;if(S?S.length>=0&&(typeof S=="string"?B.set("Content-Length",Buffer.byteLength(S)):B.set("Content-Length",S.length),A=!0):(B.set("Content-Length","0"),A=!0),B.append){let K=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(K+=", miss"),B.append("Server-Timing",K,!0)}u.writeHead(E,B&&(B[Symbol.iterator]?Array.from(B):B)),A&&u.end(S)}let I=d.handlerPath,w=d.method;if(_l(p,"duration",I,w,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),$re(E<400,"success",I,w),!A)if(S?.pipe){S.pipe(u),S.destroy&&u.on("close",()=>{S.destroy()});let B=0;S.on("data",K=>{B+=K.length}),S.on("end",()=>{_l(performance.now()-h,"transfer",I,w),_l(B,"bytes-sent",I,w)})}else S?.then?S.then(B=>{u.end(B)},_):u.end(S)}catch(l){_(l)}function _(l){let d=l.headers;u.writeHead(l.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),u.end(l.toString()),l.statusCode?l.statusCode===500?xn.warn(l):xn.info(l):xn.error(l)}a(_,"onError")}),t&&(bo[e].on("secureConnection",c=>{c._parent.startTime&&_l(performance.now()-c._parent.startTime,"tls-handshake",e),_l(c.isSessionReused(),"tls-reused",e)}),bo[e].isSecure=!0),SR(bo[e],e)}return bo[e]}a(VB,"getHTTPServer");function mR(e,t){let r=$B;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(mR,"makeCallbackChain");function $B(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new xB}}a($B,"unhandled");function Xre(e,t){TR(e,{requestOnly:!0,...t})}a(Xre,"onRequest");function jre(e,t){let r;if(t.securePort){let n=Ge.get("tls_privateKey"),s=Ge.get("tls_certificate"),i=t.mtls?.certificateAuthority||Ge.get("tls_certificateAuthority");r=Gre({ciphers:Ge.get("tls_ciphers"),key:Ha(n),cert:Ha(s),ca:i&&Ha(i),requestCert:!!t.mtls},e),us[t.securePort]=r}return t.port&&(r=vre(e),us[t.port]=r),r}a(jre,"onSocket");Object.defineProperty(Hre.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 Zre(e,t){for(let{port:r,secure:n}of kB(t)){oE[r]||(oE[r]=new Fre({server:VB(r,n)}),oE[r].on("connection",async(i,o)=>{try{let c=new qB(o);c.isWebSocket=!0;let u=aE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<ER.length;l++){let d=ER[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){xn.warn("Error handling WebSocket connection",c)}}),oE[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";ER.push({listener:e,protocol:s}),aE[r]=mR(hR,r)}}a(Zre,"onWebSocket");function HB(e,t){t.writeHead(404),t.end(`Not found
27
+ `)}a(HB,"defaultNotFound")});async function zB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await RR.getResource(e,{});s=new bR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await RR.get(e);i&&i.delete()}s=new lE(e,t)}return n&&(n.id=e,n.user={username:t?.username},fl.put(n)),s}function AR(){return uE++,uE>65500&&(uE=1),uE}function OR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=fi.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 Qe(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var KB,yo,WB,QB,RR,fl,uE,lE,bR,JB=Ae(()=>{ge();Pu();KB=v(Dr()),yo=v(V());Ji();WB=v(tt()),QB=v(YB());nr();RR=_t({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"}]}}]}),fl=_t({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,WB.getWorkerIndex)()===0&&(async()=>{await QB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of fl.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await lt.getUser(r.user.username)),Qe(r,()=>{try{OR(r,t)}finally{fl.delete(e.id,r)}})}})();a(zB,"getSession");uE=1;a(AR,"getNextMessageId");lE=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("?"),u,_;if(c>-1?(u=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 l=this.subscriptions.find(A=>A.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let f={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,yo.trace)("Resuming subscription from",s,"from",o);let E=fi.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let I=A.split("/"),w;for(let q=0;q<I.length;q++)if(I[q].indexOf("+")>-1)if(I[q]==="+")w=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&w)throw new Error("Filters can not be combined");let B=!0;I[I.length-1]==="#"&&(I.length--,B=!1),w&&(n=a(q=>{let P=q.id;if(!Array.isArray(P)||B&&P.length!==I.length)return!1;for(let Q=0;Q<I.length;Q++)if(I[Q]!=="+"&&I[Q]!==P[Q])return!1;return!0},"filter"));let K=I.indexOf("+");f.url="/"+(K>-1?I.slice(0,K):I).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Qe(f,async()=>{let A=await p.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let I of A)try{let w;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,w=this.needsAcknowledge(I)):(I.acknowledge?.(),w=AR());let B=I.id;Array.isArray(B)&&(B=pa(B)),B==null&&(B=""),this.listener(h+"/"+B,I.value,w,t)}catch(w){(0,yo.warn)(w)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=AR();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,OR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Qe(r,async()=>{if(!t){let n=await fl.get(this.sessionId,r);n?.doesExist()&&await OR(n,n.data,r)}await fl.delete(this.sessionId,r)}).catch(n=>{(0,yo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(OR,"publish");bR=class extends lE{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=AR(),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,yo.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,KB.getNextMonotonicTime)()),(0,yo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),RR.put(this.sessionRecord)),t.qos}}});var NR={};Ve(NR,{bypassAuth:()=>ene,start:()=>tne});function ene(){tH=!0}function tne({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=ZB(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Or.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||s)&&(c=e.socket(async _=>{let l;if(u)if(_.authorized)try{let E=u.user;l!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),l=await e.getUser(E,null,null))}catch(E){(0,Or.error)(E)}else return(0,Or.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&tH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,eH.getSuperUser)());let{onMessage:d,onClose:f}=ZB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Or.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function ZB(e,t,r,n,s){jB||(jB=!0,ru(d=>{_E>0&&d.push({metric:"mqtt-connections",connections:_E,byThread:!0})}));let i;_E++;let o,c={protocolVersion:4},u=(0,fE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){_E--,i||(i=!0,o?.disconnect(),nn(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.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 lt.getUser(d.username,d.password.toString(),r),(0,dE.get)(ls.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&XB.notify({username:n.username,status:ls.AUTH_AUDIT_STATUS.SUCCESS,type:ls.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,dE.get)(ls.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&XB.error({username:n.username,status:ls.AUTH_AUDIT_STATUS.FAILURE,type:ls.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return nn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let w=e.deserialize||(e.deserialize=ho(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?w(d.will.payload):void 0,delete d.will.payload}o=zB({user:n,...d}),o=await o}catch(w){return(0,Or.error)(w),nn(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:w.code||5,returnCode:w.code||128})}nn(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((w,B,K,q)=>{try{let P=w.indexOf("/",1),Q=P>0?w.slice(0,P):w;f({cmd:"publish",topic:w,payload:E(B),messageId:K||Math.floor(Math.random()*1e8),qos:q.qos},Q)}catch(P){(0,Or.error)(P),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let w of d.subscriptions){let B;try{B=(await o.addSubscription(w,w.qos>=1)).qos||0}catch(K){(0,Or.error)(K),B=c.protocolVersion<5?128:K.statusCode===403?135:K.statusCode===404?143:128}h.push(B)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let w=[];for(let B of d.unsubscriptions)w.push(o.removeSubscription(B)?0:17);f({cmd:"unsuback",granted:w,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ho(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(w){(0,Or.warn)(w),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),nn(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Or.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,fE.generate)(h,c);t(S),qr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return hi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var fE,eH,dE,ls,Or,XB,tH,jB,_E,rH=Ae(()=>{fE=require("mqtt-packet");JB();eH=v(vr());Sa();ys();nr();dE=v(j()),ls=v(M()),Or=v(V()),XB=(0,Or.loggerWithTag)("auth-event"),tH=(0,dE.get)(ls.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(ene,"bypassAuth");a(tne,"start");_E=0;a(ZB,"onSocket")});var of={};Ve(of,{component_errors:()=>qa,loadComponent:()=>EE,loadComponentDirectories:()=>_H,setErrorReporter:()=>ine});function _H(e,t){t&&(IR=t),e&&(wR=e);let r=[];if((0,qn.existsSync)(yR)){let s=(0,qn.readdirSync)(yR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ot.join)(yR,o);r.push(EE(c,IR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(EE(n,IR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{lH=!0})}function ine(e){hl=e}async function EE(e,t,r,n,s,i){if(!sH.has(e)){sH.set(e,!0),s&&(wR=s);try{let o;n&&(qa=new Map);let c=(0,Ot.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,qn.existsSync)(c)?o=n?(0,uH.getConfigObj)():(0,iH.parseDocument)((0,qn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=CR;let u=[],_=n;for(let l in o){let d=o[l];if(qa.set(n?l:(0,Ot.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,w;for(;!(0,qn.existsSync)(w=(0,Ot.join)(I,"node_modules",l));)if(I=(0,Ot.dirname)(I),I.length<(0,cH.getHdbBasePath)().length){w=null;break}if(w)f=await EE(w,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=sne[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,_t(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(xa.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&p))for(let I of[A,S])try{if(+I&&!nH.includes(I)){let w=LR.get(DR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);w&&El.default.warn("Session affinity is not recommended and may cause memory leaks"),(w||!Jf)&&(nH.push(I),cB(I,w))}}catch(w){console.error("Error listening on socket",I,w,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),wR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,aH.handleHDBError)("Can not reference parent directories");let I=(0,Ot.join)(e,d.files).replace(/\\/g,"/"),w=I.indexOf("/*");if(w>-1&&d.files!==CR[l]?.files&&!(0,qn.existsSync)(I.slice(0,w)))throw new Error(`The path '${I.slice(0,w)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let B=(0,Ot.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+B+K.slice(2):K==="."?"/"+B:"/"+B+"/"+K;let q,P,Q;if(d.root){let z=d.root;z.startsWith("/")&&(z=z.slice(1)),z.endsWith("/")&&(z=z.slice(0,-1)),z+="/",P=(0,Ot.join)(e,z)}else(Q=I.indexOf("/*"))>-1&&(P=I.slice(0,Q+1),q=(0,Ot.relative)(e,P));let Y=!1;if(xa.isMainThread&&f.setupDirectory&&(Y=await f.setupDirectory?.(K,P,t)),t.isWorker&&f.handleDirectory&&(Y=await f.handleDirectory?.(K,P,t)),Y)continue;for(let z of await(0,oH.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:Ie}=z;_=!0;let ne=(0,Ot.relative)(e,re).replace(/\\/g,"/");if(q)if(ne.startsWith(q))ne=ne.slice(q.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${ne}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let ct=K+(K.endsWith("/")?"":"/")+ne;try{if(Ie.isFile()){let de=await nne(re);xa.isMainThread&&await f.setupFile?.(de,ct,re,t),t.isWorker&&await f.handleFile?.(de,ct,re,t)}else xa.isMainThread&&await f.setupDirectory?.(ct,re,t),t.isWorker&&await f.handleDirectory?.(ct,re,t)}catch(de){de.message=`Could not load ${Ie.isFile()?"file":"directory"} '${re}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${de.message}`,hl?.(de),((0,Fa.getWorkerIndex)()===0?console:El.default).error(de),t.set(d.path||"/",new ml(de)),qa.set(n?l:(0,Ot.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Ot.basename)(e)}' due to: ${h.message}`,hl?.(h),((0,Fa.getWorkerIndex)()===0?console:El.default).error(h),t.set(d.path||"/",new ml(h),null,!0),qa.set(n?l:(0,Ot.basename)(e),h.message)}}if(xa.isMainThread&&!lH&&i&&(0,Fa.watchDir)(e,async()=>_H()),o.extensionModule)return await e_((0,Ot.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;hl?.(new Error(l)),((0,Fa.getWorkerIndex)()===0?console:El.default).error(l),qa.set((0,Ot.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,hl?.(o),t.set("",new ml(o))}}}var qn,Ot,xa,iH,LR,DR,oH,Fa,El,aH,cH,rne,uH,nne,yR,wR,lH,IR,qa,sne,CR,nH,sH,hl,ml,af=Ae(()=>{qn=require("fs"),Ot=require("path"),xa=require("worker_threads"),iH=require("yaml"),LR=v(j()),DR=v(M());$O();QO();zO();lv();X0();nB();oH=v(require("fast-glob")),Fa=v(tt()),El=v(V());Ah();nr();aH=v(Z());yn();ge();uB();cH=v(j()),rne=v(EB());Xd();dR();rH();uH=v(Lr());Xf();({readFile:nne}=qn.promises),yR=LR.get(DR.CONFIG_PARAMS.COMPONENTSROOT),wR=new Map,qa=new Map;a(_H,"loadComponentDirectories");sne={REST:Af,rest:Af,graphqlSchema:Rh,jsResource:bh,fastifyRoutes:Qg,login:yh,static:zg,operationsApi:rne,customFunctions:{},http:{},clustering:iE,authentication:vu,mqtt:NR},CR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(CR,"static",{value:{files:"web/**"}});nH=[],sH=new Map;a(ine,"setErrorReporter");a(EE,"loadComponent");ml=class extends qt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var gR=T((xhe,fH)=>{var{isMainThread:dH}=require("worker_threads"),{getTables:one}=(ge(),ee(xe)),{loadComponentDirectories:ane,loadComponent:cne}=(af(),ee(of)),{resetResources:une}=(Pu(),ee(IU)),lne=xT(),_ne=Lr(),{dirname:dne}=require("path"),{getConnection:fne}=St(),Ene=j(),hne=M(),MR=new Map;async function mne(e=!1){!dH&&Ene.get(hne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&fne();try{dH&&await lne()}catch(n){console.error(n)}let t=une();one(),t.isWorker=e,await cne(dne(_ne.getConfigFilePath()),t,"hdb",!0,MR),await ane(MR,t);let r=[];for(let[n]of MR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(mne,"loadRootComponents");fH.exports.loadRootComponents=mne});var tt=T((Fhe,Ai)=>{"use strict";var{Worker:pne,MessageChannel:Sne,parentPort:_s,isMainThread:HR,threadId:Tne,workerData:ks}=require("worker_threads"),{PACKAGE_ROOT:gne}=M(),{join:pH,isAbsolute:Rne,extname:Ane}=require("path"),{server:SH}=(nr(),ee(Ci)),{watch:One,readdir:bne}=require("fs/promises"),{totalmem:EH}=require("os"),pl=M(),TH=j(),Vs=V(),{randomBytes:Nne}=require("crypto"),{_assignPackageExport:yne}=require("../../index"),Ine=M(),hH=1024*1024,Ri=[],fn=[],wne=50,xR=1e4,Cne="restart",gH="request_thread_info",RH="resource_report",AH="thread_info",OH="added-port",Lne="ack",UR;yne("threads",fn);Ai.exports={startWorker:PR,restartWorkers:FR,shutdownWorkers:vne,workers:Ri,setMonitorListener:Vne,onMessageFromWorkers:Bne,onMessageByType:CH,broadcast:xne,broadcastWithAcknowledgement:Fne,setChildListenerByType:Pne,getWorkerIndex:bH,getWorkerCount:NH,getTicketKeys:yH,setMainIsWorker:Mne,setTerminateTimeout:Dne,restartNumber:ks?.restartNumber||1};fn.onMessageByType=CH;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 qR;function Dne(e){xR=e}a(Dne,"setTerminateTimeout");function bH(){return ks?ks.workerIndex:qR?0:void 0}a(bH,"getWorkerIndex");function NH(){return ks?ks.workerCount:qR?1:void 0}a(NH,"getWorkerCount");function Mne(e){qR=e}a(Mne,"setMainIsWorker");var hE;function yH(){return hE||(hE=HR?Nne(48):ks.ticketKeys,hE)}a(yH,"getTicketKeys");Object.defineProperty(SH,"workerIndex",{get(){return bH()}});Object.defineProperty(SH,"workerCount",{get(){return NH()}});var IH={[gH](e,t){Gne(t)},[RH](e,t){kne(t,e)}};function PR(e,t={}){let r=process.constrainedMemory?.()||EH();r=Math.min(r,EH(),2e4*hH);let n=TH.get(pl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/hH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of fn){let _=new Sne;_.existingPort=u,i.push(_),o.push(_.port2)}Ane(e)||(e+=".js");let c=new pne(Rne(e)?e:pH(gne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:Ai.exports.restartNumber,ticketKeys:yH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:OH,port:u,threadId:c.threadId},[u]);return pE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>PR(e,t),c.on("error",u=>{console.error("Worker error:",u),Vs.error("Worker error:",u)}),c.on("exit",u=>{Ri.splice(Ri.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<wne?(t.unexpectedRestarts=c.unexpectedRestarts+1,PR(e,t)):Vs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{IH[u.type]?.(u,c)}),Ri.push(c),Yne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(PR,"startWorker");var Une=[pl.THREAD_TYPES.HTTP];async function FR(e=null,t=2,r=!0){if(HR){if(r){let{loadRootComponents:o}=gR();await o()}Ai.exports.restartNumber++,t<1&&(t=t*Ri.length);let n=[],s=[];for(let o of Ri.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Vs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ai.exports.restartNumber,type:pl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Une.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),xR*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Ine.ITC_EVENT_TYPES.CHILD_STARTED&&(Vs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");Vs.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(l),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}=Yd();r&&(e==="http"||!e)&&TH.get(pl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _s.postMessage({type:Cne,workerType:e})}a(FR,"restartWorkers");function Pne(e,t){IH[e]=t}a(Pne,"setChildListenerByType");function vne(e){return FR(e,1/0,!1)}a(vne,"shutdownWorkers");var wH=[];function Bne(e){wH.push(e)}a(Bne,"onMessageFromWorkers");var vR=new Map;function CH(e,t){let r=vR.get(e);r||vR.set(e,r=[]),r.push(t)}a(CH,"onMessageByType");var Hne=10;async function xne(e){let t=0;for(let r of fn)try{r.postMessage(e),t++>Hne&&(t=0,await new Promise(setImmediate))}catch(n){Vs.error("Unable to send message to worker",n)}}a(xne,"broadcast");var mE=new Map,qne=1;function Fne(e){return new Promise(t=>{let r=0;for(let n of fn)try{let s=qne++,i=a(()=>{mE.delete(s),--r===0&&t(),n!==_s&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,mE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of mE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Vs.error("Unable to send message to worker",s)}r===0&&t()})}a(Fne,"broadcastWithAcknowledgement");function Gne(e){e.postMessage({type:AH,workers:LH()})}a(Gne,"sendThreadInfo");function LH(){let e=Date.now();return Ri.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(LH,"getChildWorkerInfo");function kne(e,t){e.resources=t,e.resources.updated=Date.now()}a(kne,"recordResourceReport");var BR;function Vne(e){BR=e}a(Vne,"setMonitorListener");var $ne=1e3,mH=!1;function Yne(){mH||(mH=!0,setInterval(()=>{for(let e of Ri){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}BR&&BR()},$ne).unref())}a(Yne,"startMonitoring");var Kne=1e3;if(_s){pE(_s);for(let e=0,t=ks.addPorts.length;e<t;e++){let r=ks.addPorts[e];r.threadId=ks.addThreadIds[e],pE(r)}setInterval(()=>{let e=process.memoryUsage();_s.postMessage({type:RH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Kne).unref(),UR=a(()=>new Promise((e,t)=>{_s.on("message",r),_s.postMessage({type:gH});function r(n){n.type===AH&&(_s.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else UR=LH;Ai.exports.getThreadInfo=UR;function pE(e,t){fn.push(e),e.on("message",r=>{if(r.type===OH)r.port.threadId=r.threadId,pE(r.port);else if(r.type===Lne){let n=mE.get(r.id);n&&n()}else{for(let s of wH)s(r,e);let n=vR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Vs.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(pE,"addPort");if(HR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await bne(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(pH(n,i.name));try{for await(let{filename:i}of One(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await FR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ai.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else _s.on("message",async e=>{let{type:t}=e;t===pl.ITC_EVENT_TYPES.SHUTDOWN&&(Ai.exports.restartNumber=e.restartNumber,_s.unref(),setTimeout(()=>{Vs.warn("Thread did not voluntarily terminate",Tne),process.exit(0)},xR).unref())})});var xw={};Ve(xw,{AUDIT_STORE_OPTIONS:()=>FH,createAuditEntry:()=>i_,openAuditStore:()=>RE,readAuditEntry:()=>Bt,setAuditRetention:()=>Qne,transactionKeyEncoder:()=>qH});function RE(e){let t=e.auditStore=e.openDB(BH.AUDIT_STORE_NAME,FH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=SE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-GR})){if((_[0]&15)===$R){let l=Bt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=Wne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,GR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,gE.getWorkerIndex)()===(0,gE.getWorkerCount)()-1&&s(SE),t}function Qne(e,t=SE){GR=e,SE=t}function i_(e,t,r,n,s,i,o){let c=GH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?Ga.setFloat64(0,n):En.set(Gh),u=9),f(0),f(t),d(r),Ga.setFloat64(u,e),u+=8,s?d(s):En[u++]=0,En[n?8:0]=c;let l=En.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ka.writeKey)(E,En,u);let p=u-h-1;p>127?p>16383?(KR.error("Key or username was too large for audit entry",E),u=h+1,En[h]=0):(En.copyWithin(h+2,h+1,u),Ga.setUint16(h,p|32768),u++):En[h]=p}function f(E){E<128?En[u++]=E:E<16384?(Ga.setUint16(u,E|32768),u+=2):E<1056964608?(Ga.setUint32(u,E|3221225472),u+=4):(En[u]=255,Ga.setUint32(u+1,E),u+=5)}}function Bt(e){try{let t=e.dataView||(e.dataView=new YR(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,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:GH[n&7],tableId:i,get recordId(){return vH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?vH(e,l,d):void 0},getValue(f,E,h){if(n&kR||n&VR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&VR&&h)return WR(f.getEntry(this.recordId),h,f)}}}catch{return KR.error("Reading audit entry error",e),{}}}function vH(e,t,r){let n=e.subarray(t,r);return(0,ka.readKey)(n,0,r-t)}var ka,TE,BH,HH,gE,xH,KR,En,Ga,qH,FH,GR,Wne,SE,kR,VR,DH,$R,MH,UH,PH,GH,YR,Pi=Ae(()=>{ka=require("ordered-binary"),TE=v(j()),BH=v(ht()),HH=v(M()),gE=v(tt()),xH=v(J());Rc();KR=v(V());AE();(0,TE.initSync)();En=Buffer.alloc(1024),Ga=new DataView(En.buffer,En.byteOffset,1024),qH={writeKey(e,t,r){return e===gc?(t.set(gc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ka.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,ka.readKey)(e,t,r)}},FH={encoding:"binary",keyEncoder:qH},GR=(0,xH.convertToMS)((0,TE.get)(HH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Wne=1e3,SE=1e4;a(RE,"openAuditStore");a(Qne,"setAuditRetention");kR=16,VR=32,DH=1,$R=2,MH=3,UH=4,PH=5,GH={put:DH|kR,[DH]:"put",delete:$R,[$R]:"delete",message:MH|kR,[MH]:"message",invalidate:UH,[UH]:"invalidate",patch:PH|VR,[PH]:"patch"};a(i_,"createAuditEntry");a(Bt,"readAuditEntry");YR=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(vH,"readKeySafely")});var QR={};Ve(QR,{add:()=>OE,applyReverse:()=>kH,getRecordAtTime:()=>WR,rebuildUpdateBefore:()=>bE});function OE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function bE(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,OE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function kH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=zne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=VH}}function WR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=Bt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":kH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===VH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=Bt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var zne,VH,AE=Ae(()=>{Pi();a(OE,"add");OE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};zne={add:OE};a(bE,"rebuildUpdateBefore");a(kH,"applyReverse");VH={};a(WR,"getRecordAtTime")});function Yr(e){return e[Mt]||(e[Mt]=Object.create(null))}function CE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[Re])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a string, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new hn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new hn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){if(!(typeof l=="bigint"||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=BigInt(l);else throw new hn.ClientError(`${c} must be a number, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new hn.ClientError(`${c} must be a Date, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Yr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Yr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new hn.ClientError(`${c} must be an object, attempt to assign ${l}`);Yr(this)[c]=l},"set")}_={get(){let l=this[Mt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[ye]?.[c];return f.update(E)}return f}let d=this[ye]?.[c];if(d&&typeof d=="object"){let f=$H(d,o);if(f)return l||(l=this[Mt]=Object.create(null)),l[c]=f}return d},set:u,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 u=this[Mt];return u?.[o]!==void 0?u[o]:this[ye]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new hn.ClientError("Can not add a property to a sealed table schema");Yr(this)[o]=c}),i("deleteProperty",function(o){Yr(this)[o]=void 0}),i("toJSON",function(){let o=this[Mt],c;for(let _ in o){c||(c=Object.assign({},this[ye]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ye])),Object.assign(c,this)),c||this[ye]}),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 $H(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){this[ye]=s}},CE(r,t)),new r(e)):new NE(e);case Array:let n=new IE(e.length);n[ye]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=$H(o,t?.elements)),n[s]=o}return n;default:return e}}function Q_(e){let t=e[Mt],r;for(let s in t){r||(r=Object.assign({},e[ye]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Q_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function wo(e,t=e[Mt]){let r;if(e[ye]&&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=wo(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[ye]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=QR[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wo(s);r[n]=s}return r?Object.freeze(r):e[ye]||e}function yE(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Io]||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?.[ye]===s){if(yE(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[ye]===i){if(yE(s))return!0}else return!0}else return!0}}return!1}var hn,Mt,NE,Io,IE,wE,z_=Ae(()=>{yn();hn=v(Z());AE();Mt=Symbol("own-data");a(Yr,"getChanges");a(CE,"assignTrackedAccessors");a($H,"trackObject");NE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};CE(NE,{});a(Q_,"collapseData");a(wo,"deepFreeze");a(yE,"hasChanges");Io=Symbol.for("has-array-changes"),IE=class extends Array{static{a(this,"TrackedArray")}[Io];constructor(t){super(t)}splice(...t){return this[Io]=!0,super.splice(...t)}push(...t){return this[Io]=!0,super.push(...t)}pop(){return this[Io]=!0,super.pop()}unshift(...t){return this[Io]=!0,super.unshift(...t)}shift(){return this[Io]=!0,super.shift()}};IE.prototype.constructor=Array;wE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var _p={};Ve(_p,{CONTEXT:()=>Re,ID_PROPERTY:()=>De,IS_COLLECTION:()=>mn,RECORD_PROPERTY:()=>ye,Resource:()=>qt,snake_case:()=>Xne,transformForSelect:()=>DE});function Xne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function YH(e,t){if(Sl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Sl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new JR;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Sl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Kr(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?o?(l=i,o=o[Re]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Re]||i):l=i:(l=s,c=l[De]??l[this.primaryKey]??null):i?o=i[Re]||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(u=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]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,E)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=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(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.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 d.resetTransaction=!0,Qe(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,u,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,l,o):E.allowUpdate(o.user,l,o):t.type==="create"?E.allowCreate(o.user,l,o):E.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new LE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new LE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Wr(e,t){let r=new QH.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 zR(e,t,r){let n=e[ye];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 DE(e,t){let r=t?.propertyResolvers,n=t[Re],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):zR(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(zR(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(f=>f&&typeof f=="object"?c(f):f);let _={},l=i(zR(u,r,n)),d;for(let f of e){let E=l(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 u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=DE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var KH,WH,QH,Re,De,mn,ye,Jne,qt,LE,Sl,JR,yn=Ae(()=>{KH=require("crypto");Ec();WH=require("../../index"),QH=v(Z());z_();Ji();Rf();Re=Symbol.for("context"),De=Symbol.for("primary-key"),mn=Symbol("is-collection"),ye=Symbol("stored-record"),Jne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[De]=t;let n=r?.[Re];this[Re]=n!==void 0?n:r||null}static get=Kr(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=DE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Kr(function(t,r,n,s){if(Array.isArray(s)&&t[mn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Wr(t,"put")},{hasContent:!0,type:"update"});static patch=Kr(function(t,r,n,s){return t.patch?t.patch(s,r):Wr(t,"patch")},{hasContent:!0,type:"update"});static delete=Kr(function(t,r,n,s){return t.delete?t.delete(r):Wr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,KH.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),Qe(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Wr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Kr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Wr(t,"delete")},{hasContent:!1,type:"update"});static post=Kr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Kr(function(t,r,n,s){return t.connect?t.connect(s,r):Wr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Kr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Wr(t,"subscribe")},{type:"read"});static publish=Kr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.publish?t.publish(s,r):Wr(t,"publish")},{hasContent:!0,type:"create"});static search=Kr(function(t,r,n,s){let i=t.search?t.search(r):Wr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=DE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Kr(function(t,r,n,s){return t.search?t.search(s,r):Wr(t,"search")},{hasContent:!0,type:"read"});static copy=Kr(function(t,r,n,s){return t.copy?t.copy(s,r):Wr(t,"copy")},{type:"create"});static move=Kr(function(t,r,n,s){return t.move?t.move(s,r):Wr(t,"move")},{type:"delete"});post(t){if(this[mn])return this.constructor.create(this[De],t,this[Re]);Wr(this,"post")}static isCollection(t){return t?.[mn]}static coerceId(t){return t}static parseQuery(t){return gf(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&&Jne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:YH(t,this),isCollection:Sl}}let i=YH(t,this);return Sl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Re],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 u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[De]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[De],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[mn]=!0),s}subscribe(t){return new Nn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Nn}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[De]}getContext(){return this[Re]}};qt.prototype[Re]=null;(0,WH._assignPackageExport)("Resource",qt);a(Xne,"snake_case");LE=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(YH,"pathToId");JR=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Kr,"transactional");a(Wr,"missingMethod");a(zR,"selectFromObject");a(DE,"transformForSelect")});function JH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Va||((0,ME.onMessageByType)(zH,l=>{XH(l.path)}),Va=Object.create(null));let o=Va[s]||(Va[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=pa(t);let u=new jR(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function XH(e,t){if(!Va)return;let r=Va[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=Bt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=pa(o.recordId),d=0;do{let f=c.get(l);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,XR.info)("omitting",u,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(u,o,s,p)}catch(p){console.error(p),(0,XR.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E):l=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},r.lastTxnTime,!0)}function jH(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,ME.broadcast)({type:zH,path:s}),XH(s,!0)})}}var XR,ME,zH,Va,cme,jR,ZH=Ae(()=>{XR=v(V()),ME=v(tt());Ec();Pu();Pi();zH="transaction",cme=Buffer.alloc(4096);a(JH,"addSubscription");jR=class extends Nn{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(XH,"notifyFromTransactionData");a(jH,"listenToCommits")});var Dg={};Ve(Dg,{coerceType:()=>UE,makeTable:()=>BE,setServerUtilities:()=>ose,updateResource:()=>PE});function BE(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),jH(i,u);let S=$h(i,n,u),A=0,I,w,B,K={},q=Promise.resolve(),P,Q,Y;for(let k of p)(k.assignCreatedTime||k.name==="__createdtime__")&&(P=k),(k.assignUpdatedTime||k.name==="__updatedtime__")&&(Q=k),k.expiresAt&&(Y=k),k.isPrimaryKey&&(K=k);let z,re=[],Ie=[],ne=1,ct=2,de={},ut={},Tn=864e5,lA,Dl,$s,_A=!1,KE,Lx=i.getRange({start:!1,end:!1}).constructor,Dx=10,Mx=6;E&&EA();class Ke extends qt{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=P;static updatedTimeProperty=Q;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),w=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let N=a(b=>{let y=this.sources.slice(0,-1);if(y=y.filter(L=>L[b]&&(!L[b].reliesOnPrototype||L.prototype[b])),y.length>0)if(y.length===1){let L=y[0];return(D,U,x)=>{if(D?.source!==L)return L[b](U,x,D)}}else return(L,D,U)=>{let x=[];for(let W of y){if(L?.source===W)break;x.push(W[b](D,U,L))}return Promise.all(x)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],O=a(b=>{if(R[b]&&(!R[b].reliesOnPrototype||R.prototype[b]))return(y,L,D)=>{if(!y?.source)return R[b](L,D,y)}},"getApplyToCanonicalSource");return de={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},ut={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish"),invalidate:N("invalidate")},(async()=>{let b=!1,y=a(async(L,D)=>{let U=L.value,x=L.table?rt[c][L.table]:Ke;if(c===Fn.SYSTEM_SCHEMA_NAME&&(L.table===Fn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===Fn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(b=!0),L.id===void 0&&(L.id=U[x.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=m;let W=await x.getResource(L.id,D,$a);switch(L.type){case"put":return W._writeUpdate(U,!0,$a);case"patch":return W._writeUpdate(U,!1,$a);case"delete":return W._writeDelete($a);case"publish":return W._writePublish(U,$a);case"invalidate":return W.invalidate($a);default:Je.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=m.subscribe;L&&h==null&&(h=!0);let D=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Co.getWorkerIndex)()):(0,Co.getWorkerIndex)()===0,U=L&&D&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U){let x;for await(let W of U)try{if(!(W.type==="transaction"?W.writes[0]:W)){Je.error("Bad subscription event",W);continue}if(W.source=m,x)if(W.beginTxn)x.resolve();else{y(W,x);continue}if(W.type==="end_txn")continue;let le=Qe(W,()=>{if(W.type==="transaction"){let te=[];for(let se of W.writes)try{te.push(y(se,W))}catch(He){throw He.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(W),He}return Promise.all(te)}else if(W.type==="define_schema"){let te=this.attributes.slice(0),se;for(let He of W.attributes)te.find(ie=>ie.name===He.name)||(te.push(He),se=!0);se&&(_t({table:s,database:c,attributes:te,origin:"cluster"}),Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Fn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return W.beginTxn?(x=W,y(W,W),new Promise(te=>{x.resolve=te})):y(W,W)});b&&(await le,Nl.signalUserChange(new yl.UserEventMsg(process.pid))),W.onCommit&&(le?.then?le.then(W.onCommit):W.onCommit())}catch(Se){Je.error("error in subscription handler",Se)}}}catch(L){Je.error(L)}})(),this}static getResource(m,g,N){let R=super.getResource(m,g,N);if(m!=null){za(m);try{if(R.hasOwnProperty(ye))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let O=!N?.async||i.cache?.get(m),b=Nr(g),y=b.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return WE(m,g,{transaction:y},O,L=>{if(L?PE(R,L):R[ye]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let D=QE(m,L,g,R);if(D)return b?.disregardReadTxn(),R[ZR]=!0,tA(D,U=>(PE(R,U),R))}return R})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(m)),O}}return R}ensureLoaded(){let m=QE(this[De],this[Qr],this[Re]);if(m)return this[ZR]=!0,tA(m,g=>{this[Qr]=g,this[ye]=g.value,this[Ol]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,Tn=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Tn=Tn||(d+f)/4,JE()}static enableAuditing(m=!0){E=m,m&&EA(),Ke.audit=m}static coerceId(m){return m===""?null:UE(m,K)}static async dropTable(){if(delete rt[c][s],c===o){for(let m of p)l.remove(Ke.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Ke.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Nl.signalSchemaChange(new yl.SchemaEventMsg(process.pid,Fn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[mn])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let g=Ke.getRecordCount();return{recordCount:g.recordCount,estimatedRecordRange:g.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Re]?.returnNonexistent)return this}allowRead(m,g){let N=Ul(m);if(N?.read){if(N.isSuperUser)return!0;let R=N.attribute_permissions,O=g?.select;if(R?.length>0||_A&&O){if(g||(g={}),O){let b=R?.length>0&&eA(R,"read");g.select=O.map(y=>{let L=y.name||y;if(!b||b[L]){let D=$s[L]?.definition?.tableClass;if(D){if(y.name||(y={name:y}),!D.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else g.select=R.filter(b=>b.read&&!$s[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let N=Ul(m);if(N?.update){let R=N.attribute_permissions;if(R?.length>0){let O=eA(R,"update");for(let b in g)if(!O[b])return!1;for(let b of R){let y=b.attribute_name;!b.update&&!(y in g)&&(g[y]=this.getProperty(y))}}return!0}}allowCreate(m,g){if(this[mn]){let N=Ul(m);if(N?.insert){let R=N.attribute_permissions;if(R?.length>0){let O=eA(R,"insert");for(let b in g)if(!O[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Ul(m)?.delete}update(m,g){if(!Nr(this[Re]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;return typeof m=="object"&&m&&(g?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[ye]={},this[Mt]=m):(R=this[Mt],R&&(m=Object.assign(R,m)),this[Mt]=R=m)),this._writeUpdate(this[Mt],g),this}addTo(m,g){if(typeof g=="number")this[Tl]===tx?this.set(m,(+this.getProperty(m)||0)+g):(this[Tl]||this.update(),this.set(m,new wE(g)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,g){if(typeof g=="number")return this.addTo(m,-g);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let g=this[Re],N=this[De];za(N),Nr(this[Re]).addWrite({key:N,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Re]?.nodeName,before:de.invalidate?.bind(this,g,N),beforeIntermediate:ut.invalidate?.bind(this,g,N),commit:(O,b)=>{if(b?.version>O)return;let y=null;for(let L in r)y||(y={}),y[L]=this.getProperty(L);S(N,y,this[Qr],O,gl,E,this[Re],0,"invalidate")}})}static evict(m,g,N){let R=this.Source,O;if(!((w||E)&&(!g||(O=i.getEntry(m),!O||!g)||O.version!==N))){if(w){if(i.hasLock(m,O.version))return;let b;for(let y in r)b||(b={}),b[y]=g[y];if(b)return S(m,b,O,N,Rl,null,null,0,null,!0)}return i.ifVersion(N,()=>{Ml(m,g,null)}),E?S(m,null,O,N,Rl,null,null,0,null,!0):i.remove(m,N)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=s,m.schema||=c,ax.operation(m,g)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,g,N){let R=this[Re],O=Nr(R),b=this[De];za(b);let y=this[Qr];this[Tl]=g?tx:nse;let L={key:b,store:i,entry:y,nodeName:R?.nodeName,validate:D=>{m||(m=this[Mt]),g||m&&yE(m)?(this.validate(m,!g),R?.source||(Q&&(m[Q.name]=Q.type==="Date"?new Date(D):Q.type==="String"?new Date(D).toISOString():D),g&&(t&&m[t]!==b&&(m[t]=b),P&&(y?.value?m[P.name]=y?.value[P.name]:m[P.name]=P.type==="Date"?new Date(D):P.type==="String"?new Date(D).toISOString():D),m=wo(m)))):O.removeWrite(L)},before:g?de.put?()=>de.put(R,b,m):null:de.patch?()=>de.patch(R,b,m):de.put?()=>de.put(R,b,wo(this)):null,beforeIntermediate:g?ut.put?()=>ut.put(R,b,m):null:ut.patch?()=>ut.patch(R,b,m):ut.put?()=>ut.put(R,b,wo(this)):null,commit:(D,U,x)=>{x&&(R&&U?.version>(R.lastModified||0)&&(R.lastModified=U.version),this[Qr]=U,g||(this[ye]=U?.value??null)),this[Mt]=m,this[Ol]=D;let W=U?.value,Se=m;if(this[Tl]=0,U?.version>D)if(E){let He=U.localTime,ie=U.version;for(;Se&&(He>D||ie>D&&He>0);){let _e=u.get(He),ke=Bt(_e);if(ie=ke.version,ie>D)if(ke.type==="patch"){let Ue=ke.getValue(i);Se=bE(Se,Ue)}else(ke.type==="put"||ke.type==="delete")&&(Se=null);He=ke.previousLocalTime}}else g?Se=null:Se=bE(Se,W);let le=wo(this,Se);this[ye]=le;let te;g||(te=m),Ml(b,W,le);let se=g?"put":"patch";S(b,le,U,D,0,E,R,R.expiresAt||(d?d+Date.now():0),se,!1,te)}};O.addWrite(L)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[mn]){for await(let g of this.search(m))(await Ke.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let g=Nr(this[Re]),N=this[De];za(N);let R=this[Re];return g.addWrite({key:N,store:i,resource:this,nodeName:R?.nodeName,before:de.delete?.bind(this,R,N),beforeIntermediate:ut.delete?.bind(this,R,N),commit:(O,b,y)=>{let L=b?.value;y&&(R&&b?.version>(R.lastModified||0)&&(R.lastModified=b.version),PE(this,b)),!(b?.version>O)&&(Ml(this[De],L),Je.trace("Write delete entry",N,O),E||h?(S(N,null,this[Qr],O,0,E,this[Re],0,"delete"),E||JE()):i.remove(this[De]))}}),!0}search(m){let g=this[Re],N=Nr(g);if(!m)throw new Error("No query provided");let R=m.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(R=[{attribute:null,comparator:"prefix",value:this[De]}].concat(R));let O,b={};function y(oe,bt){let je;switch(bt){case"and":case void 0:if(oe.length<1)throw new Error('An "and" operator requires at least one condition');je=!0;break;case"or":if(oe.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+bt)}let Ut=je&&{},gn;for(let Pe of oe){if(Pe.conditions){Pe.conditions=y(Pe.conditions,Pe.operator);continue}let Ze=Pe[0]??Pe.attribute,Rn=Ze==null?K:Bs(p,Ze);if(Rn){if(je){let Ni=Ti(Ze),Gn=Ut[Ni];Gn?(Gn.push(Pe),gn=!0):Ut[Ni]=[Pe]}Rn.type&&(Pe[1]===void 0?Pe.value=D(Pe.value,Rn):Pe[1]=D(Pe[1],Rn))}else if(Ze!=null)throw(0,pn.handleHDBError)(new Error,`${Ze} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return oe;if(gn)for(let Pe in Ut){let Ze=Ut[Pe],Rn=Ze.length;if(Rn>1)for(let Ni=0;Ni<Rn;Ni++){let Gn=Ze[Ni];if(Gn.comparator==="ge"||Gn.comparator==="greater_than_equal")for(let Ys=0;Ys<Rn;Ys++){let Uo=Ze[Ys];(Uo.comparator==="le"||Uo.comparator==="less_than_equal")&&(Gn.comparator="between",Gn.value=[Gn.value,Uo.value],oe.splice(oe.indexOf(Uo),1))}if(Gn.comparator==="equals"||!Gn.comparator){for(let Ys=0;Ys<Rn;Ys++)if(Ys!==Ni){let Uo=Ze[Ys];oe.splice(oe.indexOf(Uo),1)}break}}}return oe}a(y,"prepareConditions");function L(oe,bt){if(m.enforceExecutionOrder)return oe;for(let je of oe)je.conditions&&(je.conditions=L(je.conditions,je.operator));return oe.length>1&&bt!=="or"?(0,ox.sortBy)(oe,fg(Ke)):oe}a(L,"orderConditions");function D(oe,bt){return Array.isArray(oe)?oe.map(je=>UE(je,bt)):UE(oe,bt)}a(D,"coerceTypedValues");let U=m.operator;(R.length>0||U)&&(R=y(R,U));let x=typeof m.sort=="object"&&m.sort,W;if(x&&U!=="or"){let oe=x.attribute;if(O=R.find(bt=>Ti(bt.attribute)===Ti(oe)),!O){if(!Bs(p,oe))throw(0,pn.handleHDBError)(new Error,`${Array.isArray(oe)?oe.join("."):oe} is not a defined attribute`,404);O={attribute:oe},R.push(O)}O.descending=!!x.descending}R=L(R,U),x&&(R[0]===O?x.next&&(W={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(O&&R.splice(R.indexOf(O),1),W=x));function Se(oe,bt){let je=oe[0];if(bt==="or"){let Ut=te(je);for(let Pe=1;Pe<oe.length;Pe++){let Ze=oe[Pe],Rn=te(Ze);Ut=Ut.concat(Rn)}let gn=new Set;return Ut.filter(Pe=>{let Ze=Pe.key??Pe;return gn.has(Ze)?!1:(gn.add(Ze),!0)})}else{let Ut=te(je),gn=oe.slice(1).map(Pe=>Zu(Pe,Ke,g,b)).filter(Boolean);return gn.length>0?dA(Ut,se,g,gn):Ut}}a(Se,"executeConditions");let le=m.reverse===!0;function te(oe){return oe.conditions?Se(oe.conditions,oe.operator):ju(oe,N,oe.descending||le,Ke,m.allowFullScan,b)}a(te,"executeCondition");let se=m.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:R,operator:U,postOrdering:W,selectApplied:!!se};let He=N.useReadTxn(),ie=Se(R,U);(m.offset||m.limit!==void 0)&&(ie=ie.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let _e=m.ensureLoaded!==!1,ke=Ke.transformEntryForSelect(se,g,b,_e,!0),Ue=Ke.transformToOrderedSelect(ie,se,W,g,ke);return Ue.onDone=()=>{Ue.results=null,N.doneReadTxn()},Ue.selectApplied=!0,Ue}static transformToOrderedSelect(m,g,N,R,O){let b=new Lx;if(N){m=dA(m,g,R,null);let y;b.iterate=function(){let D,U=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,W=N.dbOrderedAttribute,Se,le,te=!0;function se(ie){let _e=ie.next&&se(ie.next),ke=ie.descending;return(Ue,oe)=>{let bt=zE(Ue,ie.attribute,R),je=zE(oe,ie.attribute,R),Ut=ke?(0,Lo.compareKeys)(je,bt):(0,Lo.compareKeys)(bt,je);return Ut===0?_e?.(Ue,oe)||0:Ut}}a(se,"createComparator");let He=se(N);return{async next(){let ie;if(D)if(ie=D.next(),ie.done){if(x)return b.onDone&&b.onDone(),ie}else return{value:await O(ie.value)};y=[],Se&&y.push(Se);do if(ie=await U.next(),ie.done){if(x=!0,y.length)break;return b.onDone&&b.onDone(),ie}else{let _e=ie.value;if(_e?.then&&(_e=await _e),W){let ke=zE(_e,W,R);if(te)te=!1,le=ke;else if(ke!==le){le=ke,Se=_e;break}}y.push(_e)}while(!0);return N.isGrouped,y.sort(He),D=y[Symbol.iterator](),ie=D.next(),ie.done?(b.onDone&&b.onDone(),ie):{value:await O(ie.value)}},return(){b.onDone&&b.onDone(),U.return()},throw(){b.onDone&&b.onDone(),U.throw()}}};let L=a(D=>{if(typeof g=="object"&&Array.isArray(D.attribute))for(let U=0;U<g.length;U++){let x=g[U],W;if(x.name===D.attribute[0]){for(W=x.sort||(x.sort={});W.next;)W=W.next;W.attribute=D.attribute.slice(1),W.descending=D.descending}else x===D.attribute[0]&&(g[U]=W={name:x,sort:{attribute:D.attribute.slice(1),descending:D.descending}})}D.next&&L(D.next)},"applySortingOnSelect");L(N)}else b.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),b=b.map(O);return b}static transformEntryForSelect(m,g,N,R,O){if(m&&(m===t||m?.length===1&&m[0]===t)){let D=a(U=>U?.key??U,"transform");return m===t?D:m.asArray?U=>[D(U)]:U=>({[t]:D(U)})}let b;R&&w&&!m?.every(D=>{let U;return typeof D=="object"?U=D.name:U=D,r[U]||U===t})&&(b=!0);let y,L=a(D=>{let U;if(D){if(KE=D,U=D.value||D.deref?.(),!U&&(D.key===void 0||D.deref)){if(D=WE(D.key??D,g,{transaction:Nr(g).getReadTxn(),lazy:m?.length<4},!1,x=>x),D?.then)return D.then(L);U=D?.value}if(b&&(D.metadataFlags&(gl|Rl)||D.expiresAt&&D.expiresAt<Date.now())){let x=QE(D.key??D,D,g);if(x?.then)return x.then(L)}}if(U==null)return O?Ya.SKIP:U;if(m&&!(m[0]==="*"&&m.length===1)){let x,W=a((le,te)=>{let se;typeof le=="object"?se=le.name:se=le;let He=$s?.[se],ie;if(He){let _e=N?.[se];if(_e)if(_e.fromRecord)ie=_e.fromRecord(U);else{let Ue=Ti(D.key);ie=_e.get(Ue),ie||(ie=[])}else ie=He(U,g,D);let ke=a(Ue=>{if(Ue&&typeof Ue=="object"){let oe=He.definition?.tableClass||Ke;y||(y={});let bt=y[se]||(y[se]=oe.transformEntryForSelect(se===le?null:le.select||(Array.isArray(le)?le:null),g,_e,R));if(Array.isArray(Ue)){let je=[],Ut=oe.transformToOrderedSelect(Ue,le.select,typeof le.sort=="object"&&le.sort,g,bt)[Symbol.asyncIterator](),gn=a(Ze=>{for(;!Ze.done;){if(Ze?.then)return Ze.then(gn);je.push(Ze.value),Ze=Ut.next()}te(je,se)},"nextValue"),Pe=gn(Ut.next());Pe&&(x||(x=[]),x.push(Pe));return}else if(Ue=bt(Ue),Ue?.then){x||(x=[]),x.push(Ue.then(je=>te(je,se)));return}}te(Ue,se)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then(ke))):ke(ie);return}else ie=U[se],ie&&typeof ie=="object"&&se!==le&&(ie=this.transformEntryForSelect(le.select||le,g,null)({value:ie}));te(ie,se)},"selectAttribute"),Se;if(typeof m=="string")W(m,le=>{Se=le});else if(Array.isArray(m))if(m.asArray)Se=[],m.forEach((le,te)=>{le==="*"?m[te]=U:W(le,se=>Se[te]=se)});else{Se={};let le=m.forceNulls;for(let te of m)if(te==="*")for(let se in U)Se[se]=U[se];else W(te,(se,He)=>{se===void 0&&le&&(se=null),Se[He]=se})}else throw new pn.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>Se):Se}return U},"transform");return L}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||_t({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=!m.rawEvents,N=JH(Ke,this[De]??null,function(y,L,D,U){try{let x=L.getValue?.(i,g);if(!x&&L.type==="patch"&&g){let W=i.getEntry(y);W?.version===L.version?x=W.value:x=L.getValue?.(i,!0,D)}this.send({id:y,timestamp:D,value:x,version:L.version,type:L.type,beginTxn:U})}catch(x){Je.error(x)}},m.startTime||0,this[mn]);this[mn]&&(N.includeDescendants=!0,m.onlyChildren&&(N.onlyChildren=!0)),m.crossThreads===!1&&(N.crossThreads=!1),m.supportsTransactions&&(N.supportsTransactions=!0);let R=this[De],O=m.previousCount;O>1e3&&(O=1e3);let b=m.startTime;if(this[mn]){if(b){if(O)throw new pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:L}of u.getRange({start:b,exclusiveStart:!0})){let D=Bt(L);if(D.tableId!==n)continue;let U=D.recordId;(R==null||sx(R,U))&&N.send({id:U,timestamp:y,...D}),N.startTime=y}}else if(O){let y=[];for(let{key:L,value:D}of u.getRange({start:"z",end:!1,reverse:!0}))try{let U=Bt(D);if(U.tableId!==n)continue;let x=U.recordId;if(R==null||sx(R,x)){let W=U.getValue(i,g,L);if(y.push({id:x,timestamp:L,value:W,version:U.version,type:U.type}),--O<=0)break}}catch(U){Je.error("Error getting history entry",L,U)}for(let L=y.length;L>0;)N.send(y[--L]);y[0]&&(N.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:L,version:D,localTime:U}of i.getRange({start:R??!1,end:R==null?void 0:[R,Lo.MAXIMUM_KEY],versions:!0}))L&&N.send({id:y,version:D,timestamp:U,value:L})}else{O&&!b&&(b=0);let y=this[Qr]?.localTime;if(y===Vh&&(i.cache?.delete(R),this[Qr]=i.getEntry(R),Je.warn("re-retrieved record",y,this[Qr]?.localTime),y=this[Qr]?.localTime),Je.trace("Subscription from",b,"from",R,y),b<y){let L=[],D=y;do{let U=u.get(D);if(U){m.omitCurrent=!0;let x=Bt(U),W=x.getValue(i,g,D);L.push({id:R,value:W,timestamp:D,...x}),D=x.previousLocalTime}else break;O&&O--}while(D>b&&O!==0);for(let U=L.length;U>0;)N.send(L[--U]);N.startTime=y}!m.omitCurrent&&this.doesExist()&&N.send({id:R,version:this[Ol],timestamp:y,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[ye]||this[Tl])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let N=Nr(this[Re]),R=this[De]||null;za(R);let O=this[Re];N.addWrite({key:R,store:i,entry:this[Qr],nodeName:O?.nodeName,validate:()=>{this.validate(m)},before:de.publish?.bind(this,O,R,m),beforeIntermediate:ut.publish?.bind(this,O,R,m),commit:(b,y,L)=>{y===void 0&&h&&!E&&JE(),S(R,y?.value??null,y,y?.version||b,0,!0,O,y?.expiresAt,"message",!1,m)}})}validate(m,g){let N,R=a((O,b,y)=>{if(b.type&&O!=null)if(g&&O.__op__&&(O=O.value),b.properties){typeof O!="object"&&(N||(N=[])).push(`Property ${y} must be an object${b.type?" ("+b.type+")":""}`);let L=b.properties;for(let D=0,U=L.length;D<U;D++){let x=L[D],W=R(O[x.name],x,y+"."+x.name);W&&(O[x.name]=W)}}else switch(b.type){case"Int":(typeof O!="number"||O>>0!==O)&&(N||(N=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(N||(N=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(N||(N=[])).push(`Property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(L=>typeof L=="string")||(N||(N=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(N||(N=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(N||(N=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(N||(N=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(N||(N=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(b.elements)for(let L=0,D=O.length;L<D;L++){let U=O[L],x=R(U,b.elements,y+"[*]");x&&(O[L]=x)}}else(N||(N=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}b.nullable===!1&&O==null&&(N||(N=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,b=p.length;O<b;O++){let y=p[O];if(!y.relationship&&(!g||y.name in m)){let L=R(m[y.name],y,y.name);L&&(m[y.name]=L)}}if(N)throw new pn.ClientError(N.join(". "))}getUpdatedTime(){return this[Ol]}wasLoadedFromSource(){return w?!!this[ZR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let N of m){if(!N.name)throw new pn.ClientError("Attribute name is required");if(N.name.match(/[`/]/))throw new pn.ClientError("Attribute names cannot include backticks or forward slashes");g.push(N)}return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static async removeAttributes(m){let g=p.filter(N=>!m.includes(N.name));return _t({table:s,database:c,schemaDefined:_,attributes:g}),Ke.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,N=5e3,R=1e3,O;g>N&&!m?.exactCount&&(O=R);let b=0;for(let{value:y}of i.getRange({start:!0,lazy:!0,limit:O}))y!=null&&b++;if(O){let y=b;b=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:O}))se!=null&&b++;let L=O*2,D=(b+y)/L,U=Math.pow((b-y+1)/O/2,2)+D*(1-D)/L,x=Math.max(Math.sqrt(U)*g,1),W=Math.round(D*g),Se=Math.max(W-1.96*x,0),le=Math.min(W+1.96*x,g),te=Math.pow(10,Math.round(Math.log10(x)));return te>W&&(te=te/10),b=Math.round(W/te)*te,{recordCount:b,estimatedRange:[Math.round(Se),Math.round(le)]}}return{recordCount:b}}static updatedAttributes(){$s=this.propertyResolvers={$id:(m,g,N)=>({value:N.key}),$updatedtime:(m,g,N)=>N.version,$record:(m,g,N)=>N?{value:m}:m};for(let m of this.attributes){m.resolve=null;let g=m.relationship;if(g)if(_A=!0,g.to)m.elements?.definition?($s[m.name]=m.resolve=(N,R,O)=>{let b=N[g.from?g.from:t],y=m.elements.definition.tableClass;return O?ju({attribute:g.to,value:b},Nr(R).getReadTxn(),!1,y).asArray:y.search([{attribute:g.to,value:b}],R).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(g.from){let N=m.definition||m.elements?.definition;N?($s[m.name]=m.resolve=(R,O,b)=>{let y=R[g.from];if(y!==void 0){if(m.elements){let L,D=y.map(U=>{let x=b?N.tableClass.primaryStore.getEntry(U,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(U,O);return x?.then&&(L=!0),x});return g.filterMissing?L?Promise.all(D).then(U=>U.filter(ix)):D.filter(ix):L?Promise.all(D):D}return b?N.tableClass.primaryStore.getEntry(y,{transaction:Nr(O).getReadTxn()}):N.tableClass.get(y,O)}},m.set=(R,O)=>{if(Array.isArray(O)){let b=O.map(y=>y[De]||y[N.tableClass.primaryKey]);R[g.from]=b}else{let b=O[De]||O[N.tableClass.primaryKey];R[g.from]=b}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}CE(this,this)}static async deleteHistory(m=0){let g;for(let{key:N,value:R}of u.getRange({start:0,end:m}))await Al(),Bt(R).tableId===n&&(g=u.remove(N));await g}static async*getHistory(m=0,g=1/0){for(let{key:N,value:R}of u.getRange({start:m,end:g})){await Al();let O=Bt(R);O.tableId===n&&(yield{id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user})}}static async getHistoryOfRecord(m){let g=[];if(m==null)throw new Error("An id is required");let N=i.getEntry(m);if(!N)return g;let R=N.localTime;if(!R)throw new Error("The entry does not have a local audit time");let O=0;do{await Al();let b=u.get(R);if(b){let y=Bt(b);g.push({id:y.recordId,localTime:R,version:y.version,type:y.type,value:y.getValue(i,!0,R),user:y.user}),R=y.previousLocalTime}else break}while(O<1e3&&R);return g.reverse()}static cleanup(){z?.remove()}}Ke.updatedAttributes();let Ux=Ke.prototype;return Ux[rse]=!0,d&&Ke.setTTLExpiration(d/1e3),Y&&Px(),Ke;function Ml(k,m,g){let N;for(let R in r){let O=r[R],b=O.isIndexing,y=g?.[R],L=m?.[R];if(y===L&&!b)continue;N=!0;let D=O.indexNulls,U=(0,bl.getIndexedValues)(L,D);if(U){ex&&O.prefetch(U.map(x=>({key:x,value:k})),nx);for(let x=0,W=U.length;x<W;x++)O.remove(U[x],k)}if(U=(0,bl.getIndexedValues)(y,D),U){ex&&O.prefetch(U.map(x=>({key:x,value:k})),nx);for(let x=0,W=U.length;x<W;x++)O.put(U[x],k)}}return N}a(Ml,"updateIndices");function za(k){switch(typeof k){case"number":return!0;case"string":if(k.length<659)return!0;if(k.length>rx)throw new Error("Primary key size is too large: "+k.length);break;case"object":if(k===null)return!0;break;case"bigint":if(k<2n**64n&&k>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof k)}if((0,Lo.writeKey)(k,sse,0)>rx)throw new Error("Primary key size is too large: "+k.length);return!0}a(za,"checkValidId");function WE(k,m,g,N,R){let O=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,k);let b=i.getEntry(k,g);return b&&m&&(b?.version>(m.lastModified||0)&&(m.lastModified=b.version),b?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=b.localTime)),R(b,k)},"whenPrefetched");return N?O():ne>0?(ne--,O()):new Promise((b,y)=>{ne===0?(ne--,i.prefetch([k],()=>{L(),D()})):(re.push(k),Ie.push(D),re.length>Mx&&(ne--,L()));function L(){if(re.length>0){let U=Ie;i.prefetch(re,()=>{ne===-1?L():ne++;for(let x of U)x()}),re=[],Ie=[],ct>2&&ct--}else ne=ct,ct<Dx&&ct++}a(L,"prefetch");function D(){try{b(O())}catch(U){y(U)}}a(D,"load")})}a(WE,"loadLocalRecord");function Ul(k){if(!k?.role)return;let m=k.role.permission;if(m.super_user)return ise;let g=m[c],N,R=g?.tables;if(R)return R[s];if(c==="data"&&(N=m[s])&&!N.tables)return N}a(Ul,"getTablePermissions");function QE(k,m,g,N){if(w){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(gl|Rl)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,nn(!R,"cache-hit",s)),R){let O=fA(k,m,g).then(b=>(b?.value?.[ye]&&Je.error("Can not assign a record with a record property"),g&&(b?.version>(g.lastModified||0)&&(g.lastModified=b.version),g.lastRefreshed=Date.now()),b));if(g?.onlyIfCached||m?.value&&N?.allowStaleWhileRevalidate?.(m,k)){if(O.catch(b=>Je.warn(b)),g?.onlyIfCached&&!N.doesExist())throw new pn.ServerError("Entry is not cached",504);return}else return O}}}a(QE,"ensureLoadedFromSource");function Nr(k){let m=k?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new zi,m.lmdbDb=i,m;m=g}while(!0)}else return new K_}a(Nr,"txnForContext");function zE(k,m,g){if(!k)return;KE=k;let N=k.value||k.deref?.()||(KE=i.getEntry(k.key))?.value;if(typeof m=="object"){let O=$s,b=N;for(let y=0,L=m.length;y<L;y++){let D=m[y],U=O?.[D];b=U&&b?U(b,g,!0)?.value:b?.[D],O=U?.definition?.tableClass?.propertyResolvers}return b}let R=$s[m];return R?R(N,g):N[m]}a(zE,"getAttributeValue");function dA(k,m,g,N){let R=Nr(g).getReadTxn(),O=N?.length,b={transaction:R,lazy:O>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0};function y(L,D){let U=L?.value;if(!U)return Ya.SKIP;for(let x=0;x<O;x++)if(!N[x](U,L))return Ya.SKIP;return D!==void 0&&(L.key=D),L}if(a(y,"processEntry"),O>0||!k.hasEntries){let L=k.map(D=>typeof D=="object"&&D.key!==void 0?O>0?y(D):D:D==null?Ya.SKIP:WE(D,g,b,!1,y));return Array.isArray(k)&&(L=L.filter(D=>D!==Ya.SKIP)),L.hasEntries=!0,L}return k}a(dA,"transformToEntries");async function fA(k,m,g){let N=m?.metadataFlags,R=m?.version,O,b;if(!i.attemptLock(k,R,()=>{clearTimeout(b);let U=i.getEntry(k);!U||!U.value||U.metadataFlags&(gl|Rl)?O(fA(k,i.getEntry(k),g)):O(U)}))return new Promise(U=>{O=U,b=setTimeout(()=>{i.unlock(k,R)},tse)});let y=m?.value,L={requestContext:g,replacingRecord:y,replacingVersion:R,source:null,resourceCache:g?.resourceCache},D=g?.responseHeaders;return new Promise((U,x)=>{let W;tA(Qe(L,async Se=>{let le=performance.now(),te,se,He;try{for(let Ue of Ke.sources)if(Ue.get&&(!Ue.get.reliesOnPrototype||Ue.prototype.get)&&(L.source=Ue,te=await Ue.get(k,L),te))break;He=N&gl;let _e=L.lastModified||He&&R;se=He||_e>R||!y,_e||(_e=(0,bl.getNextMonotonicTime)());let ke=performance.now()-le;if(qr(ke,"cache-resolution",s),D&&D.append("Server-Timing",`cache-resolve;dur=${ke.toFixed(2)}`),Se.timestamp=_e,d&&!L.expiresAt&&(L.expiresAt=Date.now()+d),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]!==k&&(te[t]=k)}W=!0,U({version:_e,value:te})}catch(_e){_e.message+=` while resolving record ${k} for ${s}`,y&&((_e.code==="ECONNRESET"||_e.code==="ECONNREFUSED"||_e.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(_e.statusCode===500||_e.statusCode===502||_e.statusCode===503||_e.statusCode===504))?(U({version:R,value:y}),Je.trace(_e.message,"(returned stale record)")):x(_e),L.transaction.abort();return}if(g?.noCacheStore){L.transaction.abort();return}Nr(L).addWrite({key:k,store:i,entry:m,nodeName:"source",commit:(_e,ke)=>{if(ke?.version!==R)return;let Ue=Ml(k,y,te);te?(ut.put?.(L,k,te),S(k,te,ke,_e,0,E&&se||null,L,L.expiresAt,"put",!!He)):(ut.delete?.(L,k),E||h?S(k,null,ke,_e,0,E&&se||null,L,0,"delete",!!He):i.remove(k,R))}})}),()=>{i.unlock(k,R)},Se=>{i.unlock(k,R),W&&Je.error("Error committing cache update",Se)})})}a(fA,"getFromSource");function JE(){if(Tn!==lA&&(lA=Tn,(0,Co.getWorkerIndex)()===(0,Co.getWorkerCount)()-1)){if(Dl&&clearTimeout(Dl),!Tn)return;let k=new Date;k.setMonth(0),k.setDate(1),k.setHours(0),k.setMinutes(0),k.setSeconds(0);let m=Math.ceil((Date.now()-k.getTime())/Tn)*Tn+k.getTime(),g=a(N=>{Je.trace(`Scheduled next cleanup scan at ${new Date(N)}ms`),Dl=setTimeout(()=>q=q.then(async()=>{if(g(Math.max(N+Tn,Date.now())),i.rootStore.status!=="open"){clearTimeout(Dl);return}let R=50,O=new Array(R),b=0;Je.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:L,value:D,version:U,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let W;D===null&&!E&&U+ese<Date.now()?W=i.remove(L,U):x&&x+f<Date.now()&&(W=Ke.evict(L,D,U),y++),W&&(await O[b],O[b]=W.catch(Se=>{Je.error("Cleanup error",Se)}),++b>=R&&(b=0)),await Al()}Je.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){Je.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(N-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(JE,"scheduleCleanup");function EA(){z=u?.addDeleteRemovalCallback(n,k=>{let m=i.getEntry(k);m?.value===null&&i.remove(k,m.version)})}a(EA,"addDeleteRemoval");function Px(){(0,Co.getWorkerIndex)()===0&&setInterval(async()=>{try{let k=Y.name,m=r[k];if(!m)throw new Error(`expiresAt attribute ${Y} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let N=i.getEntry(g);N?.value?.[k]<Date.now()&&Ke.evict(g,N.value,N.version),await Al()}}catch(k){Je.error("Error in evicting old records",k)}},Zne).unref()}a(Px,"runRecordExpirationEviction")}function eA(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 nx(){}function ose(e){ax=e}function UE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!ase.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,vE.autoCast)(e):e}function sx(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 tA(e,t,r){return e?.then?e.then(t,r):t(e)}function PE(e,t){e[Qr]=t,e[ye]=t?.value??null,e[Ol]=t?.version}function ix(e){return e!=null}var Fn,Ya,bl,ox,Il,pn,Nl,yl,Je,Lo,Co,vE,jne,ax,Zne,ese,ex,tse,Ol,rse,Qr,Tl,tx,nse,ZR,$a,gl,Rl,sse,rx,ise,Ome,ase,Al,vf=Ae(()=>{Fn=v(M()),Ya=require("lmdb"),bl=v(Dr()),ox=require("lodash");yn();Up();Il=v(j());ZH();pn=v(Z()),Nl=v(As()),yl=v(Ln());ge();Rf();Je=v(V());z_();Ji();Lo=require("ordered-binary"),Co=v(tt());Pi();vE=v(J());Rc();ys();AE();jne=new Uint8Array(9);jne[8]=192;Zne=6e4,ese=864e5;Il.initSync();ex=Il.get(Fn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tse=1e4,Ol=Symbol.for("version"),rse=Symbol.for("incremental-update"),Qr=Symbol("entry"),Tl=Symbol("is-saving"),tx=1,nse=2,ZR=Symbol("loaded-from-source"),$a={isNotification:!0,ensureLoaded:!1},gl=1,Rl=8,sse=Buffer.allocUnsafeSlow(8192),rx=1978,ise={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Ome=(0,vE.convertToMS)(Il.get(Fn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(BE,"makeTable");a(eA,"attributesAsObject");a(nx,"noop");a(ose,"setServerUtilities");ase=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(UE,"coerceType");a(sx,"isDescendantId");Al=a(()=>new Promise(setImmediate),"rest");a(tA,"when");a(PE,"updateResource");a(ix,"exists")});var xe={};Ve(xe,{database:()=>zc,databases:()=>rt,dropDatabase:()=>xp,dropTableMeta:()=>fse,getDatabases:()=>Mn,getTables:()=>cse,onUpdatedTable:()=>fR,readMetaDb:()=>wl,resetDatabases:()=>use,table:()=>_t,tables:()=>Mr});function cse(){return GE||Mn(),Mr||{}}function Mn(){if(GE)return rt;GE=!0,Qa=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),t=(0,Zt.get)(Jr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Zt.get)(Jr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,zr.existsSync)(e)?e:(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,zr.existsSync)(e))for(let r of(0,zr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&wl((0,Xe.join)(e,r.name),null,n)}if((0,zr.existsSync)((0,Wa.getBaseSchemaPath)())){for(let r of(0,zr.readdirSync)((0,Wa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,Wa.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,Wa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,zr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);wl((0,Xe.join)(n,i.name),(0,Xe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,zr.existsSync)(s))for(let o of(0,zr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&wl((0,Xe.join)(s,o.name),(0,Xe.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,Xe.join)(c.path,(0,Xe.basename)(o+".mdb"));(0,zr.existsSync)(u)&&wl(u,o,r,null,!0)}}for(let r in rt){let n=Qa.get(r);if(n){let s=rt[r];r.includes("delete")&&Sn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Sn.trace(`delete table class ${i}`),delete s[i])}else if(delete rt[r],r==="data"){for(let s in Mr)delete Mr[s];delete Mr[kE]}}return Qa=null,rt}}function use(){GE=!1;for(let[,e]of Oi)e.needsDeletion=!0;Mn();for(let[e,t]of Oi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Oi.delete(e));return rt}function wl(e,t,r=sA,n,s){let i=new rA.default(e,!1);try{let o=Oi.get(e);o?o.needsDeletion=!1:(o=(0,xE.open)(i),Oi.set(e,o));let c=new Do.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(HE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,zr.existsSync)(n)&&(i.path=n,_=(0,xE.open)(i),_.isLegacy=!0):_=RE(o));let l=_x(r),d=l[kE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let z of p)if(z.is_hash_attribute||z.isPrimaryKey){S=z;break}if(!S){Sn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},w=[],B,K,q=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=S.trackDeletes,Q=S.expiration,Y=S.eviction;if(A)I=A.indices,w=A.attributes,A.schemaVersion++;else{B=S.tableId,B?B>=(u.get(Ka)||0)&&u.putSync(Ka,B+1):(S.tableId=B=u.get(Ka),B||(B=1),u.putSync(Ka,B+1),u.putSync(S.key,S));let z=new Do.default(!S.is_hash_attribute,S.is_hash_attribute);K=o_(o.openDB(S.key,z)),K.rootStore=o,K.tableId=B}for(let z of p){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!I[z.name]){let Ie=new Do.default(!z.is_hash_attribute,z.is_hash_attribute);I[z.name]=o.openDB(z.key,Ie),I[z.name].indexNulls=z.indexNulls}let re=w.find(Ie=>Ie.name===z.name);re?w.splice(w.indexOf(re),1,z):w.push(z)}}catch(re){Sn.error("Error trying to update attribute",z,w,I,re)}}if(!A){A=dx(l,E,BE({primaryStore:K,auditStore:_,audit:q,expirationMS:Q&&Q*1e3,evictionMS:Y&&Y*1e3,trackDeletes:P,tableName:E,tableId:B,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let z of iA)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function _x(e){let t=rt[e];if(t||(e==="data"?t=rt[e]=Mr:e==="system"?Object.defineProperty(rt,"system",{value:t=Object.create(null),configurable:!0}):t=rt[e]=Object.create(null)),Qa&&!Qa.has(e)){let r=new Set;t[kE]=r,Qa.set(e,r)}return t}function dx(e,t,r){return e[t]=r,r}function zc({database:e,table:t}){e||(e=sA),Mn();let r=_x(e),n=(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.DATABASES_DIR_NAME),s=(0,Zt.get)(Jr.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,Zt.get)(Jr.CONFIG_PARAMS.STORAGE_PATH)||((0,zr.existsSync)(n)?n:(0,Xe.join)((0,Zt.getHdbBasePath)(),Jr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=Oi.get(o);if(!c){let u=new rA.default(o,!1);c=(0,xE.open)(u),Oi.set(o,c)}return c}async function xp(e){if(!rt[e])throw new Error("Schema does not exist");let t=rt[e];for(let r in t){let s=t[r].primaryStore.rootStore;Oi.delete(s.path),s.status==="open"&&(await s.close(),await cx.remove(s.path))}if(e==="data"){for(let r in Mr)delete Mr[r];delete Mr[kE]}delete rt[e]}function _t({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=sA);let l=zc({database:t,table:e}),d=rt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new Do.default(!1);for(let P of i)P.attribute?(P.name=P.attribute,P.indexed=!0):P.attribute=P.name,P.expiresAt&&(P.indexed=!0);let I,w;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let P=l.auditStore;P||(P=RE(l)),h=i.find(re=>re.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Zt.get)(Jr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Sn.trace(`${e} table loading, opening primary store`);let Q=new Do.default(!1,!0),Y=e+"/",z=o_(l.openDB(Y,Q));z.rootStore=l,S=l.dbisDb=l.openDB(HE.INTERNAL_DBIS_NAME,A),z.tableId=S.get(Ka),z.tableId||(z.tableId=1),S.putSync(Ka,z.tableId+1),h.tableId=z.tableId,f=dx(d,e,BE({primaryStore:z,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,q(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(HE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let B=[];for(let{key:P,value:Q}of S.getRange({start:!0})){let[Y,z]=P.toString().split("/");if(z===""&&(z=Q.name),z){if(Y!==e)continue}else z=Y;if(!i.find(Ie=>Ie.name===z)?.indexed&&Q.indexed&&!Q.isPrimaryKey){q(),I=!0,S.remove(P);let Ie=f.indices[Y];Ie&&B.push(Ie)}}let K=[];try{for(let P of i||[]){if(P.relationship)continue;let Q=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:Q,configurable:!0});let Y=S.get(Q);if(P.isPrimaryKey){if(Y=Y||S.get(Q=e+"/")||{},o!==f.audit||(+r||void 0)!==(+Y.expiration||void 0)||(+n||void 0)!==(+Y.eviction||void 0)){let re=Object.assign({},Y);typeof o=="boolean"&&(o&&f.enableAuditing(o),re.audit=o),r&&(re.expiration=+r),n&&(re.eviction=+n),I=!0,q(),S.put(Q,re)}continue}Y?.attribute&&!Y.name&&(Y.indexed=!0);let z=!Y||Y.type!==P.type||Y.indexed!==P.indexed||JSON.stringify(Y.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(Y.elements)!==JSON.stringify(P.elements);if(P.indexed){let re=new Do.default(!0,!1),Ie=l.openDB(Q,re);(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.workerData?.restartNumber)&&(I=!0,q(),Y=S.get(Q),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Cl.workerData?.restartNumber)&&(I=!0,P.lastIndexedKey=Y?.lastIndexedKey||!1,P.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(P,"dbi",{value:Ie}),P.indexNulls===void 0&&(P.indexNulls=!0),K.push(P)),S.put(Q,P)),Y?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),Ie.indexNulls=P.indexNulls,p[P.name]=Ie}else z&&(I=!0,q(),S.put(Q,P))}}finally{w&&w()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Sn.trace(`${e} table loading, running index`),K.length>0||B.length>0?f.indexingOperation=dse(f,K,B):I&&qE.signalSchemaChange(new FE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let P of iA)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Sn.trace(`${e} table loaded`),f;function q(){w||l.transactionSync(()=>({then(P){w=P}}))}a(q,"startTxn")}async function dse(e,t,r){try{let n=e.schemaVersion;await qE.signalSchemaChange(new FE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,ux.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),s.then(()=>u--,f=>{u--,Sn.error(f)}),Cl.workerData&&Cl.workerData.restartNumber!==lx.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>lse?await s:u>_se&&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 qE.signalSchemaChange(new FE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Sn.error("Error in indexing",n)}}function fse({table:e,database:t}){let r=zc({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 fR(e){iA.push(e)}var Zt,HE,xE,Xe,zr,Wa,Do,rA,Jr,cx,nA,ux,qE,FE,Cl,Sn,lx,sA,kE,Mr,rt,Ka,iA,GE,Oi,Qa,lse,_se,ge=Ae(()=>{Zt=v(j()),HE=v(ht()),xE=require("lmdb"),Xe=require("path"),zr=require("fs"),Wa=v(We());vf();Do=v(a_()),rA=v(u_()),Jr=v(M()),cx=v(require("fs-extra")),nA=require("../../index"),ux=v(Dr()),qE=v(As()),FE=v(Ln()),Cl=require("worker_threads"),Sn=v(V()),lx=v(tt());Pi();Rc();sA="data",kE=Symbol("defined-tables");(0,Zt.initSync)();Mr=Object.create(null),rt=Object.create(null);(0,nA._assignPackageExport)("databases",rt);(0,nA._assignPackageExport)("tables",Mr);Ka=Symbol.for("next-table-id"),iA=[],Oi=new Map;a(cse,"getTables");a(Mn,"getDatabases");a(use,"resetDatabases");a(wl,"readMetaDb");a(_x,"ensureDB");a(dx,"setTable");a(zc,"database");a(xp,"dropDatabase");a(_t,"table");lse=1e3,_se=10;a(dse,"runIndexing");a(fse,"dropTableMeta");a(fR,"onUpdatedTable")});var J=T((Mme,yx)=>{"use strict";var bi=require("path"),px=require("fs-extra"),br=V(),fx=require("fs-extra"),VE=require("os"),Ese=require("net"),hse=require("recursive-iterator"),at=M(),mse=WA(),Ex=require("papaparse"),$E=require("moment"),{inspect:pse}=require("util"),hx=require("is-number"),Dme=require("lodash"),Sse=require("minimist"),Tse=require("https"),gse=require("http"),{hdb_errors:YE}=Z(),Rse=/^((\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)))$/,Sx=require("util").promisify(setTimeout),Ase=100,Ose=5,bse="",Nse=4,mx={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};yx.exports={isEmpty:Xr,isEmptyOrZeroLength:ds,arrayHasEmptyValues:wse,arrayHasEmptyOrZeroLengthValues:Cse,buildFolderPath:Lse,isBoolean:Tx,errorizeMessage:yse,stripFileExtension:Mse,autoCast:Use,autoCastJSON:gx,autoCastJSONDeep:aA,removeDir:Pse,compareVersions:vse,isCompatibleDataVersion:Bse,escapeRawValue:Hse,unescapeValue:xse,stringifyProps:qse,timeoutPromise:Gse,isClusterOperation:Vse,getClusterUser:Yse,checkGlobalSchemaTable:$se,getHomeDir:Ax,getPropsFilePath:Fse,promisifyPapaParse:Kse,removeBOM:Ox,createEventPromise:Wse,checkProcessRunning:Qse,checkSchemaTableExist:zse,checkSchemaExists:bx,checkTableExists:Nx,getStartOfTomorrowInSeconds:Jse,getLimitKey:Xse,isObject:Dse,isNotEmptyAndHasValue:Ise,autoCasterIsNumberCheck:Rx,backtickASTSchemaItems:jse,isPortTaken:kse,createForkArgs:Zse,autoCastBoolean:eie,async_set_timeout:Sx,getTableHashAttribute:tie,doesSchemaExist:rie,doesTableExist:nie,stringifyObj:sie,ms_to_time:iie,changeExtension:oie,getEnvCliRootPath:cA,noBootFile:aie,httpRequest:cie,transformReq:uie,convertToMS:lie,PACKAGE_ROOT:at.PACKAGE_ROOT};function yse(e){return e instanceof Error?e:new Error(e)}a(yse,"errorizeMessage");function Xr(e){return e==null}a(Xr,"isEmpty");function Ise(e){return!Xr(e)&&(e||e===0||e===""||Tx(e))}a(Ise,"isNotEmptyAndHasValue");function ds(e){return Xr(e)||e.length===0||e.size===0}a(ds,"isEmptyOrZeroLength");function wse(e){if(Xr(e))return!0;for(let t=0;t<e.length;t++)if(Xr(e[t]))return!0;return!1}a(wse,"arrayHasEmptyValues");function Cse(e){if(ds(e))return!0;for(let t=0;t<e.length;t++)if(ds(e[t]))return!0;return!1}a(Cse,"arrayHasEmptyOrZeroLengthValues");function Lse(...e){try{return e.join(bi.sep)}catch{console.error(e)}}a(Lse,"buildFolderPath");function Tx(e){return Xr(e)?!1:e===!0||e===!1}a(Tx,"isBoolean");function Dse(e){return Xr(e)?!1:typeof e=="object"}a(Dse,"isObject");function Mse(e){return ds(e)?bse:e.slice(0,-Nse)}a(Mse,"stripFileExtension");function Use(e){return Xr(e)||e===""||typeof e!="string"?e:mx[e]!==void 0?mx[e]:Rx(e)===!0?Number(e):Rse.test(e)?new Date(e):e}a(Use,"autoCast");function gx(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gx,"autoCastJSON");function aA(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=aA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=aA(r);n!==r&&(e[t]=n)}return e}else return gx(e)}a(aA,"autoCastJSONDeep");function Rx(e){if(e.startsWith("0.")&&hx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&hx(e))}a(Rx,"autoCasterIsNumberCheck");async function Pse(e){if(ds(e))throw new Error(`Directory path: ${e} does not exist`);try{await fx.emptyDir(e),await fx.remove(e)}catch(t){throw br.error(`Error removing files in ${e} -- ${t}`),t}}a(Pse,"removeDir");function vse(e,t){if(ds(e)){br.info("Invalid current version sent as parameter.");return}if(ds(t)){br.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(vse,"compareVersions");function Bse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Bse,"isCompatibleDataVersion");function Hse(e){if(Xr(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(Hse,"escapeRawValue");function xse(e){if(Xr(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(xse,"unescapeValue");function qse(e,t){if(Xr(e))return br.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+VE.EOL}!ds(n)&&n[0]===";"?r+=" "+n+s+VE.EOL:ds(n)||(r+=n+"="+s+VE.EOL)}catch{br.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(qse,"stringifyProps");function Ax(){let e;try{e=VE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Ax,"getHomeDir");function Fse(){let e=bi.join(Ax(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return px.existsSync(e)||(e=bi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Fse,"getPropsFilePath");function Gse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Gse,"timeoutPromise");async function kse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Ese.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(kse,"isPortTaken");function Vse(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){br.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Vse,"isClusterOperation");function $se(e,t){let r=(ge(),ee(xe)).getDatabases();if(!r[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($se,"checkGlobalSchemaTable");function Yse(e,t){if(Xr(t)){br.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Xr(e)||ds(e)){br.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){br.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){br.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Yse,"getClusterUser");function Kse(){Ex.parsePromise=function(e,t,r){return new Promise(function(n,s){Ex.parse(e,{header:!0,transformHeader:Ox,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Kse,"promisifyPapaParse");function Ox(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Ox,"removeBOM");function Wse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;br.info(`Got cluster status event response: ${pse(s)}`);try{i.cancel()}catch{br.error("Error trying to cancel timeout.")}n(s)})})}a(Wse,"createEventPromise");async function Qse(e){let t=!0,r=0;do await Sx(Ase*r++),(await mse.findPs(e)).length>0&&(t=!1);while(t&&r<Ose);if(t)throw new Error(`process ${e} was not started`)}a(Qse,"checkProcessRunning");function zse(e,t){let r=bx(e);if(r)return r;let n=Nx(e,t);if(n)return n}a(zse,"checkSchemaTableExist");function bx(e){let{getDatabases:t}=(ge(),ee(xe));if(!t()[e])return YE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bx,"checkSchemaExists");function Nx(e,t){let{getDatabases:r}=(ge(),ee(xe));if(!r()[e][t])return YE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Nx,"checkTableExists");function Jse(){let e=$E().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=$E().utc().unix();return e-t}a(Jse,"getStartOfTomorrowInSeconds");function Xse(){return $E().utc().format("DD-MM-YYYY")}a(Xse,"getLimitKey");function jse(e){try{let t=new hse(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){br.error("Got an error back ticking items."),br.error(t)}}a(jse,"backtickASTSchemaItems");function Zse(e){return[e]}a(Zse,"createForkArgs");function eie(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(eie,"autoCastBoolean");function tie(e,t){let{getDatabases:r}=(ge(),ee(xe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(tie,"getTableHashAttribute");function rie(e){let{getDatabases:t}=(ge(),ee(xe));return t()[e]!==void 0}a(rie,"doesSchemaExist");function nie(e,t){let{getDatabases:r}=(ge(),ee(xe));return r()[e]?.[t]!==void 0}a(nie,"doesTableExist");function sie(e){try{return JSON.stringify(e)}catch{return e}}a(sie,"stringifyObj");function iie(e){let t=$E.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(iie,"ms_to_time");function oie(e,t){let r=bi.basename(e,bi.extname(e));return bi.join(bi.dirname(e),r+t)}a(oie,"changeExtension");function cA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Sse(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(cA,"getEnvCliRootPath");var oA;function aie(){if(oA)return oA;let e=cA();cA()&&px.pathExistsSync(bi.join(e,at.HDB_CONFIG_FILE))&&(oA=!0)}a(aie,"noBootFile");function cie(e,t){let r;return e.protocol==="http:"?r=gse:r=Tse,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(cie,"httpRequest");function uie(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(uie,"transformReq");function lie(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(lie,"convertToMS")});var uA=M(),Ix=J(),Ll=V(),_ie=Rs(),die=vr(),fie=kg(),{start:Eie}=(dR(),ee(iE)),{closeConnection:hie}=St(),wx=require("moment"),Cx=Hf(),{cloneDeep:mie}=require("lodash"),pie=process.env[uA.PROCESS_NAME_ENV_PROP],Mo=pie.substring(4);a(async function(){let t={id:Mo,request:void 0},r=0;try{Ll.notify("Starting job:",Mo),Eie(),_ie.setSchemaDataToGlobal(),await die.setUsersToGlobal();let n=await Cx.getJobById(Mo);if(Ix.isEmptyOrZeroLength(n))throw new Error(`Unable to find a record in hdb_job for job: ${Mo}`);let{request:s}=n[0];if(Ix.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=mie(s);let i=fie.getOperationFunction(s);Ll.trace("Running operation:",s.operation,"for job",Mo);let o=await i.job_operation_function(s);Ll.trace("Result from job:",Mo,o),t.status=uA.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=wx().valueOf(),Ll.notify("Successfully completed job:",Mo)}catch(n){r=1,Ll.error(n),t.status=uA.JOB_STATUS_ENUM.ERROR,t.message=n.message?n.message:n,t.end_datetime=wx().valueOf()}finally{await Cx.updateJob(t),await hie(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();