harperdb 4.3.0-alpha.2 → 4.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +54 -54
- package/bin/lite.js +18 -18
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +17 -17
- package/launchServiceScripts/launchNatsReplyService.js +17 -17
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +17 -17
- package/npm-shrinkwrap.json +48 -48
- package/package.json +2 -2
- package/resources/RecordEncoder.d.ts +1 -0
- package/resources/search.d.ts +10 -1
- package/server/jobs/jobProcess.js +17 -17
- package/server/threads/threadServer.js +17 -17
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/main.67d8f5e6.js +2 -0
- package/utility/scripts/restartHdb.js +17 -17
- package/studio/build-local/static/js/main.824bbe07.js +0 -2
- /package/studio/build-local/static/js/{main.824bbe07.js.LICENSE.txt → main.67d8f5e6.js.LICENSE.txt} +0 -0
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
"use strict";var Dx=Object.create;var za=Object.defineProperty;var Mx=Object.getOwnPropertyDescriptor;var Ux=Object.getOwnPropertyNames;var Px=Object.getPrototypeOf,vx=Object.prototype.hasOwnProperty;var a=(e,t)=>za(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)za(e,r,{get:t[r],enumerable:!0})},dA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Ux(t))!vx.call(e,s)&&s!==r&&za(e,s,{get:()=>t[s],enumerable:!(n=Mx(t,s))||n.enumerable});return e};var v=(e,t,r)=>(r=e!=null?Dx(Px(e)):{},dA(t||!e||!e.__esModule?za(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>dA(za({},"__esModule",{value:!0}),e);var hA=T((uie,EA)=>{var Bx=require("fast-glob"),{statSync:WE,existsSync:QE,readFileSync:Hx,writeFileSync:xx}=require("fs"),{spawnSync:Fx,spawn:qx,execFileSync:cie}=require("child_process"),{isMainThread:Gx}=require("worker_threads"),{join:Ys,relative:fA}=require("path"),{PACKAGE_ROOT:An}=M(),{tmpdir:kx,platform:Vx}=require("os");require("source-map-support").install();var $x=["resources","server","dataLayer","components"],Ja="ts-build",zE,Yx=__filename.endsWith("tsBuild.js");if(Yx){if(Gx){let r;try{WE(Ys(An,Ja)),r=!0}catch{}if(r)for(let n of Bx.sync($x.map(s=>s+"/**/*.ts"),{cwd:An})){let s=0,i=0;try{s=WE(Ys(An,n)).mtimeMs-5e3,i=WE(Ys(An,Ja,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=Ys(An,"node_modules/.bin/tsc");Vx()==="win32"&&(n+=".cmd");let s=Fx(n,{cwd:An});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ys(kx(),"harperdb-tsc.pid"),o;if(QE(i))try{process.kill(+Hx(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=qx(n,["--watch"],{cwd:An,detached:!0,stdio:"ignore"});xx(i,c.pid.toString()),c.unref()}}}}let e=EA.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=fA(An,n[0]),o;i.startsWith(Ja)?o=Ys(An,fA(Ja,i)):o=Ys(An,Ja,i);let c=Ys(o,r),u=c+".js";if(QE(u))return u;if(c.includes(".")&&QE(c))return c}return t(r,n,s)}}});var M=T((die,CA)=>{"use strict";var Xr=require("path"),Kx=require("fs"),{relative:lie,join:_ie}=Xr,{existsSync:Wx}=Kx;function Qx(){let e=__dirname;for(;!Wx(Xr.join(e,"package.json"));){let t=Xr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Qx,"getHDBPackageRoot");var Ks=Qx(),mA="js",Ul=mA,zx="harperdb-config.yaml",Jx="defaultConfig.yaml",Xx="hdb",pA=`harperdb.${Ul}`,SA=`customFunctionsServer.${Ul}`,jx=`restartHdb.${Ul}`,XE="HarperDB",Ml="Custom Functions",Pl="Clustering Hub",vl="Clustering Leaf",Zx="Clustering Ingest Service",eF="Clustering Reply Service",tF="foreground.pid",rF="hdb.pid",nF="data",sF={HDB:XE,CLUSTERING_HUB:Pl,CLUSTERING_LEAF:vl,CLUSTERING_INGEST_SERVICE:Zx,CLUSTERING_REPLY_SERVICE:eF,CUSTOM_FUNCTIONS:Ml,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"},iF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},oF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},aF={harperdb:XE,"clustering hub":Pl,"clustering leaf":vl,"custom functions":Ml,custom_functions:Ml,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},cF={CLUSTERING_HUB_PROC_DESCRIPTOR:Pl,CLUSTERING_LEAF_PROC_DESCRIPTOR:vl},JE={HDB:Xr.join(Ks,"server/harperdb"),CUSTOM_FUNCTIONS:Xr.join(Ks,"server/customFunctions"),CLUSTERING_HUB:Xr.join(Ks,"server/nats"),CLUSTERING_LEAF:Xr.join(Ks,"server/nats")},uF={HDB:Xr.join(JE.HDB,pA),CUSTOM_FUNCTIONS:Xr.join(JE.CUSTOM_FUNCTIONS,SA)},lF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Xr.join(Ks,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Xr.join(Ks,"launchServiceScripts/launchUpdateNodes4-0-0.js")},_F={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},TA="support@harperdb.io",dF="customer-success@harperdb.io",gA=1,fF=4141,RA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",EF="https://www.harperdb.io/product",hF=`For support, please submit a request at ${RA} or contact ${TA}`,AA=`For license support, please contact ${dF}`,mF="None of the specified records were found.",pF="hash attribute not found",SF=`Your current license only supports ${gA} role. ${AA}`,TF="Your current license only supports 3 connections to a node.",gF="127.0.0.1",RF=1,AF=/^\.$/,OF=/^\.\.$/,bF="U+002E",NF=/\//g,yF="U+002F",IF=/U\+002F/g,wF=/^U\+002E$/,CF=/^U\+002EU\+002E$/,LF="d",DF=999999,MF="*",UF="--max-old-space-size=",PF="system",vF="__hdb_hash",BF=".harperdb",HF=".hdb",xF="keys",FF="hdb_boot_properties.file",qF=".updateConfig.json",GF="SIGTSTP",kF=24,VF=6e4,$F=448,YF="blob",KF="trash",WF="database",QF="schema",zF="transactions",JF=".count",XF="id",jF="PROCESS_NAME",OA={SETTINGS_PATH_KEY:"settings_path"},bA=require("lodash"),ZF={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"},eq={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},tq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},rq={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"},nq={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:",sq={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"},iq={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"},oq="060493.ks",aq=".license",cq={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"},uq={CSV:".csv",JSON:".json"},lq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},_q={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xa={};Xa[X.INSERT]=X.INSERT;Xa[X.UPDATE]=X.UPDATE;Xa[X.UPSERT]=X.UPSERT;Xa[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 dq={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"},fq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},NA={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"},Eq=bA.invert(NA),hq={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"},yA={settings_path:OA.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];yA[t.toLowerCase()]=t}var mq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},pq={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"},Sq={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"},Tq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},gq={VERSION_DEFAULT:"2.2.0"},Rq={DEVELOPMENT:8192,DEFAULT:512},Aq={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"},Oq={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"},bq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},IA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Nq=Symbol("metadata"),yq="__clustering__",Iq=Object.values(IA),wq=15984864e5,wA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Cq=bA.invert(wA),Lq={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"},Dq=111,Mq=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
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:_G.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(hG,"findPs")});var ht=T((gie,KA)=>{"use strict";var mG="__dbis__",pG="__txns__",SG="__environment_name__",TG="__dbi_defintion__",gG={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"},RG=["__createdtime__","__updatedtime__"],AG="\uFFFF",YA={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},OG=Object.values(YA);KA.exports={AUDIT_STORE_NAME:pG,INTERNAL_DBIS_NAME:mG,DBI_DEFINITION_NAME:TG,SEARCH_TYPES:gG,TIMESTAMP_NAMES:RG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:SG,TRANSACTIONS_DBI_NAMES_ENUM:YA,TRANSACTIONS_DBIS:OG,OVERFLOW_MARKER:AG}});var Ir=T((Rie,tO)=>{"use strict";var WA=M(),QA=ht(),zA={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},JA=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),XA={500:JA("There was an error processing your request."),400:"Invalid request"},bG=XA[zA.INTERNAL_SERVER_ERROR],NG={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}`},IG={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 ${QA.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${QA.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"},CG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${WA.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 ${WA.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"},jA={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"},LG={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."},DG={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`},MG={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"},UG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},PG={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`},ZA={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.`},eO={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}`},vG={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."},BG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},HG={...jA,...IG,...NG,...LG,...DG,...MG,...UG,...PG,...CG,...ZA,...eO,...vG,...BG,...yG};tO.exports={CHECK_LOGS_WRAPPER:JA,HDB_ERROR_MSGS:HG,DEFAULT_ERROR_MSGS:XA,DEFAULT_ERROR_RESP:bG,HTTP_STATUS_CODES:zA,LMDB_ERRORS_ENUM:wG,AUTHENTICATION_ERROR_MSGS:jA,VALIDATION_ERROR_MSGS:ZA,ITC_ERRORS:eO}});var Z=T((Oie,sO)=>{"use strict";var vo=Ir(),xG=V(),FG=M(),ql=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,rO),this.statusCode=n||vo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vo.DEFAULT_ERROR_MSGS[n]?vo.DEFAULT_ERROR_MSGS[n]:vo.DEFAULT_ERROR_MSGS[vo.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&&xG[s](i)}},oh=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}},ah=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function rO(e,t,r,n=FG.LOG_LEVELS.ERROR,s=null,i=!1){if(nO(e))return e;let o=new ql(e,t,r,n,s);return i&&delete o.stack,o}a(rO,"handleHDBError");function nO(e){return e.__proto__.constructor.name===ql.name}a(nO,"isHDBError");sO.exports={isHDBError:nO,handleHDBError:rO,ClientError:oh,ServerError:ah,hdb_errors:vo}});var oO=T((Nie,iO)=>{"use strict";var qG={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 zx=Object.create;var za=Object.defineProperty;var Jx=Object.getOwnPropertyDescriptor;var Xx=Object.getOwnPropertyNames;var jx=Object.getPrototypeOf,Zx=Object.prototype.hasOwnProperty;var a=(e,t)=>za(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ke=(e,t)=>{for(var r in t)za(e,r,{get:t[r],enumerable:!0})},RA=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Xx(t))!Zx.call(e,s)&&s!==r&&za(e,s,{get:()=>t[s],enumerable:!(n=Jx(t,s))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?zx(jx(e)):{},RA(t||!e||!e.__esModule?za(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>RA(za({},"__esModule",{value:!0}),e);var bA=T((Mie,OA)=>{var eF=require("fast-glob"),{statSync:XE,existsSync:jE,readFileSync:tF,writeFileSync:rF}=require("fs"),{spawnSync:nF,spawn:sF,execFileSync:Lie}=require("child_process"),{isMainThread:iF}=require("worker_threads"),{join:Ys,relative:AA}=require("path"),{PACKAGE_ROOT:Rn}=M(),{tmpdir:oF,platform:aF}=require("os");require("source-map-support").install();var cF=["resources","server","dataLayer","components"],Ja="ts-build",ZE,uF=__filename.endsWith("tsBuild.js");if(uF){if(iF){let r;try{XE(Ys(Rn,Ja)),r=!0}catch{}if(r)for(let n of eF.sync(cF.map(s=>s+"/**/*.ts"),{cwd:Rn})){let s=0,i=0;try{s=XE(Ys(Rn,n)).mtimeMs-5e3,i=XE(Ys(Rn,Ja,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=Ys(Rn,"node_modules/.bin/tsc");aF()==="win32"&&(n+=".cmd");let s=nF(n,{cwd:Rn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Ys(oF(),"harperdb-tsc.pid"),o;if(jE(i))try{process.kill(+tF(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=sF(n,["--watch"],{cwd:Rn,detached:!0,stdio:"ignore"});rF(i,c.pid.toString()),c.unref()}}}}let e=OA.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Rn)&&!n[0].includes("node_modules")){let i=AA(Rn,n[0]),o;i.startsWith(Ja)?o=Ys(Rn,AA(Ja,i)):o=Ys(Rn,Ja,i);let c=Ys(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((vie,xA)=>{"use strict";var Zr=require("path"),lF=require("fs"),{relative:Uie,join:Pie}=Zr,{existsSync:_F}=lF;function dF(){let e=__dirname;for(;!_F(Zr.join(e,"package.json"));){let t=Zr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(dF,"getHDBPackageRoot");var Ks=dF(),NA="js",Ml=NA,fF="harperdb-config.yaml",EF="defaultConfig.yaml",hF="hdb",yA=`harperdb.${Ml}`,IA=`customFunctionsServer.${Ml}`,mF=`restartHdb.${Ml}`,th="HarperDB",Ll="Custom Functions",Ul="Clustering Hub",Pl="Clustering Leaf",pF="Clustering Ingest Service",SF="Clustering Reply Service",TF="foreground.pid",gF="hdb.pid",RF="data",AF={HDB:th,CLUSTERING_HUB:Ul,CLUSTERING_LEAF:Pl,CLUSTERING_INGEST_SERVICE:pF,CLUSTERING_REPLY_SERVICE:SF,CUSTOM_FUNCTIONS:Ll,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"},OF={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},bF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},NF={harperdb:th,"clustering hub":Ul,"clustering leaf":Pl,"custom functions":Ll,custom_functions:Ll,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},yF={CLUSTERING_HUB_PROC_DESCRIPTOR:Ul,CLUSTERING_LEAF_PROC_DESCRIPTOR:Pl},eh={HDB:Zr.join(Ks,"server/harperdb"),CUSTOM_FUNCTIONS:Zr.join(Ks,"server/customFunctions"),CLUSTERING_HUB:Zr.join(Ks,"server/nats"),CLUSTERING_LEAF:Zr.join(Ks,"server/nats")},IF={HDB:Zr.join(eh.HDB,yA),CUSTOM_FUNCTIONS:Zr.join(eh.CUSTOM_FUNCTIONS,IA)},wF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Zr.join(Ks,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Zr.join(Ks,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Zr.join(Ks,"launchServiceScripts/launchUpdateNodes4-0-0.js")},CF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},wA="support@harperdb.io",DF="customer-success@harperdb.io",CA=1,LF=4141,DA="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",MF="https://www.harperdb.io/product",UF=`For support, please submit a request at ${DA} or contact ${wA}`,LA=`For license support, please contact ${DF}`,PF="None of the specified records were found.",vF="hash attribute not found",BF=`Your current license only supports ${CA} role. ${LA}`,HF="Your current license only supports 3 connections to a node.",xF="127.0.0.1",FF=1,qF=/^\.$/,GF=/^\.\.$/,kF="U+002E",VF=/\//g,$F="U+002F",YF=/U\+002F/g,KF=/^U\+002E$/,WF=/^U\+002EU\+002E$/,QF="d",zF=999999,JF="*",XF="--max-old-space-size=",jF="system",ZF="__hdb_hash",eq=".harperdb",tq=".hdb",rq="keys",nq="hdb_boot_properties.file",sq=".updateConfig.json",iq="SIGTSTP",oq=24,aq=6e4,cq=448,uq="blob",lq="trash",_q="database",dq="schema",fq="transactions",Eq=".count",hq="id",mq="PROCESS_NAME",MA={SETTINGS_PATH_KEY:"settings_path"},UA=require("lodash"),pq={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"},Sq={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},Tq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gq={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"},Rq={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"},Ir="hdb_internal:",Aq={CREATE_SCHEMA:Ir+"create_schema",CREATE_TABLE:Ir+"create_table",CREATE_ATTRIBUTE:Ir+"create_attribute",ADD_USER:Ir+"add_user",ALTER_USER:Ir+"alter_user",DROP_USER:Ir+"drop_user",HDB_NODES:Ir+"hdb_nodes",HDB_USERS:Ir+"hdb_users",HDB_WORKERS:Ir+"hdb_workers",CATCHUP:Ir+"catchup",SCHEMA_CATCHUP:Ir+"schema_catchup",WORKER_ROOM:Ir+"cluster_workers"},Oq={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"},bq="060493.ks",Nq=".license",yq={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"},Iq={CSV:".csv",JSON:".json"},wq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Cq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xa={};Xa[X.INSERT]=X.INSERT;Xa[X.UPDATE]=X.UPDATE;Xa[X.UPSERT]=X.UPSERT;Xa[X.DELETE]=X.DELETE;var He=Object.create(null);He[X.DESCRIBE_ALL]=X.DESCRIBE_ALL;He[X.DESCRIBE_TABLE]=X.DESCRIBE_TABLE;He[X.DESCRIBE_SCHEMA]=X.DESCRIBE_SCHEMA;He[X.READ_LOG]=X.READ_LOG;He[X.ADD_NODE]=X.ADD_NODE;He[X.LIST_USERS]=X.LIST_USERS;He[X.LIST_ROLES]=X.LIST_ROLES;He[X.USER_INFO]=X.USER_INFO;He[X.SQL]=X.SQL;He[X.GET_JOB]=X.GET_JOB;He[X.SEARCH_JOBS_BY_START_DATE]=X.SEARCH_JOBS_BY_START_DATE;He[X.DELETE_FILES_BEFORE]=X.DELETE_FILES_BEFORE;He[X.EXPORT_LOCAL]=X.EXPORT_LOCAL;He[X.EXPORT_TO_S3]=X.EXPORT_TO_S3;He[X.CLUSTER_STATUS]=X.CLUSTER_STATUS;He[X.REMOVE_NODE]=X.REMOVE_NODE;He[X.RESTART]=X.RESTART;He[X.CUSTOM_FUNCTIONS_STATUS]=X.CUSTOM_FUNCTIONS_STATUS;He[X.GET_CUSTOM_FUNCTIONS]=X.GET_CUSTOM_FUNCTIONS;He[X.GET_CUSTOM_FUNCTION]=X.GET_CUSTOM_FUNCTION;He[X.SET_CUSTOM_FUNCTION]=X.SET_CUSTOM_FUNCTION;He[X.DROP_CUSTOM_FUNCTION]=X.DROP_CUSTOM_FUNCTION;He[X.ADD_CUSTOM_FUNCTION_PROJECT]=X.ADD_CUSTOM_FUNCTION_PROJECT;He[X.DROP_CUSTOM_FUNCTION_PROJECT]=X.DROP_CUSTOM_FUNCTION_PROJECT;He[X.PACKAGE_CUSTOM_FUNCTION_PROJECT]=X.PACKAGE_CUSTOM_FUNCTION_PROJECT;He[X.DEPLOY_CUSTOM_FUNCTION_PROJECT]=X.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Dq={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"},Lq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},PA={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"},Mq=UA.invert(PA),Uq={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"},vA={settings_path:MA.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];vA[t.toLowerCase()]=t}var Pq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},vq={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"},Bq={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"},Hq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},xq={VERSION_DEFAULT:"2.2.0"},Fq={DEVELOPMENT:8192,DEFAULT:512},qq={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"},Gq={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"},kq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},BA={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Vq=Symbol("metadata"),$q="__clustering__",Yq=Object.values(BA),Kq=15984864e5,HA={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Wq=UA.invert(HA),Qq={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"},zq=111,Jq=`\r
|
|
2
|
+
`,Xq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},jq=["*","%"],Zq="unauthorized_access",eG="func_val",tG={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rG={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"},sG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iG={HTTP:"http"},oG={STOPPED:"stopped",ONLINE:"online"},aG="3.x.x",cG={SUCCESS:"success",FAILURE:"failure"},uG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};xA.exports={LOCAL_HARPERDB_OPERATIONS:He,HDB_SUPPORT_ADDRESS:wA,HDB_SUPPORT_URL:DA,HDB_PRICING_URL:MF,SUPPORT_HELP_MSG:UF,LICENSE_HELP_MSG:LA,HDB_PROC_NAME:yA,HDB_PROC_DESCRIPTOR:th,CLUSTERING_LEAF_PROC_DESCRIPTOR:Pl,CLUSTERING_HUB_PROC_DESCRIPTOR:Ul,SYSTEM_SCHEMA_NAME:jF,HASH_FOLDER_NAME:ZF,HDB_HOME_DIR_NAME:eq,UPDATE_FILE_NAME:sq,LICENSE_KEY_DIR_NAME:rq,BOOT_PROPS_FILE_NAME:nq,JOB_TYPE_ENUM:vq,JOB_STATUS_ENUM:yq,SYSTEM_TABLE_NAMES:gq,SYSTEM_TABLE_HASH_ATTRIBUTES:Rq,OPERATIONS_ENUM:X,VALID_S3_FILE_TYPES:Iq,S3_BUCKET_AUTH_KEYS:wq,VALID_SQL_OPS_ENUM:Cq,GEO_CONVERSION_ENUM:Lq,HDB_SETTINGS_NAMES:PA,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Mq,SERVICE_ACTIONS_ENUM:Dq,CLUSTER_MESSAGE_TYPE_ENUM:Bq,CLUSTER_CONNECTION_DIRECTION_ENUM:Hq,CLUSTER_EVENTS_DEFS_ENUM:qq,PERIOD_REGEX:qF,DOUBLE_PERIOD_REGEX:GF,UNICODE_PERIOD:kF,FORWARD_SLASH_REGEX:VF,UNICODE_FORWARD_SLASH:$F,ESCAPED_FORWARD_SLASH_REGEX:YF,ESCAPED_PERIOD_REGEX:KF,ESCAPED_DOUBLE_PERIOD_REGEX:WF,REG_KEY_FILE_NAME:bq,RESTART_TIMEOUT_MS:aq,HDB_FILE_PERMISSIONS:cq,DATABASES_DIR_NAME:_q,LEGACY_DATABASES_DIR_NAME:dq,TRANSACTIONS_DIR_NAME:fq,LIMIT_COUNT_NAME:Eq,ID_ATTRIBUTE_STRING:hq,INSERT_MODULE_ENUM:Sq,UPGRADE_JSON_FIELD_NAMES_ENUM:Tq,RESTART_CODE:iq,RESTART_CODE_NUM:oq,CLUSTER_OPERATIONS:Xa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Oq,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ir,INTERNAL_SC_CHANNELS:Aq,CLUSTERING_MESSAGE_TYPES:Qq,HDB_FILE_SUFFIX:tq,BLOB_FOLDER_NAME:uq,HDB_TRASH_DIR:lq,ORIGINATOR_SET_VALUE:zq,LICENSE_VALUES:xq,RAM_ALLOCATION_ENUM:Fq,TIME_STAMP_NAMES_ENUM:BA,TIME_STAMP_NAMES:Yq,PERMS_UPDATE_RELEASE_TIMESTAMP:Kq,SEARCH_NOT_FOUND_MESSAGE:PF,SEARCH_ATTRIBUTE_NOT_FOUND:vF,LICENSE_ROLE_DENIED_RESPONSE:BF,LICENSE_MAX_CONNS_REACHED:HF,BASIC_LICENSE_MAX_NON_CU_ROLES:CA,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:LF,VALUE_SEARCH_COMPARATORS:HA,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Wq,LICENSE_FILE_NAME:Nq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Gq,NEW_LINE:Jq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:FF,MOMENT_DAYS_TAG:QF,API_TURNOVER_SEC:zF,LOOPBACK:xF,CODE_EXTENSION:Ml,WILDCARD_SEARCH_VALUE:JF,NODE_ERROR_CODES:kq,JAVASCRIPT_EXTENSION:NA,PERMS_CRUD_ENUM:Xq,UNAUTHORIZED_PERMISSION_NAME:Zq,SEARCH_WILDCARDS:jq,FUNC_VAL:eG,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tG,JWT_ENUM:rG,CLUSTERING_FLAG:$q,ITC_EVENT_TYPES:nG,CUSTOM_FUNCTION_PROC_NAME:IA,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ll,SERVICES:sG,THREAD_TYPES:iG,MEM_SETTING_KEY:XF,HDB_RESTART_SCRIPT:mF,PROCESS_DESCRIPTORS:AF,SERVICE_SERVERS:IF,SERVICE_SERVERS_CWD:eh,PROCESS_DESCRIPTORS_VALIDATE:NF,LAUNCH_SERVICE_SCRIPTS:wF,LOG_LEVELS:bF,PROCESS_NAME_ENV_PROP:mq,LOG_NAMES:OF,PM2_PROCESS_STATUSES:oG,CONFIG_PARAM_MAP:vA,CONFIG_PARAMS:C,HDB_CONFIG_FILE:fF,HDB_DEFAULT_CONFIG_FILE:EF,ROLE_TYPES_ENUM:CF,BOOT_PROP_PARAMS:MA,INSTALL_PROMPTS:pq,HDB_ROOT_DIR_NAME:hF,CLUSTERING_PROCESSES:yF,FOREGROUND_PID_FILE:TF,PACKAGE_ROOT:Ks,PRE_4_0_0_VERSION:aG,DATABASES_PARAM_CONFIG:Pq,METADATA_PROPERTY:Vq,AUTH_AUDIT_STATUS:cG,AUTH_AUDIT_TYPES:uG,HDB_PID_FILE:gF,DEFAULT_DATABASE_NAME:RF,LEGACY_CONFIG_PARAMS:Uq};bA()});var rh=T((Hie,GA)=>{"use strict";var FA=require("minimist");GA.exports=lG;function lG(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=qA(process.env),n=qA(FA(process.argv))):(r=process.env,n=FA(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(lG,"assignCMDENVVariables");function qA(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(qA,"objKeysToLowerCase")});var Y=T((Fie,uh)=>{"use strict";var Ni=require("fs-extra"),{workerData:_G,threadId:dG}=require("worker_threads"),Es=require("path"),$A=require("yaml"),YA=require("properties-reader"),At=M(),kA=rh(),fG=require("os"),{PACKAGE_ROOT:sh}=M(),{_assignPackageExport:EG}=require("../../index"),Za={};for(let e in console)Za[e]||(Za[e]=console[e]);var er={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},KA={STDOUT:"stdOut",STDERR:"stdErr"},hG=Es.join(sh,"logs"),mG=Es.join(sh,"config/yaml/",At.HDB_DEFAULT_CONFIG_FILE),pG=1e4,ds,Gn,Zt,vl,Bl,ec,Uo,ja;ja===void 0&&WA();uh.exports={notify:JA,fatal:XA,error:tc,warn:ch,info:Hl,debug:ah,trace:oh,setLogLevel:bG,log_level:Zt,loggerWithTag:SG,suppressLogging:TG,initLogSettings:WA,setupConsoleLogging:QA,logCustomLevel:AG,closeLogFile:ih,getLogFilePath:()=>ec,OUTPUTS:KA,AuthAuditLog:IG};EG("logger",uh.exports);function WA(e=!1){try{if(ja===void 0||e){ih();let t=OG(),r=kA(["ROOTPATH"]);try{ja=YA(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Ni.pathExistsSync(Es.join(r.ROOTPATH,At.HDB_CONFIG_FILE)))throw n}({level:Zt,config_log_path:Bl,to_file:ds,to_stream:Gn}=NG(r.ROOTPATH?Es.join(r.ROOTPATH,At.HDB_CONFIG_FILE):ja.get("settings_path"))),vl=At.LOG_NAMES.HDB,ec=Es.join(Bl,vl)}}catch(t){if(ja=void 0,t.code===At.NODE_ERROR_CODES.ENOENT){let r=kA(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){Zt=u;continue}if(c===At.CONFIG_PARAMS.LOGGING_STDSTREAMS){Gn=u;continue}c===At.CONFIG_PARAMS.LOGGING_FILE&&(ds=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=yG();ds=ds===void 0?s:ds,ds=VA(ds),Gn=Gn===void 0?i:Gn,Gn=VA(Gn),Zt=Zt===void 0?n:Zt,Bl=hG,vl=At.LOG_NAMES.INSTALL,ec=Es.join(Bl,vl);return}throw tc("Error initializing log settings"),tc(t),t}process.env.DEV_MODE&&(Gn=!0),QA()}a(WA,"initLogSettings");var nh=!0;function QA(){Mo("error",tc),Mo("warn",ch),Mo("log",Hl),Mo("info",Hl),Mo("debug",ah),Mo("trace",oh)}a(QA,"setupConsoleLogging");function Mo(e,t){console[e]=function(...r){if(nh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Za[e](...r)}}a(Mo,"logConsole");function SG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(JA),fatal:r(XA),error:r(tc),warn:r(ch),info:r(Hl),debug:r(ah),trace:r(oh)};function r(n){return function(...s){return n(t,...s)}}}a(SG,"loggerWithTag");function TG(e){try{nh=!1,e()}finally{nh=!0}}a(TG,"suppressLogging");var gG=_G?.name?.replace(/ /g,"-")||"main";function hs(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||gG+"/"+dG);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(hs,"createLogRecord");function rc(e){ds&&zA(e),Gn&&process.stdout.write(e)}a(rc,"logStdOut");function xl(e){ds&&zA(e),Gn&&process.stderr.write(e)}a(xl,"logStdErr");function zA(e){RG(),Uo?Ni.appendFileSync(Uo,e):Za.log(e)}a(zA,"logToFile");function ih(){try{Ni.closeSync(Uo)}catch{}Uo=null}a(ih,"closeLogFile");function RG(){if(!Uo){try{if(!ec)debugger;Uo=Ni.openSync(ec,"a")}catch(e){Za.error(e)}setTimeout(()=>{ih()},pG).unref()}}a(RG,"openLogFile");function Hl(...e){er[Zt]<=er.info&&rc(hs("info",e))}a(Hl,"info");function oh(...e){er[Zt]<=er.trace&&rc(hs("trace",e))}a(oh,"trace");function tc(...e){er[Zt]<=er.error&&xl(hs("error",e))}a(tc,"error");function ah(...e){er[Zt]<=er.debug&&rc(hs("debug",e))}a(ah,"debug");function JA(...e){er[Zt]<=er.notify&&rc(hs("notify",e))}a(JA,"notify");function XA(...e){er[Zt]<=er.fatal&&xl(hs("fatal",e))}a(XA,"fatal");function ch(...e){er[Zt]<=er.warn&&xl(hs("warn",e))}a(ch,"warn");function AG(e,t,...r){t===KA.STDERR?xl(hs(e,r)):rc(hs(e,r))}a(AG,"logCustomLevel");function OG(){let e;try{e=fG.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Es.join(e,At.HDB_HOME_DIR_NAME,At.BOOT_PROPS_FILE_NAME);return Ni.existsSync(t)||(t=Es.join(sh,"utility/hdb_boot_properties.file")),t}a(OG,"getPropsFilePath");function bG(e){Zt=e}a(bG,"setLogLevel");function VA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(VA,"autoCastBoolean");function NG(e){try{if(e.includes("config/settings.js")){let o=YA(e);return{level:o.get(At.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Es.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=$A.parseDocument(Ni.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===At.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(NG,"getLogConfig");function yG(){try{let e=$A.parseDocument(Ni.readFileSync(mG,"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(yG,"getDefaultConfig");function IG(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(IG,"AuthAuditLog")});var ZA=T((Gie,jA)=>{"use strict";var wG=require("util"),CG=require("path"),DG=require("child_process"),LG=wG.promisify(DG.execFile),MG=1e3*1e3*10;jA.exports={findPs:UG};async function UG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await LG("ps",["wwxo",`pid,${r}`],{maxBuffer:MG});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:CG.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(UG,"findPs")});var Et=T((Vie,tO)=>{"use strict";var PG="__dbis__",vG="__txns__",BG="__environment_name__",HG="__dbi_defintion__",xG={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"},FG=["__createdtime__","__updatedtime__"],qG="\uFFFF",eO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},GG=Object.values(eO);tO.exports={AUDIT_STORE_NAME:vG,INTERNAL_DBIS_NAME:PG,DBI_DEFINITION_NAME:HG,SEARCH_TYPES:xG,TIMESTAMP_NAMES:FG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:BG,TRANSACTIONS_DBI_NAMES_ENUM:eO,TRANSACTIONS_DBIS:GG,OVERFLOW_MARKER:qG}});var wr=T(($ie,lO)=>{"use strict";var rO=M(),nO=Et(),sO={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},iO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),oO={500:iO("There was an error processing your request."),400:"Invalid request"},kG=oO[sO.INTERNAL_SERVER_ERROR],VG={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.`},$G={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},YG={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"},KG={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 ${nO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${nO.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"},WG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${rO.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 ${rO.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"},aO={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"},QG={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."},zG={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`},JG={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"},XG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},jG={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`},cO={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.`},uO={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}`},ZG={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},ek={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tk={...aO,...YG,...VG,...QG,...zG,...JG,...XG,...jG,...WG,...cO,...uO,...ZG,...ek,...$G};lO.exports={CHECK_LOGS_WRAPPER:iO,HDB_ERROR_MSGS:tk,DEFAULT_ERROR_MSGS:oO,DEFAULT_ERROR_RESP:kG,HTTP_STATUS_CODES:sO,LMDB_ERRORS_ENUM:KG,AUTHENTICATION_ERROR_MSGS:aO,VALIDATION_ERROR_MSGS:cO,ITC_ERRORS:uO}});var Z=T((Kie,fO)=>{"use strict";var Po=wr(),rk=Y(),nk=M(),Fl=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,_O),this.statusCode=n||Po.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Po.DEFAULT_ERROR_MSGS[n]?Po.DEFAULT_ERROR_MSGS[n]:Po.DEFAULT_ERROR_MSGS[Po.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&&rk[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 _O(e,t,r,n=nk.LOG_LEVELS.ERROR,s=null,i=!1){if(dO(e))return e;let o=new Fl(e,t,r,n,s);return i&&delete o.stack,o}a(_O,"handleHDBError");function dO(e){return e.__proto__.constructor.name===Fl.name}a(dO,"isHDBError");fO.exports={isHDBError:dO,handleHDBError:_O,ClientError:lh,ServerError:_h,hdb_errors:Po}});var hO=T((Qie,EO)=>{"use strict";var sk={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
|
-
`)},GG="certificate.pem",kG="privateKey.pem",VG="ca.pem";iO.exports={CERTIFICATE_VALUES:qG,CERTIFICATE_PEM_NAME:GG,PRIVATEKEY_PEM_NAME:kG,CA_PEM_NAME:VG}});var et=T((yie,aO)=>{"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};aO.exports={validateObject:$G,validateObjectAsync:YG,validateBySchema:KG};function $G(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($G,"validateObject");async function YG(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(YG,"validateObjectAsync");function KG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(KG,"validateBySchema")});var uh=T((Cie,dO)=>{"use strict";var _O=require("fs-extra"),ce=require("joi"),WG=require("os"),{boolean:Be,string:jr,number:Pt,array:ch}=ce.types(),{totalmem:cO}=require("os"),Ii=require("path"),QG=V(),Gl=J(),wie=oO(),uO=M(),zG=et(),lO="log",JG="components",XG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",jG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",ZG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",ek="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",tk="rootPath config parameter is undefined",rk="clustering.enabled config parameter is undefined",wi=Pt.min(0).required(),kl=ch.items({host:jr.required(),port:wi}).empty(null),Vn;dO.exports={configValidator:nk,routesValidator:uk,route_constraints:kl};function nk(e){if(Vn=e.rootPath,Gl.isEmpty(Vn))throw tk;let t=Be.required(),r=Pt.min(0).max(1e3).empty(null).default(ck),n=jr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nc),s=jr.optional().empty(null),i=jr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(nc),c=ce.custom(ik).empty(null).default(nc),u=e.clustering?.enabled;if(Gl.isEmpty(u))throw rk;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:kl}).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:kl}).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:jr.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:jr.custom(ak).optional().empty(null),maxSize:jr.custom(ok).optional().empty(null),path:jr.optional().empty(null).default(nc)}).required(),root:n,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Be.optional(),corsAccessList:ch.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),domainSocket:ce.optional().empty("hdb/operations-server").default(nc),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:ce.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:jr.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:jr.optional(),certificateAuthority:s})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:ce.object({compressionThreshold:Pt.optional(),cors:Be.optional(),corsAccessList:ch.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:jr.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(nk,"configValidator");function sk(e){return _O.existsSync(e)?null:`Specified path ${e} does not exist.`}a(sk,"doesPathExist");function ik(e,t){ce.assert(e,jr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=sk(e);if(r)return t.message(r)}a(ik,"validatePath");function ok(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(XG);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(ZG):e}a(ok,"validateRotationMaxSize");function ak(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(jG);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(ek):e}a(ak,"validateRotationInterval");function ck(e,t){let r=t.state.path.join("."),n=WG.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||cO();return i=Math.round(Math.min(i,cO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),QG.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(ck,"setDefaultThreads");function nc(e,t){let r=t.state.path.join(".");if(!Gl.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Gl.isEmpty(Vn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ii.join(Vn,JG);case"logging.root":return Ii.join(Vn,lO);case"clustering.leafServer.streams.path":return Ii.join(Vn,"clustering","leaf");case"storage.path":let n=Ii.join(Vn,uO.LEGACY_DATABASES_DIR_NAME);return _O.existsSync(n)?n:Ii.join(Vn,uO.DATABASES_DIR_NAME);case"logging.rotation.path":return Ii.join(Vn,lO);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(nc,"setDefaultRoot");function uk(e){let t=ce.object({routes:kl});return zG.validateBySchema({routes:e},t)}a(uk,"routesValidator")});var Ci={};Ve(Ci,{server:()=>lt});var fO,lt,nr=Ae(()=>{fO=require("../../index"),lt={};(0,fO._assignPackageExport)("server",lt)});var Lr=T((Mie,AO)=>{"use strict";var Cr=M(),vt=J(),Nt=V(),{configValidator:lk,routesValidator:EO}=uh(),sr=require("fs-extra"),_k=require("yaml"),On=require("path"),dk=require("is-number"),mO=require("properties-reader"),fk=require("lodash"),{handleHDBError:Ek}=Z(),{HTTP_STATUS_CODES:hk,HDB_ERROR_MSGS:Vl}=Ir(),Die=require("minimist"),{server:mk}=(nr(),ee(Ci)),{DATABASES_PARAM_CONFIG:sc,CONFIG_PARAMS:wr,CONFIG_PARAM_MAP:bn}=Cr,pk="Unable to get config value because config is uninitialized",Sk="Config successfully initialized",Tk="Error backing up config file",gk="Empty parameter sent to getConfigValue",pO=On.join(Cr.PACKAGE_ROOT,"config","yaml",Cr.HDB_DEFAULT_CONFIG_FILE),Rk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",hO={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"},$l,yt,Yl;AO.exports={createConfigFile:Ak,getDefaultConfig:Ok,getConfigValue:TO,initConfig:_h,flattenConfig:Bo,updateConfigValue:gO,updateConfigObject:Nk,getConfiguration:wk,setConfiguration:Ck,readConfigFile:fh,getClusteringRoutes:Lk,initOldConfig:RO,getConfigFromFile:Dk,getConfigFilePath:Li,addConfig:Mk,deleteConfigFromFile:Uk,getConfigObj:Pk};function Ak(e){let t=Ws(pO);$l=Bo(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("_"),_=lh(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){Nt.error(l)}}}r&&SO(t,r),dh(t);let n=t.toJSON();yt=Bo(n);let s=t.getIn(["rootPath"]),i=On.join(s,Cr.HDB_CONFIG_FILE);sr.createFileSync(i),sr.writeFileSync(i,String(t)),Nt.trace(`Config file written to ${i}`)}a(Ak,"createConfigFile");function SO(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(sc.TABLES))for(let i in n[s][sc.TABLES])for(let o in n[s][sc.TABLES][i]){let c=n[s][sc.TABLES][i][o],u=[wr.DATABASES,s,sc.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){Nt.error("Error parsing schemas CLI/env config arguments",n)}}a(SO,"setSchemasConfig");function Ok(e){if($l===void 0){let r=Ws(pO);$l=Bo(r.toJSON())}let t=bn[e.toLowerCase()];if(t!==void 0)return $l[t.toLowerCase()]}a(Ok,"getDefaultConfig");function TO(e){if(e==null){Nt.error(gk);return}if(yt===void 0){Nt.trace(pk);return}let t=bn[e.toLowerCase()];if(t!==void 0)return yt[t.toLowerCase()]}a(TO,"getConfigValue");function Li(e=vt.getPropsFilePath()){let t=vt.getEnvCliRootPath();return t?On.join(t,Cr.HDB_CONFIG_FILE):mO(e).get(Cr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Li,"getConfigFilePath");function _h(e=!1){if(yt===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 Nt.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{RO(r);return}catch(i){if(i.code!==Cr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ws(r)}catch(i){if(i.code===Cr.NODE_ERROR_CODES.ENOENT){Nt.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 Nt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bk(n,r),dh(n);let s=n.toJSON();if(mk.config=s,yt=Bo(s),yt.logging_rotation_rotate)for(let i in hO)yt[i]&&Nt.error(`Config ${hO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Nt.trace(Sk)}}a(_h,"initConfig");function bk(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&&(Nt.trace("Updating config file with missing config params"),sr.writeFileSync(t,String(e)))}a(bk,"checkForUpdatedConfig");function dh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=lk(t);if(r.error)throw Vl.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(dh,"validateConfig");function Nk(e,t){yt===void 0&&(yt={});let r=bn[e.toLowerCase()];if(r===void 0){Nt.trace(`Unable to update config object because config param '${e}' does not exist`);return}yt[r.toLowerCase()]=t}a(Nk,"updateConfigObject");function gO(e,t,r=void 0,n=!1,s=!1,i=!1){yt===void 0&&_h();let o=TO(bn.hdb_root),c=On.join(o,Cr.HDB_CONFIG_FILE),u=Ws(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=lh(f,t);u.setIn([...E],h)}else for(let f in r){let E=bn[f.toLowerCase()];if(E===wr.HTTP_SECUREPORT&&r[f]===yt[wr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===wr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===yt[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=lh(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){Nt.error(A)}}}_&&SO(u,_),dh(u);let l=u.getIn(["rootPath"]),d=On.join(l,Cr.HDB_CONFIG_FILE);n===!0&&yk(c,l),sr.writeFileSync(d,String(u)),s&&(yt=Bo(u.toJSON())),Nt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(gO,"updateConfigValue");function yk(e,t){try{let r=On.join(t,"backup",`${Cr.HDB_CONFIG_FILE}.bak`);sr.copySync(e,r),Nt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Nt.error(Tk),Nt.error(r)}}a(yk,"backupConfigFile");var Ik=["databases"];function Bo(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)),Yl=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])&&!Ik.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(Bo,"flattenConfig");function lh(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(dk(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(lh,"castConfigValue");function wk(){let e=vt.getPropsFilePath(),t=Li(e);return Ws(t).toJSON()}a(wk,"getConfiguration");async function Ck(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return gO(void 0,void 0,s,!0),Rk}catch(i){throw typeof i=="string"||i instanceof String?Ek(i,i,hk.BAD_REQUEST,void 0,void 0,!0):i}}a(Ck,"setConfiguration");function fh(){let e=vt.getPropsFilePath();try{sr.accessSync(e,sr.constants.F_OK|sr.constants.R_OK)}catch(n){if(!vt.noBootFile())throw Nt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Li(e);return Ws(t).toJSON()}a(fh,"readConfigFile");function Ws(e){return _k.parseDocument(sr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ws,"parseYamlDoc");function Lk(){let e=fh(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=vt.isEmptyOrZeroLength(t)?[]:t;let r=EO(t);if(r)throw Vl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=vt.isEmptyOrZeroLength(n)?[]:n;let s=EO(n);if(s)throw Vl.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 Vl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Lk,"getClusteringRoutes");function RO(e){let t=mO(e);yt={};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?yt[s]=On.dirname(n):yt[s]=n}return yt}a(RO,"initOldConfig");function Dk(e){let t=fh();return fk.get(t,e.replaceAll("_","."))}a(Dk,"getConfigFromFile");async function Mk(e,t){let r=Ws(Li());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await sr.writeFile(Li(),String(r))}a(Mk,"addConfig");function Uk(e){let t=Li(vt.getPropsFilePath()),r=Ws(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=On.join(n,Cr.HDB_CONFIG_FILE);sr.writeFileSync(s,String(r))}a(Uk,"deleteConfigFromFile");function Pk(){return Yl||(_h(),Yl)}a(Pk,"getConfigObj")});var j=T((Pie,yO)=>{"use strict";var Eh=require("fs-extra"),Di=require("path"),OO=require("os"),vk=require("properties-reader"),oc=V(),ic=J(),ae=M(),Kl=Lr(),Bk="Error initializing environment manager",Wl="BOOT_PROPS_FILE_PATH",bO=!1,Hk={[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={};yO.exports={BOOT_PROPS_FILE_PATH:Wl,getHdbBasePath:xk,setHdbBasePath:Fk,get:NO,initSync:Gk,setProperty:Ce,initTestEnvironment:kk};function xk(){return ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(xk,"getHdbBasePath");function Fk(e){ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Fk,"setHdbBasePath");function NO(e){let t=Kl.getConfigValue(e);return t===void 0?ps[e]:t}a(NO,"get");function Ce(e,t){Hk[e]&&(ps[e]=t),Kl.updateConfigObject(e,t)}a(Ce,"setProperty");function qk(){let e;try{e=ic.getPropsFilePath(),Eh.accessSync(e,Eh.constants.F_OK|Eh.constants.R_OK),bO=!0;let t=vk(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[Wl]=e,!0}catch{return oc.trace(`Environment manager found no properties file at ${e}`),!1}}a(qk,"doesPropFileExist");function Gk(e=!1){try{(bO||qk()||ic.noBootFile())&&(Kl.initConfig(e),ps[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Kl.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){oc.error(Bk),oc.error(t),console.error(t),process.exit(1)}}a(Gk,"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[Wl]=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,OO.userInfo()?OO.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,NO(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,ic.isEmpty(i)?!1:i),Ce(ae.CONFIG_PARAMS.HTTP_CORS,ic.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,ic.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 ${Wl}. Please check your boot props and settings files`;oc.fatal(r),oc.error(t)}}a(kk,"initTestEnvironment")});var We=T((Bie,UO)=>{"use strict";var _c=M(),Vk=J(),ir=j(),dc=require("path"),$k=require("minimist"),IO=require("fs-extra"),wO=require("lodash");ir.initSync();var{CONFIG_PARAMS:Qs,DATABASES_PARAM_CONFIG:ac,SYSTEM_SCHEMA_NAME:Ql}=_c,cc,uc,lc;function CO(){if(cc!==void 0)return cc;if(ir.getHdbBasePath()!==void 0)return cc=ir.get(Qs.STORAGE_PATH)||dc.join(ir.getHdbBasePath(),_c.DATABASES_DIR_NAME),cc}a(CO,"getBaseSchemaPath");function LO(){if(uc!==void 0)return uc;if(ir.getHdbBasePath()!==void 0)return uc=MO(Ql),uc}a(LO,"getSystemSchemaPath");function DO(){if(lc!==void 0)return lc;if(ir.getHdbBasePath()!==void 0)return lc=ir.get(_c.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dc.join(ir.getHdbBasePath(),_c.TRANSACTIONS_DIR_NAME),lc}a(DO,"getTransactionAuditStoreBasePath");function Yk(e,t){let r=ir.get(Qs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dc.join(DO(),e.toString())}a(Yk,"getTransactionAuditStorePath");function MO(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(_c.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dc.join(CO(),e)}a(MO,"getSchemaPath");function Kk(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,$k(process.argv));let n=r[Qs.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!Vk.isObject(n))throw o;i=n}for(let o of i){let c=o[Ql];if(!c)continue;let u=ir.get(Qs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ac.PATH];if(_)return wO.set(u,[Ql,ac.TABLES,t,ac.PATH],_),ir.setProperty(Qs.DATABASES,u),_;let l=c?.[ac.PATH];if(l)return wO.set(u,[Ql,ac.PATH],l),ir.setProperty(Qs.DATABASES,u),l}}let s=r[Qs.STORAGE_PATH.toUpperCase()];if(s){if(!IO.pathExistsSync(s))throw new Error(s+" does not exist");let i=dc.join(s,e);return IO.mkdirsSync(i),ir.setProperty(Qs.STORAGE_PATH,s),i}return LO()}a(Kk,"initSystemSchemaPaths");function Wk(){cc=void 0,uc=void 0,lc=void 0}a(Wk,"resetPaths");UO.exports={getBaseSchemaPath:CO,getSystemSchemaPath:LO,getTransactionAuditStorePath:Yk,getTransactionAuditStoreBasePath:DO,getSchemaPath:MO,initSystemSchemaPaths:Kk,resetPaths:Wk}});var Dr=T((qie,xO)=>{"use strict";var Qk=Ir().LMDB_ERRORS_ENUM,xie=require("lmdb"),zk=ht(),Fie=require("buffer").Buffer,{OVERFLOW_MARKER:PO,MAX_SEARCH_KEY_LENGTH:zl}=zk,vO=["number","string","symbol","boolean","bigint"];function Jk(e){if(e=e?.primaryStore||e,!e)throw new Error(Qk.ENV_REQUIRED)}a(Jk,"validateEnv");function Xk(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(Xk,"stringifyData");function jk(e){return e instanceof Date?e.valueOf():e}a(jk,"convertKeyValueToWrite");function Zk(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(vO.includes(typeof e))return e.length>zl?[e.slice(0,zl)+PO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(vO.includes(typeof i))i.length>zl?r.push(i.slice(0,zl)+PO):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(Zk,"getIndexedValues");var Jl=0,BO=0;function HO(){BO=Date.now()-performance.now()}a(HO,"adjustStartTime");HO();var eV=6e4;setInterval(HO,eV).unref();function tV(){let e=performance.now()+BO;return e>Jl?(Jl=e,e):(Jl+=488e-6,Jl)}a(tV,"getNextMonotonicTime");xO.exports={validateEnv:Jk,stringifyData:Xk,convertKeyValueToWrite:jk,getNextMonotonicTime:tV,getIndexedValues:Zk}});var FO,Nn,hh,fc=Ae(()=>{FO=require("events"),Nn=class extends FO.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new hh;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)}},hh=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 ph={};Ve(ph,{loadGQLSchema:()=>sV,start:()=>mh,startOnMainThread:()=>nV});function mh({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(F){if(F.kind==="NonNullType"){let Y=K(F.type);return Y.nullable=!1,Y}if(F.kind==="ListType")return{type:"array",elements:K(F.type)};let Q={type:F.name?.value};return Object.defineProperty(Q,"location",{value:F.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 F of S.directives){if(F.name.value==="table"){for(let P of F.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(F.name.value==="sealed"&&(w.sealed=!0),F.name.value==="export"){w.export=!0;for(let P of F.arguments)P.name.value==="name"&&(w.export={name:P.value.value})}}let B=!1;for(let F of S.fields){let P=K(F.type);P.name=F.name.value,I.push(P);for(let Q of F.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):rV.includes(S.type)||(0,qO.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,Xl.dirname)(n),S.tableClass):i.set((0,Xl.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,Xl.dirname)(n)+"/"+S.name,A.tableClass)}}}var Xl,qO,rV,nV,sV,GO=Ae(()=>{Xl=require("path");ge();qO=v(tt()),rV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(mh,"start");nV=mh,sV=mh({ensureTable:_t}).handleFile});async function jl(e){return iV?(Ec||(Ec=oV(cV)),(await(await Ec).import(e)).namespace):import(e)}async function oV(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:aV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,VO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Ft,tables:Mr,databases:rt})}};let n=await(0,kO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ec}function aV(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 cV(){return{Resource:Ft,tables:Mr}}var kO,VO,iV,Ec,Sh=Ae(()=>{yn();ge();kO=require("fs/promises"),VO=require("path"),iV=!1;a(jl,"secureImport");a(oV,"getCompartment");a(aV,"secureOnlyFetch");a(cV,"getGlobalVars")});var gh={};Ve(gh,{handleFile:()=>uV});async function uV(e,t,r,n){let s=new Map,i=(0,$O.pathToFileURL)(r).toString(),o=await jl(i);u(o.default)&&n.set((0,Th.dirname)(t),o.default),c(o,(0,Th.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 $O,Th,YO=Ae(()=>{$O=require("url");Sh();Th=require("path");a(uV,"handleFile")});var Ah={};Ve(Ah,{start:()=>lV});function lV({resources:e}){e.set("login",Rh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Rh,KO=Ae(()=>{yn();a(lV,"start");Rh=class extends Ft{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 ZO={};Ve(ZO,{parse:()=>bh,streamAsJSON:()=>hc,stringify:()=>Mi});function hc(e){return new Oh({value:e})}function WO(e){return console.error(e),JSON.stringify(e.toString())}function QO(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===XO)return jO(e);if(t.resolution)return t.resolution.then(()=>Mi(e));throw t}}function jO(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+=jO(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 bh(e){return fV.test(e)?_V.parse(e):JSON.parse(e)}var zO,JO,_V,dV,XO,Oh,fV,Nh=Ae(()=>{zO=require("stream"),JO=v(require("json-bigint-fixes")),_V=(0,JO.default)({useNativeBigInt:!0}),dV=1e4,XO={};BigInt.prototype.toJSON=function(){throw XO};a(hc,"streamAsJSON");Oh=class extends zO.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),WO)}catch(s){yield WO(s)}else yield Mi(t)}else yield Mi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);QO(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>dV?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 QO(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(WO,"handleError");a(QO,"when");a(Mi,"stringify");a(jO,"jsStringify");fV=/-?\d{16,}/;a(bh,"parse")});var db=T((roe,_b)=>{"use strict";var yh=require("recursive-iterator"),EV=require("alasql"),Ih=require("clone"),eb=J(),{handleHDBError:tb,hdb_errors:hV}=Z(),{HDB_ERROR_MSGS:rb,HTTP_STATUS_CODES:nb}=hV,{getDatabases:mV}=(ge(),ee(xe)),pV=["DISTINCT_ARRAY"],sb=Symbol("validateTables"),wh=Symbol("validateTable"),toe=Symbol("getAllColumns"),ib=Symbol("validateAllColumns"),Zl=Symbol("findColumn"),ob=Symbol("validateOrderBy"),mc=Symbol("validateSegment"),Ch=Symbol("validateColumn"),ab=Symbol("setColumnsForTable"),cb=Symbol("checkColumnsForAsterisk"),ub=Symbol("validateGroupBy"),lb=Symbol("hasColumns"),Lh=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[sb](),this[cb](),this[ib]()}[sb](){if(this[lb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[wh](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[wh](t.table)})}}[lb](){let t=!1,r=new yh(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[wh](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=mV();if(!r[t.databaseid])throw tb(new Error,rb.SCHEMA_NOT_FOUND(t.databaseid),nb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw tb(new Error,rb.TABLE_NOT_FOUND(t.databaseid,t.tableid),nb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ih(s);i.table=Ih(t),this.attributes.push(i)})}[Zl](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)}[cb](){let t=new yh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[ab](r.tableid)}[ab](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new EV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ib](){this[mc](this.statement.columns,!1),this[mc](this.statement.joins,!1),this[mc](this.statement.where,!1),this[ub](this.statement.group,!1),this[mc](this.statement.order,!0)}[mc](t,r){if(!t)return;let n=new yh(t),s=[];for(let{node:i,path:o}of n)!eb.isEmpty(i)&&!eb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ob](i):s.push(this[Ch](i)));return s}[ub](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&pV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ih(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Zl](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[Zl](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`}[ob](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[Ch](t)}[Ch](t){let r=this[Zl](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]}};_b.exports=Lh});var Eb=T((soe,fb)=>{"use strict";var Dh=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")}};fb.exports=Dh});var mb=T((ooe,hb)=>{"use strict";var Mh=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};hb.exports=Mh});var Rb={};Ve(Rb,{HAS_EXPIRATION:()=>xh,LAST_TIMESTAMP_PLACEHOLDER:()=>Tc,LOCAL_TIMESTAMP:()=>SV,METADATA:()=>pc,NO_TIMESTAMP:()=>Uh,PENDING_LOCAL_TIME:()=>Fh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Hh,RecordEncoder:()=>Bh,TIMESTAMP_ASSIGN_LAST:()=>gV,TIMESTAMP_ASSIGN_NEW:()=>Tb,TIMESTAMP_ASSIGN_PREVIOUS:()=>gb,TIMESTAMP_PLACEHOLDER:()=>e_,TIMESTAMP_RECORD_PREVIOUS:()=>Ph,getUpdateRecord:()=>qh,handleLocalTimeForGets:()=>s_});function AV(){return Sc[0]=Sc[0]^64,TV.getFloat64(0)}function s_(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?.[pc];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?.[pc]>=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[pc];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 qh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Ho=i?.localTime?Ph|gb:Uh:Ho=u?i?.localTime?Ph|16384:Tb|16384:Uh,l>0&&(c|=xh),r_=c,vh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ho>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&&(t_=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,n_(o,t,n,B,A,d,t_),{ifVersion:p}),S}}r.put(Tc,n_(o,t,n,i?.localTime?1:0,A,d,t_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var pb,Sb,e_,Tc,Hh,SV,pc,Sc,TV,Uh,Tb,gV,gb,Ph,xh,Fh,RV,t_,Ho,r_,vh,Bh,uoe,Ui,gc=Ae(()=>{pb=require("msgpackr");Pi();Sb=v(V()),e_=new Uint8Array([1,1,1,1,4,64,0,0]),Tc=new Uint8Array([1,1,1,1,1,0,0,0]),Hh=new Uint8Array([1,1,1,1,3,64,0,0]),SV=Symbol("local-timestamp"),pc=Symbol("metadata"),Sc=new Uint8Array(8),TV=new DataView(Sc.buffer,0,8),Uh=0,Tb=0,gV=1,gb=3,Ph=4,xh=16,Fh=1,Ho=0,r_=-1,vh=0,Bh=class extends pb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Ho||r_>=0){let i=0,o=Ho;o&&(i+=8,Ho=0);let c=r_,u=vh;c>=0&&(i+=2,r_=-1,u&&(i+=8,vh=0));let _=RV=r.call(this,n,s|2048|i);t_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(e_[4]=o,e_[5]=o>>8,_.set(e_,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(Sc,0,c),c+=8;else for(let d=0;d<8;d++)Sc[d]=t[c++];u=AV(),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,s),s-c);return{localTime:u,value:l,[pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(AV,"getTimestamp");uoe=Map.prototype.get;a(s_,"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&&Sb.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(qh,"getUpdateRecord")});var i_=T((_oe,Ab)=>{"use strict";var kh=j(),Vh=M(),{RecordEncoder:OV}=(gc(),ee(Rb));kh.initSync();var bV=kh.get(Vh.CONFIG_PARAMS.STORAGE_COMPRESSION),NV=kh.get(Vh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,yV=Vh.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=bV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=NV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:OV},this.alwaysLazyProperty=n=>n===yV)}};Ab.exports=Gh});var a_=T((foe,bb)=>{"use strict";var xo=j(),Rc=M();xo.initSync();var IV=xo.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xo.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xo.get(Rc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ob=xo.get(Rc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),wV=xo.get(Rc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),o_=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,Ob!==void 0&&(this.overlappingSync=Ob),this.noReadAhead=wV}};bb.exports=o_;o_.MAX_DBS=1e4});var $e=T((hoe,Pb)=>{"use strict";var Yh=require("lmdb"),In=require("fs-extra"),Ur=require("path"),c_=Dr(),Ib=V(),or=Ir().LMDB_ERRORS_ENUM,u_=mb(),Kh=i_(),wb=a_(),zs=ht(),Nb=M(),{table:CV,resetDatabases:LV}=(ge(),ee(xe)),yb=j(),wn=zs.INTERNAL_DBIS_NAME,Cb=zs.DBI_DEFINITION_NAME,DV="data.mdb",MV="lock.mdb",Ac=".mdb",UV="-lock",$h=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Zr(t,r),this.key_type=this.dbi[zs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[zs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Yh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function l_(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(l_,"pathEnvNameValidation");async function Wh(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+Ac);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,DV),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(Wh,"validateEnvironmentPath");function __(e,t){if(c_.validateEnv(e),t===void 0)throw new Error(or.DBI_NAME_REQUIRED)}a(__,"validateEnvDBIName");async function PV(e,t,r=!1,n=!1){l_(e,t);let s=Ur.basename(e);t=t.toString();let i=yb.get(Nb.CONFIG_PARAMS.DATABASES);i||yb.setProperty(Nb.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Wh(e,t,n),Lb(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 wb(n?c:c+Ac,!1),_=Yh.open(u);_.dbis=Object.create(null);let l=new Kh(!1);_.openDB(wn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Qh(e,t,r);return _[zs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(PV,"createEnvironment");async function vV(e,t,r,n=!0){l_(e,t),t=t.toString();let s=Ur.join(e,t);return CV({table:t,database:Ur.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(vV,"copyEnvironment");async function Lb(e,t,r=!1){l_(e,t),t=t.toString();let n=Qh(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 Wh(e,t),i=Ur.join(e,t+Ac),o=s!=i,c=new wb(s,o),u=Yh.open(c);u.dbis=Object.create(null);let _=Mb(u);for(let l=0;l<_.length;l++)Zr(u,_[l]);return u[zs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(Lb,"openEnvironment");async function BV(e,t,r=!1){l_(e,t),t=t.toString();let n=Ur.join(e,t+Ac),s=await Wh(e,t);if(global.lmdb_map!==void 0){let i=Qh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Db(o),delete global.lmdb_map[i]}}await In.remove(s),await In.remove(s===n?s+UV:Ur.join(Ur.dirname(s),MV))}a(BV,"deleteEnvironment");async function Db(e){c_.validateEnv(e);let t=e[zs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Db,"closeEnvironment");function Qh(e,t,r=!1){let s=`${Ur.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Qh,"getCachedEnvironmentName");function HV(e){c_.validateEnv(e);let t=Object.create(null),r=Zr(e,wn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==wn)try{t[n]=Object.assign(new u_,s)}catch{Ib.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(HV,"listDBIDefinitions");function Mb(e){c_.validateEnv(e);let t=[],r=Zr(e,wn);for(let{key:n}of r.getRange({start:!1}))n!==wn&&t.push(n);return t}a(Mb,"listDBIs");function xV(e,t){let n=Zr(e,wn).getEntry(t),s=new u_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{Ib.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(xV,"getDBIDefinition");function Ub(e,t,r,n=!r){if(__(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Zr(e,t)}catch(s){if(s.message===or.DBI_DOES_NOT_EXIST){let i=new Kh(r,n===!0),o=e.openDB(t,i),c=new u_(r===!0,n);return o[Cb]=c,Zr(e,wn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Ub,"createDBI");function Zr(e,t){if(__(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==wn?r=xV(e,t):r=new u_,r===void 0)throw new Error(or.DBI_DOES_NOT_EXIST);let n;try{let s=new Kh(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[Cb]=r,e.dbis[t]=n,n}a(Zr,"openDBI");function FV(e,t){__(e,t),t=t.toString();let r=Zr(e,t),n=r.getStats();return r[zs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(FV,"statDBI");async function qV(e,t){try{let r=Ur.join(e,t+Ac);return(await In.stat(r)).size}catch{throw new Error(or.INVALID_ENVIRONMENT)}}a(qV,"environmentDataSize");function GV(e,t){if(__(e,t),t=t.toString(),t===wn)throw new Error(or.CANNOT_DROP_INTERNAL_DBIS_NAME);Zr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Zr(e,wn).removeSync(t)}a(GV,"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{Zr(e,i)}catch(o){if(o.message===or.DBI_DOES_NOT_EXIST)Ub(e,i,i!==t,i===t),n=!0;else throw o}}n&&LV()}a(kV,"initializeDBIs");Pb.exports={openDBI:Zr,openEnvironment:Lb,createEnvironment:PV,listDBIs:Mb,listDBIDefinitions:HV,createDBI:Ub,dropDBI:GV,statDBI:FV,deleteEnvironment:BV,initializeDBIs:kV,TransactionCursor:$h,environmentDataSize:qV,copyEnvironment:vV,closeEnvironment:Db}});var Bb=T((poe,vb)=>{"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}};vb.exports=zh});var xb=T((Toe,Hb)=>{"use strict";var Jh=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}};Hb.exports=Jh});var qb=T((Roe,Fb)=>{"use strict";var Xh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Fb.exports=Xh});var Fo=T((yoe,Vb)=>{"use strict";var VV=$e(),$V=Bb(),YV=xb(),KV=qb(),$n=Dr(),Oc=Ir().LMDB_ERRORS_ENUM,WV=ht(),Ss=M(),QV=J(),zV=require("uuid"),Ooe=require("lmdb"),{handleHDBError:JV,hdb_errors:XV}=Z(),{OVERFLOW_MARKER:boe,MAX_SEARCH_KEY_LENGTH:Noe}=WV,Gb=j();Gb.initSync();var d_=Gb.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),jh=Ss.TIME_STAMP_NAMES_ENUM.CREATED_TIME,vi=Ss.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function jV(e,t,r,n,s=$n.getNextMonotonicTime()){rm(e,t,r,n),Zh(e,t,r);let i=new $V,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];kb(_,!0,s);let l=ZV(e,t,r,_),d=_[t];o.push(l),c.push(d)}return em(o,c,n,i,s)}a(jV,"insertRecords");function ZV(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){d_&&_.prefetch(u.map(l=>({key:l,value:s})),f_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}d_&&e.dbis[t].prefetch([s],f_),e.dbis[t].put(s,n,n[vi])})}a(ZV,"insertRecord");function e$(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(e$,"removeSkippedRecords");function kb(e,t,r){let n=r>0;(n||!Number.isInteger(e[vi]))&&(e[vi]=r||(r=$n.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[jh]))&&(e[jh]=r||$n.getNextMonotonicTime()):delete e[jh]}a(kb,"setTimestamps");function Zh(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),VV.initializeDBIs(e,t,r)}a(Zh,"initializeTransaction");async function t$(e,t,r,n,s=$n.getNextMonotonicTime()){rm(e,t,r,n),Zh(e,t,r);let i=new YV,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=tm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return em(c,u,n,i,s,o)}a(t$,"updateRecords");async function r$(e,t,r,n,s=$n.getNextMonotonicTime()){try{rm(e,t,r,n)}catch(u){throw JV(u,u.message,XV.HTTP_STATUS_CODES.BAD_REQUEST)}Zh(e,t,r);let i=new KV,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;QV.isEmpty(_[t])?(l=zV.v4(),_[t]=l):l=_[t];let d=tm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return em(o,c,n,i,s)}a(r$,"upsertRecords");async function em(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(),e$(r,i),n}a(em,"finalizeWrite");function tm(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(kb(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){d_&&S.prefetch(I.map(w=>({key:w,value:n})),f_);for(let w=0,B=I.length;w<B;w++)S.remove(I[w],n)}if(I=$n.getIndexedValues(p),I){d_&&S.prefetch(I.map(w=>({key:w,value:n})),f_);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:tm(e,t,r,n,s,i,o))}a(tm,"updateUpsertRecord");function n$(e,t,r){if($n.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(n$,"validateBasic");function rm(e,t,r,n){if(n$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Oc.RECORDS_REQUIRED):new Error(Oc.RECORDS_MUST_BE_ARRAY)}a(rm,"validateWrite");function f_(){}a(f_,"noop");Vb.exports={insertRecords:jV,updateRecords:t$,upsertRecords:r$}});var Bi=T((woe,s$)=>{s$.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((Coe,Kb)=>{"use strict";var Yb=J(),$b=M(),qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Yn=require("joi"),Js={schema_format:{pattern:qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},i$=Yn.alternatives(Yn.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),Yn.number(),Yn.array()).required(),o$=Yn.alternatives(Yn.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),Yn.number()),a$=Yn.alternatives(Yn.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),Yn.number()).required();function c$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Js.schema_length.maximum?`'${e}' maximum of 250 characters`:qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(c$,"checkValidTable");function u$(e,t){return Yb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(u$,"validateSchemaExists");function l$(e,t){let r=t.state.ancestors[0].schema;return Yb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(l$,"validateTableExists");function _$(e,t){return e.toLowerCase()===$b.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${$b.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(_$,"validateSchemaName");Kb.exports={common_validators:Js,schema_regex:qo,hdb_schema_table:i$,validateSchemaExists:u$,validateTableExists:l$,validateSchemaName:_$,checkValidTable:c$,hdb_database:o$,hdb_table:a$}});var E_=T((Doe,Wb)=>{var{common_validators:Wn}=Kn(),Nc=et(),bc="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 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 d$(e){return e=yc(e),mt.table.presence=!1,mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(d$,"schema_object");function f$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(f$,"table_object");function E$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence=!1,Nc.validateObject(e,mt)}a(E$,"create_table_object");function h$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence={message:bc},mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(h$,"attribute_object");function m$(e){return e=yc(e),mt.table.presence={message:bc},mt.attribute.presence=!1,mt.hash_attribute.presence=!1,Nc.validateObject(e,mt)}a(m$,"describe_table");function p$(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(p$,"validateTableResidence");Wb.exports={schema_object:d$,create_table_object:E$,table_object:f$,attribute_object:h$,describe_table:m$,validateTableResidence:p$}});var zb=T((Uoe,Qb)=>{"use strict";var S$=require("uuid"),nm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||S$.v4(),this.schema_table=`${this.schema}.${this.table}`}};Qb.exports=nm});var h_=T((voe,Jb)=>{"use strict";var T$=zb(),sm=class extends T${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}};Jb.exports=sm});var jb=T((Hoe,Xb)=>{"use strict";Xb.exports=R$;var g$="inserted";function R$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===g$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(R$,"returnObject")});var m_=T((Foe,nN)=>{"use strict";var A$=M(),im=$e(),O$=Fo(),{getSystemSchemaPath:b$,getSchemaPath:N$}=We(),y$=Bi(),I$=E_(),w$=h_(),C$=jb(),{handleHDBError:Zb,hdb_errors:tN}=Z(),eN=J(),{HTTP_STATUS_CODES:L$}=tN,om=y$.hdb_attribute,rN=[];for(let e=0;e<om.attributes.length;e++)rN.push(om.attributes[e].attribute);var D$="inserted";nN.exports=M$;async function M$(e){let t=I$.attribute_object(e);if(t)throw Zb(new Error,t.message,tN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&eN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Zb(new Error,r,L$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=eN.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 w$(e.schema,e.table,e.attribute,e.id);try{let i=await im.openEnvironment(N$(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}`);im.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await im.openEnvironment(b$(),A$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await O$.insertRecords(o,om.hash_attribute,rN,[s]);return C$(D$,c,{records:[s]},u)}catch(i){throw i}}a(M$,"lmdbCreateAttribute")});var cm=T((Goe,iN)=>{var{hdb_table:U$,hdb_database:sN}=Kn(),P$=et(),am=require("joi"),v$={undefined:"undefined",null:"null"},B$=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||v$[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"),H$=am.object({database:sN,schema:sN,table:U$,records:am.array().items(am.object().custom(B$)).required()});iN.exports=function(e){return P$.validateBySchema(e,H$)}});var Ic=T(($oe,aN)=>{"use strict";var Ts=J(),oN=V(),Voe=cm(),{getDatabases:x$}=(ge(),ee(xe)),{ClientError:Hi}=Z();aN.exports=F$;function F$(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=x$()[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 oN.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 oN.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(F$,"insertUpdateValidate")});var wc=T((Koe,cN)=>{"use strict";var q$=M().OPERATIONS_ENUM,um=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=q$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};cN.exports=um});var Mc=T((zoe,uN)=>{"use strict";var Qoe=wc(),p_=M(),_m=J(),lm=V(),G$=require("uuid"),{handleHDBError:Cc,hdb_errors:k$}=Z(),{HDB_ERROR_MSGS:Lc,HTTP_STATUS_CODES:Dc}=k$;uN.exports=V$;function V$(e,t,r){for(let s=0;s<t.length;s++)$$(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];Y$(i,r,e.operation)}}a(V$,"processRows");function $$(e){if(Buffer.byteLength(String(e))>p_.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(_m.isEmptyOrZeroLength(e)||_m.isEmpty(e.trim()))throw Cc(new Error,Lc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a($$,"validateAttribute");function Y$(e,t,r){if(!e.hasOwnProperty(t)||_m.isEmptyOrZeroLength(e[t])){if(r===p_.OPERATIONS_ENUM.INSERT||r===p_.OPERATIONS_ENUM.UPSERT){e[t]=G$.v4();return}throw lm.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]))>p_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw lm.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 lm.error(e),Cc(new Error,Lc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(Y$,"validateHash")});var _N=T((Xoe,lN)=>{"use strict";var dm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};lN.exports=dm});var EN=T((Zoe,fN)=>{"use strict";var fm=$e(),K$=V(),dN=Ir().LMDB_ERRORS_ENUM;fN.exports=W$;async function W$(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 fm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==dN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await fm.closeEnvironment(global.lmdb_map[n]),await fm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==dN.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){K$.error(t)}}a(W$,"cleanLMDBMap")});var gs=T((tae,SN)=>{"use strict";var Uc=require("crypto"),Q$=j(),{CONFIG_PARAMS:z$}=M(),mN="aes-256-cbc",J$=32,X$=16,Em=64,pN=32,j$=Em+pN,hN=new Map;SN.exports={encrypt:Z$,decrypt:e1,createNatsTableStreamName:t1};function Z$(e){let t=Uc.randomBytes(J$),r=Uc.randomBytes(X$),n=Uc.createCipheriv(mN,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(Z$,"encrypt");function e1(e){let t=e.substr(0,Em),r=e.substr(Em,pN),n=e.substr(j$,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Uc.createDecipheriv(mN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(e1,"decrypt");function t1(e,t){let r=Q$.get(z$.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hN.get(r);return n||(n=Uc.createHash("md5").update(r).digest("hex"),hN.set(r,n)),n}a(t1,"createNatsTableStreamName")});var xi=T((sae,gN)=>{"use strict";var nae=en(),S_=V(),TN=E_(),r1=gs(),T_=J(),{handleHDBError:g_,hdb_errors:n1}=Z(),{HDB_ERROR_MSGS:R_,HTTP_STATUS_CODES:hm}=n1,s1=j();s1.initSync();var{getDatabases:mm}=(ge(),ee(xe));gN.exports={describeAll:i1,describeTable:A_,describeSchema:o1};async function i1(e){try{let t=T_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=mm(),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 A_({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 A_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){S_.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 S_.error("Got an error in describeAll"),S_.error(t),g_(new Error,R_.DESCRIBE_ALL_ERR)}}a(i1,"describeAll");async function A_(e,t){T_.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=TN.describe_table(e);if(i)throw i;let c=mm()[r];if(!c)throw g_(new Error,R_.SCHEMA_NOT_FOUND(e.schema),hm.NOT_FOUND);let u=c[n];if(!u)throw g_(new Error,R_.TABLE_NOT_FOUND(e.schema,e.table),hm.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=r1.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){S_.warn(`unable to stat table dbi due to ${f}`)}return d}a(A_,"descTable");async function o1(e){T_.transformReq(e);let t=TN.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=mm()[n];if(!i)throw g_(new Error,R_.SCHEMA_NOT_FOUND(e.schema),hm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),T_.isEmpty(u)||u.describe){let _=await A_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(o1,"describeSchema")});var Xs=T((cae,NN)=>{var a1=Bi(),{callbackify:AN,promisify:c1}=require("util"),{getDatabases:ON}=(ge(),ee(xe));NN.exports={setSchemaDataToGlobal:RN,getTableSchema:u1,getSystemSchema:l1,setSchemaDataToGlobalAsync:c1(RN)};var bN=xi(),oae=AN(bN.describeAll),aae=AN(bN.describeTable);function RN(e){global.hdb_schema=ON(),e&&e()}a(RN,"setSchemaDataToGlobal");function u1(e,t,r){let n=ON()[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(u1,"getTableSchema");function l1(){return a1}a(l1,"getSystemSchema")});var tn=T((lae,CN)=>{"use strict";var b_=cm(),qt=J(),_1=require("util"),N_=Cn(),d1=Xs(),yN=V(),{handleHDBError:Fi,hdb_errors:f1}=Z(),{HTTP_STATUS_CODES:qi}=f1,E1=_1.promisify(d1.getTableSchema),h1="updated",IN="inserted",wN="upserted";CN.exports={insert:p1,update:S1,upsert:T1,validation:m1,flush:g1};async function m1(e){if(qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(qt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await E1(e.schema,e.table),r=b_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&qt.isEmptyOrZeroLength(c[n]))throw yN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!qt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw yN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!qt.isEmpty(c[n])&&c[n]!==""&&s.has(qt.autoCast(c[n]))&&(c.skip=!0),s.add(qt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(m1,"validation");async function p1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=b_(e);if(t)throw Fi(new Error,t.message,qi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,qi.BAD_REQUEST);let n=await N_.createRecords(e);return O_(IN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(p1,"insertData");async function S1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=b_(e);if(t)throw Fi(new Error,t.message,qi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,qi.BAD_REQUEST);let n=await N_.updateRecords(e);return qt.isEmpty(n.existing_rows)?O_(h1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):O_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(S1,"updateData");async function T1(e){if(e.operation!=="upsert")throw Fi(new Error,"invalid operation, must be upsert",qi.INTERNAL_SERVER_ERROR);let t=b_(e);if(t)throw Fi(new Error,t.message,qi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw Fi(new Error,r,qi.BAD_REQUEST);let n=await N_.upsertRecords(e);return O_(wN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(T1,"upsertData");function O_(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===IN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===wN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(O_,"returnObject");function g1(e){return qt.transformReq(e),N_.flush(e.schema,e.table)}a(g1,"flush")});var Sm=T((dae,MN)=>{var R1=et(),pm=require("joi"),{hdb_table:A1,hdb_database:LN}=Kn(),DN={schema:LN,database:LN,table:A1},O1={date:pm.date().iso().required()},b1={timestamp:pm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};MN.exports=function(e,t){let r=t==="timestamp"?{...DN,...b1}:{...DN,...O1},n=pm.object(r);return R1.validateBySchema(e,n)}});var vN=T((fae,PN)=>{var N1=et(),Tm=require("joi"),{hdb_table:y1,hdb_database:UN}=Kn(),I1=Tm.object({schema:UN,database:UN,table:y1,hash_values:Tm.array().required(),ids:Tm.array()});PN.exports=function(e){return N1.validateBySchema(e,I1)}});var HN=T((Eae,BN)=>{"use strict";var gm=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}},Rm=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}},Am=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};BN.exports={InsertObject:gm,NoSQLSeachObject:Rm,DeleteResponseObject:Am}});var Vi=T((mae,kN)=>{"use strict";var FN=Sm(),w1=vN(),Gi=J(),xN=require("moment"),qN=V(),{promisify:C1,callbackify:L1}=require("util"),ki=M(),D1=Xs(),Om=C1(D1.getTableSchema),bm=Cn(),{DeleteResponseObject:M1}=HN(),{handleHDBError:js,hdb_errors:U1}=Z(),{HDB_ERROR_MSGS:y_,HTTP_STATUS_CODES:Zs}=U1,P1="records successfully deleted",v1=L1(GN);kN.exports={delete:v1,deleteRecord:GN,deleteFilesBefore:B1,deleteAuditLogsBefore:H1};async function B1(e){let t=FN(e,"date");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(Gi.transformReq(e),!xN(e.date,xN.ISO_8601).isValid())throw js(new Error,y_.INVALID_DATE,Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,y_.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 bm.deleteRecordsBefore(e);if(await Om(e.schema,e.table),qN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(B1,"deleteFilesBefore");async function H1(e){let t=FN(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,y_.INVALID_VALUE("Timestamp"),Zs.BAD_REQUEST,ki.LOG_LEVELS.ERROR,y_.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 bm.deleteAuditLogsBefore(e);return await Om(e.schema,e.table),qN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(H1,"deleteAuditLogsBefore");async function GN(e){e.ids&&(e.hash_values=e.ids);let t=w1(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 Om(e.schema,e.table);let n=await bm.deleteRecords(e);return Gi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${P1}`),n}catch(n){if(n.message===ki.SEARCH_NOT_FOUND_MESSAGE){let s=new M1;return s.message=ki.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(GN,"deleteRecord")});var I_=T((Sae,YN)=>{var x1=require("crypto"),VN=9;function F1(e){let t=G1(VN),r=$N(e+t);return t+r}a(F1,"createHash");function q1(e,t){let r=e?.substr(0,VN),n=r+$N(t+r);return e===n}a(q1,"validateHash");function G1(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(G1,"generateSalt");function $N(e){return x1.createHash("md5").update(e).digest("hex")}a($N,"md5");YN.exports={hash:F1,validate:q1}});var WN=T((gae,KN)=>{var Nm=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,Nm.validateObject(e,Qt)}a(k1,"addUserValidation");function V1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Nm.validateObject(e,Qt)}a(V1,"alterUserValidation");function $1(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,Nm.validateObject(e,Qt)}a($1,"dropUserValidation");KN.exports={addUserValidation:k1,alterUserValidation:V1,dropUserValidation:$1}});var nt=T((Oae,zN)=>{"use strict";var{platform:Aae}=require("os"),Y1="nats-server.zip",ym="nats-server",K1=process.platform==="win32"?`${ym}.exe`:ym,Im="HDB",W1=/^[^\s.,*>]+$/,QN="__request__",Q1=a(e=>`${e}.${QN}`,"REQUEST_SUBJECT"),z1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},J1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},X1={HUB:"hub.pid",LEAF:"leaf.pid"},j1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Z1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Im,deliver_subject:"__HDB__.WORKQUEUE"},eY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Im,deliver_subject:"HDB.SCHEMAQUEUE"},tY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Im,deliver_subject:"HDB.USERQUEUE"},rY={SUCCESS:"success",ERROR:"error"},nY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},sY={TXN:"txn",MSGID:"msgid"},Go={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},iY={[Go.ERR]:1,[Go.WRN]:2,[Go.INF]:3,[Go.DBG]:4,[Go.TRC]:5},oY={debug:"-D",trace:"-DVV"};zN.exports={NATS_SERVER_ZIP:Y1,NATS_SERVER_NAME:ym,NATS_BINARY_NAME:K1,PID_FILES:X1,NATS_CONFIG_FILES:J1,SERVER_SUFFIX:j1,WORK_QUEUE_CONSUMER_NAMES:Z1,SCHEMA_QUEUE_CONSUMER_NAMES:eY,USER_QUEUE_CONSUMER_NAMES:tY,NATS_TERM_CONSTRAINTS_RX:W1,REQUEST_SUFFIX:QN,UPDATE_REMOTE_RESPONSE_STATUSES:rY,CLUSTER_STATUS_STATUSES:nY,REQUEST_SUBJECT:Q1,SUBJECT_PREFIXES:sY,MSG_HEADERS:z1,LOG_LEVELS:Go,LOG_LEVEL_FLAGS:oY,LOG_LEVEL_HIERARCHY:iY}});var XN=T((Nae,JN)=>{"use strict";var w_=M(),C_=class{static{a(this,"BaseLicense")}constructor(t=0,r=w_.RAM_ALLOCATION_ENUM.DEFAULT,n=w_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},wm=class extends C_{static{a(this,"ExtendedLicense")}constructor(t=0,r=w_.RAM_ALLOCATION_ENUM.DEFAULT,n=w_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};JN.exports={BaseLicense:C_,ExtendedLicense:wm}});var $i=T((Iae,ny)=>{"use strict";var Vo=require("fs-extra"),ZN=I_(),ey=require("crypto"),aY=require("moment"),cY=require("uuid").v4,zt=V(),Lm=require("path"),uY=J(),ei=M(),{totalmem:jN}=require("os"),lY=XN().ExtendedLicense,ko="invalid license key format",_Y="061183",dY="mofi25",fY="aes-256-cbc",EY=16,hY=32,ty=j();ty.initSync();var Cm;ny.exports={validateLicense:ry,generateFingerPrint:pY,licenseSearch:Um,getLicense:gY,checkMemoryLimit:RY};function Dm(){return Lm.join(ty.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(Dm,"getLicenseDirPath");function mY(){let e=Dm();return Lm.join(e,ei.LICENSE_FILE_NAME)}a(mY,"getLicenseFilePath");function Mm(){let e=Dm();return Lm.join(e,ei.REG_KEY_FILE_NAME)}a(Mm,"getFingerPrintFilePath");async function pY(){let e=Mm();try{return await Vo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await SY();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(pY,"generateFingerPrint");async function SY(){let e=cY(),t=ZN.hash(e),r=Mm();try{await Vo.mkdirp(Dm()),await Vo.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(SY,"writeFingerprint");function ry(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=Mm(),s=!1;try{s=Vo.statSync(n)}catch(i){zt.error(i)}if(s){let i;try{i=Vo.readFileSync(n,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(dY),c=o[1];c=Buffer.concat([Buffer.from(c)],EY);let u=Buffer.concat([Buffer.from(i)],hY),_=ey.createDecipheriv(fY,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=TY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ko),zt.error(ko),new Error(ko)}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(ko),zt.error(ko),new Error(ko)}else r.exp_date=l;r.exp_date<aY().valueOf()&&(r.valid_date=!1),ZN.validate(o[1],`${_Y}${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(ry,"validateLicense");function TY(e,t){try{let r=ey.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(TY,"checkOldLicense");function Um(){let e=new lY,t=[];try{t=Vo.readFileSync(mY(),"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(uY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=ry(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 Cm=e,e}a(Um,"licenseSearch");async function gY(){return Cm||await Um(),Cm}a(gY,"getLicense");function RY(){let e=Um().ram_allocation,t=process.constrainedMemory?.()||jN();if(t=Math.round(Math.min(t,jN())/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(RY,"checkMemoryLimit")});var rn=T((Mae,Ty)=>{"use strict";var ay="username is required",cy="nothing to update, must supply active, role or password to update",uy="password cannot be an empty string",ly="If role is specified, it cannot be empty.",_y="active must be true or false";Ty.exports={addUser:LY,alterUser:DY,dropUser:UY,getSuperUser:HY,userInfo:PY,listUsers:D_,listUsersExternal:vY,setUsersToGlobal:Yo,findAndValidateUser:py,getClusterUser:xY,USERNAME_REQUIRED:ay,ALTERUSER_NOTHING_TO_UPDATE:cy,EMPTY_PASSWORD:uy,EMPTY_ROLE:ly,ACTIVE_BOOLEAN:_y};var dy=tn(),AY=Vi(),Bm=I_(),fy=WN(),Ey=en(),Hm=Rs(),Pr=J(),hy=require("validate.js"),Te=V(),{promisify:OY}=require("util"),xm=gs(),sy=M(),iy=nt(),bY=Lr(),Cae=j(),Lae=$i(),NY=Bi(),{table:Dae}=(ge(),ee(xe)),{handleHDBError:Qn,hdb_errors:yY}=Z(),{HTTP_STATUS_CODES:zn,AUTHENTICATION_ERROR_MSGS:Pm,HDB_ERROR_MSGS:$o}=yY,{UserEventMsg:Fm}=Ln(),vm=require("lodash"),{server:qm}=(nr(),ee(Ci)),IY=V();qm.getUser=(e,t)=>py(e,t,t!=null);var my={username:!0,active:!0,role:!0,password:!0},oy=new Map,L_=Ey.searchByValue,wY=Ey.searchByHash,CY=OY(AY.delete);async function LY(e){let t=hy.cleanAttributes(e,my),r=fy.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 L_(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,$o.ROLE_NAME_NOT_FOUND(t.role),zn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Qn(new Error,$o.DUP_ROLES_FOUND(t.role),zn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=xm.encrypt(t.password)),t.password=Bm.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await dy.insert(i)}catch(u){throw Te.error("There was an error searching for a user."),Te.error(u),u}Te.debug(o);try{await Yo()}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,$o.USER_ALREADY_EXISTS(t.username),zn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Hm.signalUserChange(new Fm(process.pid)),`${c.username} successfully added`}a(LY,"addUser");async function DY(e){let t=hy.cleanAttributes(e,my);if(Pr.isEmptyOrZeroLength(t.username))throw new Error(ay);if(Pr.isEmptyOrZeroLength(t.password)&&Pr.isEmptyOrZeroLength(t.role)&&Pr.isEmptyOrZeroLength(t.active))throw new Error(cy);if(!Pr.isEmpty(t.password)&&Pr.isEmptyOrZeroLength(t.password.trim()))throw new Error(uy);if(!Pr.isEmpty(t.active)&&!Pr.isBoolean(t.active))throw new Error(_y);let r=MY(t.username);if(!Pr.isEmpty(t.password)&&!Pr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=xm.encrypt(t.password)),t.password=Bm.hash(t.password)),t.role==="")throw new Error(ly);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 L_(i)||[])}catch(c){throw Te.error("Got an error searching for a role."),Te.error(c),c}if(!o||o.length===0){let c=$o.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=$o.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 dy.update(n)}catch(i){throw Te.error("Error during update."),Te.error(i),i}try{await Yo()}catch(i){throw Te.error("Got an error setting users to global"),Te.error(i),i}return Hm.signalUserChange(new Fm(process.pid)),s}a(DY,"alterUser");function MY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(MY,"isClusterUser");async function UY(e){try{let t=fy.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,$o.USER_NOT_EXIST(e.username),zn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await CY(r)}catch(s){throw Te.error("Got an error deleting a user."),Te.error(s),s}Te.debug(n);try{await Yo()}catch(s){throw Te.error("Got an error setting users to global."),Te.error(s),s}return Hm.signalUserChange(new Fm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(UY,"dropUser");async function PY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=vm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await wY(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(PY,"userInfo");async function vY(){let e;try{e=await D_()}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(vY,"listUsersExternal");async function D_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await L_(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]=vm.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 L_(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=vm.cloneDeep(o),o.role=r[o.role],BY(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(D_,"listUsers");function BY(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(NY)){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(BY,"appendSystemTablesToRole");async function Yo(){try{let e=await D_();global.hdb_users=e}catch(e){throw Te.error(e),e}}a(Yo,"setUsersToGlobal");async function py(e,t,r=!0){global.hdb_users||await Yo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Qn(new Error,Pm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Qn(new Error,Pm.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(oy.get(t)===n.password)return s;if(Bm.validate(n.password,t))oy.set(t,n.password);else throw Qn(new Error,Pm.GENERIC_AUTH_FAIL,zn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(py,"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 xY(){let e=await D_(),t=bY.getConfigFromFile(sy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Pr.isEmpty(r)&&r?.role?.role===sy.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=xm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+iy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+iy.SERVER_SUFFIX.ADMIN,r}a(xY,"getClusterUser");var Sy=[];qm.invalidateUser=function(e){for(let t of Sy)try{t(e)}catch(r){IY.error("Error invalidating user",r)}};qm.onInvalidatedUser=function(e){Sy.push(e)}});var vc=T((Bae,Oy)=>{"use strict";var Yi=V(),vr=M(),FY=EN(),Pae=Xs(),vae=xi(),qY=rn(),{validateEvent:gy}=Ln(),Pc=Cn(),GY=require("process"),{resetDatabases:kY}=(ge(),ee(xe)),VY={[vr.ITC_EVENT_TYPES.SCHEMA]:$Y,[vr.ITC_EVENT_TYPES.USER]:Ay};async function $Y(e){let t=gy(e);if(t){Yi.error(t);return}Yi.trace("ITC schemaHandler received schema event:",e),await FY(e.message),await YY(e.message)}a($Y,"schemaHandler");async function YY(e){try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.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(YY,"syncSchemaMetadata");var Ry=[];async function Ay(e){try{try{Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Pc.resetReadTxn(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Yi.warn(r)}let t=gy(e);if(t){Yi.error(t);return}Yi.trace(`ITC userHandler ${vr.HDB_ITC_CLIENT_PREFIX}${GY.pid} received user event:`,e),await qY.setUsersToGlobal();for(let r of Ry)r()}catch(t){Yi.error(t)}}a(Ay,"userHandler");Ay.addListener=function(e){Ry.push(e)};Oy.exports=VY});var Ln=T((kae,Ny)=>{"use strict";var xae=V(),Gm=J(),KY=M(),{ITC_ERRORS:Bc}=Ir(),{parentPort:Fae,threadId:WY,isMainThread:QY,workerData:qae}=require("worker_threads"),{onMessageFromWorkers:zY,broadcast:Gae,broadcastWithAcknowledgement:JY}=tt();Ny.exports={sendItcEvent:XY,validateEvent:by,SchemaEventMsg:jY,UserEventMsg:ZY};var M_;zY(async(e,t)=>{M_=M_||vc(),by(e),M_[e.type]&&await M_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function XY(e){return!QY&&e.message&&(e.message.originator=WY),JY(e)}a(XY,"sendItcEvent");function by(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(KY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bc.INVALID_EVENT(e.type)}a(by,"validateEvent");function jY(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(jY,"SchemaEventMsg");function ZY(e){this.originator=e}a(ZY,"UserEventMsg")});var Rs=T((Yae,Cy)=>{"use strict";var yy=M(),$ae=J(),U_=V(),Iy=_N(),Ko,{sendItcEvent:wy}=Ln();function eK(e){try{U_.trace("signalSchemaChange called with message:",e),Ko=Ko||vc();let t=new Iy(yy.ITC_EVENT_TYPES.SCHEMA,e);return Ko.schema(t),wy(t)}catch(t){U_.error(t)}}a(eK,"signalSchemaChange");function tK(e){try{U_.trace("signalUserChange called with message:",e),Ko=Ko||vc();let t=new Iy(yy.ITC_EVENT_TYPES.USER,e);return Ko.user(t),wy(t)}catch(t){U_.error(t)}}a(tK,"signalUserChange");Cy.exports={signalSchemaChange:eK,signalUserChange:tK}});var P_=T((Wae,Dy)=>{"use strict";var Ly=J(),rK=M(),nK=V(),sK=m_(),iK=h_(),oK=Rs(),{SchemaEventMsg:aK}=Ln(),cK="already exists in";Dy.exports=uK;async function uK(e,t,r){if(Ly.isEmptyOrZeroLength(r))return r;let n=[];Ly.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 lK(e,t.schema,t.name,i)})),s}a(uK,"lmdbCheckForNewAttributes");async function lK(e,t,r,n){let s=new iK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await _K(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(cK))nK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(lK,"createNewAttribute");async function _K(e){let t;return t=await sK(e),oK.signalSchemaChange(new aK(process.pid,rK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_K,"createAttribute")});var Wo=T((zae,My)=>{"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}};My.exports=km});var Py=T((Xae,Uy)=>{"use strict";var dK=Wo(),fK=M().OPERATIONS_ENUM,Vm=class extends dK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(fK.INSERT,r,n,s,i),this.records=t}};Uy.exports=Vm});var By=T((Zae,vy)=>{"use strict";var EK=Wo(),hK=M().OPERATIONS_ENUM,$m=class extends EK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(hK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};vy.exports=$m});var xy=T((tce,Hy)=>{"use strict";var mK=Wo(),pK=M().OPERATIONS_ENUM,Ym=class extends mK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(pK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Hy.exports=Ym});var qy=T((nce,Fy)=>{"use strict";var SK=Wo(),TK=M().OPERATIONS_ENUM,Km=class extends SK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(TK.DELETE,n,s,t,i),this.original_records=r}};Fy.exports=Km});var Hc=T((oce,$y)=>{"use strict";var ice=require("path"),Gy=$e(),gK=Py(),RK=By(),AK=xy(),OK=qy(),Qo=ht(),ky=J(),{CONFIG_PARAMS:bK}=M(),Vy=j();Vy.initSync();var v_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:NK}=We();$y.exports=yK;async function yK(e,t){if(Vy.get(bK.LOGGING_AUDITLOG)===!1)return;let r=NK(e.schema,e.table),n=await Gy.openEnvironment(r,e.table,!0),s=IK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Gy.initializeDBIs(n,Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),ky.isEmpty(s.user_name)||n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(yK,"writeTransaction");function IK(e,t){let r=ky.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===v_.INSERT)return new gK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.UPDATE)return new RK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.UPSERT)return new AK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.DELETE)return new OK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(IK,"createTransactionObject")});var Wm=T((uce,Yy)=>{"use strict";var wK=Ic(),cce=wc(),xc=M(),CK=Mc(),LK=Fo().insertRecords,DK=$e(),MK=V(),UK=P_(),{getSchemaPath:PK}=We(),vK=Hc();Yy.exports=BK;async function BK(e){try{let{schema_table:t,attributes:r}=wK(e);CK(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 n=await UK(e.hdb_auth_header,t,r),s=PK(e.schema,e.table),i=await DK.openEnvironment(s,e.table),o=await LK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vK(e,o)}catch(c){MK.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(BK,"lmdbCreateRecords")});var Qy=T((_ce,Wy)=>{"use strict";var Ky=M(),HK=Wm(),xK=wc(),FK=require("fs-extra"),{getSchemaPath:qK}=We();Wy.exports=GK;async function GK(e){let t=[{name:e.schema,createddate:Date.now()}],r=new xK(Ky.SYSTEM_SCHEMA_NAME,Ky.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await HK(r),await FK.mkdirp(qK(e.schema))}a(GK,"lmdbCreateSchema")});var Jy=T((fce,zy)=>{"use strict";var Qm=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}};zy.exports=Qm});var eI=T((Sce,Zy)=>{"use strict";var Xy=$e(),zm=Dr(),Jm=Ir().LMDB_ERRORS_ENUM,kK=ht(),jy=V(),hce=J(),VK=require("lmdb"),$K=Jy(),YK=M(),{OVERFLOW_MARKER:mce,MAX_SEARCH_KEY_LENGTH:pce}=kK,KK=YK.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WK(e,t,r,n){if(zm.validateEnv(e),t===void 0)throw new Error(Jm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Jm.IDS_REQUIRED):new Error(Jm.IDS_MUST_BE_ITERABLE);try{let s=Xy.listDBIs(e);Xy.initializeDBIs(e,t,s);let i=new $K,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[KK]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,VK.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,F=B.length;K<F;K++)I.remove(B[K],o)}catch{jy.warn(`cannot delete from attribute: ${A}, ${w}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){jy.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(WK,"deleteRecords");Zy.exports={deleteRecords:WK}});var Fc=T((gce,rI)=>{"use strict";var zo=J(),QK=eI(),zK=$e(),{getSchemaPath:JK}=We(),XK=Hc(),jK=V();rI.exports=ZK;async function ZK(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zo.isEmpty(n))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][n];zo.isEmpty(u)||e.hash_values.push(u)}}if(zo.isEmptyOrZeroLength(e.hash_values))return tI([],[]);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]={[n]:e.hash_values[c]}}let s=JK(e.schema,e.table),i=await zK.openEnvironment(s,e.table),o=await QK.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await XK(e,o)}catch(c){jK.error(`unable to write transaction due to ${c.message}`)}return tI(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(ZK,"lmdbDeleteRecords");function tI(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(tI,"createDeleteResponse")});var jm=T((Oce,nI)=>{"use strict";var eW=M(),Ace=Dr();function Xm(e,t){let r=Object.create(null);if(t.length===1&&eW.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(Xm,"parseRow");function tW(e,t,r,n){let s=Xm(r,e);n.push(s)}a(tW,"searchAll");function rW(e,t,r,n){let s=Xm(r,e);n[t]=s}a(rW,"searchAllToMap");function nW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(nW,"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 sW(e,t,r,n,s,i){t.toString().endsWith(e)&&Ki(t,r,n,s,i)}a(sW,"endsWith");function iW(e,t,r,n,s,i){t.toString().includes(e)&&Ki(t,r,n,s,i)}a(iW,"contains");function oW(e,t,r,n,s,i){t>e&&Ki(t,r,n,s,i)}a(oW,"greaterThanCompare");function aW(e,t,r,n,s,i){t>=e&&Ki(t,r,n,s,i)}a(aW,"greaterThanEqualCompare");function cW(e,t,r,n,s,i){t<e&&Ki(t,r,n,s,i)}a(cW,"lessThanCompare");function uW(e,t,r,n,s,i){t<=e&&Ki(t,r,n,s,i)}a(uW,"lessThanEqualCompare");nI.exports={parseRow:Xm,searchAll:tW,searchAllToMap:rW,iterateDBI:nW,endsWith:sW,contains:iW,greaterThanCompare:oW,greaterThanEqualCompare:aW,lessThanCompare:cW,lessThanEqualCompare:uW,pushResults:Ki}});var Jo=T((wce,lI)=>{"use strict";var ti=$e(),Nce=V(),Br=Dr(),B_=ht(),dt=Ir().LMDB_ERRORS_ENUM,yce=J(),lW=M(),H_=jm(),{parseRow:_W}=H_,Ice=require("lmdb"),{OVERFLOW_MARKER:sI,MAX_SEARCH_KEY_LENGTH:dW}=B_;function iI(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(iI,"iterateFullIndex");function qc(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(qc,"iterateRangeBetween");function Wi(e,t,r,n){let s=e.database||e,i=ti.openDBI(s,r);i[B_.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 oI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(sI)){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[B_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(oI,"getOverflowCheck");function fW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return Wi(e,t,t,(o,c,u)=>(x_(r),r=Gc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>_W(_.value,r))))}a(fW,"searchAll");function EW(e,t,r,n=!1,s=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);x_(r),r=Gc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of iI(e,t,t,n,s,i))o.set(c,H_.parseRow(u,r));return o}a(EW,"searchAllToMap");function hW(e,t,r=!1,n=void 0,s=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(dt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=iI(e,void 0,t,r,n,s),c=o.transaction,u=oI(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(hW,"iterateDBI");function mW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(mW,"countAll");function pW(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=Br.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(pW,"equals");function SW(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(SW,"count");function TW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Wi(e,null,r,(c,u)=>{n=Br.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(TW,"startsWith");function gW(e,t,r,n,s=!1,i=void 0,o=void 0){return aI(e,t,r,n,s,i,o,!0)}a(gW,"endsWith");function aI(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=oI(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(sI)?_.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))?_[B_.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(aI,"contains");function RW(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),qc(e,t,r,n,u,s,i,o,!0,!1)}a(RW,"greaterThan");function AW(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),qc(e,t,r,n,u,s,i,o,!1,!1)}a(AW,"greaterThanEqual");function OW(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),qc(e,t,r,u,n,s,i,o,!1,!0)}a(OW,"lessThan");function bW(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),qc(e,t,r,u,n,s,i,o,!1,!1)}a(bW,"lessThanEqual");function NW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Br.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=Br.convertKeyValueToWrite(n),s=Br.convertKeyValueToWrite(s),n>s)throw new Error(dt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qc(e,t,r,n,s,i,o,c)}a(NW,"between");function yW(e,t,r,n){Br.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(x_(r),r=Gc(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=H_.parseRow(c,r)),o}a(yW,"searchByHash");function IW(e,t,r){Br.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(IW,"checkHashExists");function wW(e,t,r,n,s=[]){return uI(e,t,r,n,s),cI(e,t,r,n,s).map(i=>i[1])}a(wW,"batchSearchByHash");function CW(e,t,r,n,s=[]){uI(e,t,r,n,s);let i=new Map;for(let[o,c]of cI(e,t,r,n,s))i.set(o,c);return i}a(CW,"batchSearchByHashToMap");function cI(e,t,r,n,s=[]){return Wi(e,t,t,(i,o,c)=>{r=Gc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,H_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(cI,"batchHashSearch");function uI(e,t,r,n,s){if(Br.validateEnv(e),t===void 0)throw new Error(dt.HASH_ATTRIBUTE_REQUIRED);if(x_(r),n==null)throw new Error(dt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(dt.IDS_MUST_BE_ITERABLE)}a(uI,"initializeBatchSearchByHash");function x_(e){if(!Array.isArray(e))throw e===void 0?new Error(dt.FETCH_ATTRIBUTES_REQUIRED):new Error(dt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(x_,"validateFetchAttributes");function ri(e,t,r){if(Br.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>dW)throw new Error(dt.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function Gc(e,t){return t.length===1&&lW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(Gc,"setGetWholeRowAttributes");lI.exports={searchAll:fW,searchAllToMap:EW,count:SW,countAll:mW,equals:pW,startsWith:TW,endsWith:gW,contains:aI,searchByHash:yW,setGetWholeRowAttributes:Gc,batchSearchByHash:wW,batchSearchByHashToMap:CW,checkHashExists:IW,iterateDBI:hW,greaterThan:RW,greaterThanEqual:AW,lessThan:OW,lessThanEqual:bW,between:NW}});var Xo=T((Lce,hI)=>{var _I=require("lodash"),dI=et(),fe=require("joi"),LW=J(),{hdb_schema_table:kc,checkValidTable:fI,hdb_table:EI,hdb_database:F_}=Kn(),{handleHDBError:DW,hdb_errors:MW}=Z(),{getDatabases:UW}=(ge(),ee(xe)),{HTTP_STATUS_CODES:PW}=MW,vW=fe.object({database:F_,schema:F_,table:EI,search_attribute:kc,search_value:fe.any().required(),get_attributes:fe.array().min(1).items(fe.alternatives(kc,fe.object())).optional(),desc:fe.bool(),limit:fe.number().integer().min(1),offset:fe.number().integer().min(0)}),BW=fe.object({database:F_,schema:F_,table:EI,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(kc,fe.object())).optional(),sort:fe.object({attribute:fe.alternatives(kc,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(kc,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()});hI.exports=function(e,t){let r=null;switch(t){case"value":r=dI.validateBySchema(e,vW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(fI("database",e.schema)),i(fI("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=dI.validateBySchema(e,BW);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=LW.checkGlobalSchemaTable(e.schema,e.table);if(s)return DW(new Error,s,PW.NOT_FOUND);let o=UW()[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 _=_I.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!_I.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 Zm=T((Mce,mI)=>{"use strict";var HW=$e(),xW=Xo(),{getSchemaPath:FW}=We();mI.exports=qW;function qW(e){let t=xW(e,"hashes");if(t)throw t;let r=FW(e.schema,e.table);return HW.openEnvironment(r,e.table)}a(qW,"initialize")});var ep=T((Pce,pI)=>{"use strict";var GW=Jo(),kW=Zm();pI.exports=VW;async function VW(e){let t=await kW(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return GW.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(VW,"lmdbGetDataByHash")});var jo=T((Bce,SI)=>{"use strict";var tp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};SI.exports=tp});var gI=T((Fce,TI)=>{"use strict";var xce=jo(),$W=Jo(),YW=Zm();TI.exports=KW;async function KW(e){let t=await YW(e),r=global.hdb_schema[e.schema][e.table];return $W.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(KW,"lmdbSearchByHash")});var Jn=T((Gce,RI)=>{"use strict";var rp=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}};RI.exports=rp});var q_=T((Vce,II)=>{"use strict";var Jt=Jo(),WW=$e(),QW=J(),Ee=ht(),Qi=M(),zW=Bi(),AI=Ir().LMDB_ERRORS_ENUM,{getSchemaPath:JW}=We(),As=Qi.SEARCH_WILDCARDS;async function XW(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=yI(e,n.hash_attribute,r,t);return bI(e,s,n.hash_attribute,r)}a(XW,"prepSearch");async function bI(e,t,r,n){let s=JW(e.schema,e.table),i=await WW.openEnvironment(s,e.table),o=NI(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(jW(e,r)===!1){let l=e.search_attribute;if(l===r)return n?OI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?OI(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(bI,"executeSearch");function NI(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(NI,"searchByType");function OI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(OI,"createMapFromIterable");function jW(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(jW,"checkToFetchMore");function yI(e,t,r,n){if(QW.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),As.indexOf(s)>-1)return r===!0?Ee.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ee.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(As[0])<0&&s.indexOf(As[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(As.indexOf(i)>=0&&As.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Ee.SEARCH_TYPES.CONTAINS;if(As.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ee.SEARCH_TYPES.ENDS_WITH;if(As.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Ee.SEARCH_TYPES.STARTS_WITH;if(s.includes(As[0])||s.includes(As[1]))return Ee.SEARCH_TYPES.EQUALS;throw new Error(AI.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(AI.UNKNOWN_SEARCH_TYPE)}}a(yI,"createSearchTypeFromSearchObject");II.exports={executeSearch:bI,createSearchTypeFromSearchObject:yI,prepSearch:XW,searchByType:NI}});var CI=T((Kce,wI)=>{"use strict";var Yce=Jn(),ZW=Xo(),eQ=J(),tQ=M(),rQ=q_();wI.exports=nQ;function nQ(e,t){if(!eQ.isEmpty(t)&&tQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=ZW(e,"value");if(n)throw n;return rQ.prepSearch(e,t,!0)}a(nQ,"lmdbGetDataByValue")});var Vc=T((zce,LI)=>{"use strict";var Qce=Jn(),sQ=Xo(),iQ=J(),oQ=M(),aQ=q_();LI.exports=cQ;async function cQ(e,t){if(!iQ.isEmpty(t)&&oQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=sQ(e,"value");if(n)throw n;return aQ.prepSearch(e,t,!1)}a(cQ,"lmdbSearchByValue")});var MI=T((jce,DI)=>{"use strict";var Xce=ht(),np=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}},sp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},ip=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};DI.exports={SearchByConditionsObject:np,SearchCondition:sp,SortAttribute:ip}});var HI=T((rue,BI)=>{"use strict";var eue=MI().SearchByConditionsObject,uQ=Jn(),lQ=Xo(),op=Jo(),G_=ht(),{Resource:tue}=(yn(),ee(ap)),vI=q_(),_Q=jm(),dQ=require("lodash"),{getSchemaPath:fQ}=We(),UI=$e(),{handleHDBError:EQ,hdb_errors:hQ}=Z(),{HTTP_STATUS_CODES:mQ}=hQ,pQ=1e8;BI.exports=SQ;async function SQ(e){let t=lQ(e,"conditions");if(t)throw EQ(t,t.message,mQ.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=fQ(e.schema,e.table),n=await UI.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)UI.openDBI(n,_.search_attribute);let i=dQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===G_.SEARCH_TYPES.EQUALS?_.estimated_count=op.count(n,_.search_attribute,_.search_value):l===G_.SEARCH_TYPES.CONTAINS||l===G_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=pQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await PI(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(vI.filterByType),d=l.length,f=op.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=>_Q.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await PI(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=op.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(SQ,"lmdbSearchByConditions");async function PI(e,t,r,n){let s=new uQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===G_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,vI.searchByType(e,s,i,n).map(o=>o.value)}a(PI,"executeConditionSearch")});var $c=T((sue,xI)=>{"use strict";var TQ=M().OPERATIONS_ENUM,cp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=TQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};xI.exports=cp});var up=T((oue,KI)=>{"use strict";var kI=Jn(),VI=$c(),$I=Vc(),YI=Fc(),ar=M(),FI=J(),qI=$e(),{getTransactionAuditStorePath:gQ,getSchemaPath:RQ}=We(),GI=V();KI.exports=AQ;async function AQ(e){try{if(FI.isEmpty(global.hdb_schema[e.schema])||FI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await OQ(e),await bQ(e);let t=RQ(e.schema,e.table);try{await qI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")GI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gQ(e.schema,e.table);await qI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")GI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(AQ,"lmdbDropTable");async function OQ(e){let t=new kI(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 $I(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 VI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await YI(s)}a(OQ,"deleteAttributesFromSystem");async function bQ(e){let t=new kI(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 $I(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new VI(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await YI(s)}catch(i){throw i}}a(bQ,"dropTableFromSystem")});var QI=T((cue,WI)=>{"use strict";var NQ=require("fs-extra"),yQ=Jn(),IQ=jo(),wQ=$c(),CQ=up(),LQ=Fc(),DQ=ep(),MQ=Vc(),Os=M(),{getSchemaPath:UQ}=We(),{handleHDBError:PQ,hdb_errors:vQ}=Z(),{HDB_ERROR_MSGS:BQ,HTTP_STATUS_CODES:HQ}=vQ;WI.exports=xQ;async function xQ(e){let t;try{t=await FQ(e.schema);let r=new yQ(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await MQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await CQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new wQ(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await LQ(s);let i=UQ(t);await NQ.remove(i)}catch(r){throw r}}a(xQ,"lmdbDropSchema");async function FQ(e){let t=new IQ(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await DQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw PQ(new Error,BQ.SCHEMA_NOT_FOUND(e),HQ.NOT_FOUND,void 0,void 0,!0);return n}a(FQ,"validateDropSchema")});var _p=T((lue,zI)=>{"use strict";var lp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};zI.exports=lp});var XI=T((fue,JI)=>{"use strict";var qQ=require("fs-extra"),k_=$e(),{getTransactionAuditStorePath:GQ}=We(),dp=ht(),due=_p();JI.exports=kQ;async function kQ(e){let t;try{let r=GQ(e.schema,e.table);await qQ.mkdirp(r),t=await k_.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{k_.createDBI(t,dp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),k_.createDBI(t,dp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),k_.createDBI(t,dp.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 tw=T((hue,ew)=>{"use strict";var fp=M(),jI=$e(),VQ=Fo(),{getSystemSchemaPath:$Q,getSchemaPath:YQ}=We(),KQ=Bi(),WQ=m_(),Ep=h_(),QQ=V(),zQ=XI(),mp=KQ.hdb_table,ZI=[];for(let e=0;e<mp.attributes.length;e++)ZI.push(mp.attributes[e].attribute);ew.exports=JQ;async function JQ(e,t){let r=YQ(t.schema,t.table),n=new Ep(t.schema,t.table,fp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Ep(t.schema,t.table,fp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ep(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jI.createEnvironment(r,t.table),e!==void 0){let o=await jI.openEnvironment($Q(),fp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await VQ.insertRecords(o,mp.hash_attribute,ZI,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await hp(n),await hp(s),await hp(i)}await zQ(t)}catch(o){throw o}}a(JQ,"lmdbCreateTable");async function hp(e){try{await WQ(e)}catch(t){QQ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(hp,"createAttribute")});var nw=T((pue,rw)=>{"use strict";var XQ=Ic(),jQ=Mc(),ZQ=P_(),Yc=M(),ez=Fo().updateRecords,tz=$e(),{getSchemaPath:rz}=We(),nz=Hc(),sz=V();rw.exports=iz;async function iz(e){try{let{schema_table:t,attributes:r}=XQ(e);jQ(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 n=await ZQ(e.hdb_auth_header,t,r),s=rz(e.schema,e.table),i=await tz.openEnvironment(s,e.table),o=await ez(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await nz(e,o)}catch(c){sz.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(iz,"lmdbUpdateRecords")});var iw=T((Tue,sw)=>{"use strict";var oz=M().OPERATIONS_ENUM,pp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=oz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sw.exports=pp});var aw=T((Aue,ow)=>{"use strict";var Rue=iw(),az=Ic(),cz=Mc(),uz=P_(),Kc=M(),lz=Fo().upsertRecords,_z=$e(),{getSchemaPath:dz}=We(),fz=Hc(),Ez=V(),{handleHDBError:hz,hdb_errors:mz}=Z();ow.exports=pz;async function pz(e){let t;try{t=az(e)}catch(u){throw hz(u,u.message,mz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;cz(e,n,r.hash_attribute),e.schema!==Kc.SYSTEM_SCHEMA_NAME&&(n.includes(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Kc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await uz(e.hdb_auth_header,r,n),i=dz(e.schema,e.table),o=await _z.openEnvironment(i,e.table),c=await lz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await fz(e,c)}catch(u){Ez.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(pz,"lmdbUpsertRecords")});var uw=T((bue,cw)=>{"use strict";var Sp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};cw.exports=Sp});var _w=T((yue,lw)=>{"use strict";var Tp=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}};lw.exports=Tp});var Ew=T((Cue,fw)=>{"use strict";var gp=$e(),{getTransactionAuditStorePath:Sz}=We(),wue=uw(),Wc=ht(),Tz=J(),dw=_w(),gz=require("util").promisify,Rz=gz(setTimeout),Az=1e4,Oz=100;fw.exports=bz;async function bz(e){let t=Sz(e.schema,e.table),r=await gp.openEnvironment(t,e.table,!0),n=gp.listDBIs(r);gp.initializeDBIs(r,Wc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new dw;do s=await Nz(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 Rz(Oz);while(s.transactions_deleted>0);return i}a(bz,"deleteAuditLogsBefore");async function Nz(e,t){let r=new dw;try{let n=e.dbis[Wc.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[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Tz.isEmpty(c)||(s=e.dbis[Wc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=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>Az)break}return await s,r}catch(n){throw n}}a(Nz,"deleteTransactions")});var mw=T((Due,hw)=>{"use strict";var Rp=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};hw.exports=Rp});var Sw=T((Pue,pw)=>{"use strict";var yz=Jn(),Iz=$c(),Uue=mw(),Xn=M(),wz=J(),Ap=$e(),Cz=Bi(),Lz=Vc(),Dz=Fc(),{getSchemaPath:Mz}=We();pw.exports=Uz;async function Uz(e,t=!0){let r;e.schema===Xn.SYSTEM_SCHEMA_NAME?r=Cz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await vz(e),s=Mz(e.schema,e.table),i=await Ap.openEnvironment(s,e.table);return t===!0&&await Pz(e,i,r.hash_attribute),Ap.dropDBI(i,e.attribute),n}a(Uz,"lmdbDropAttribute");async function Pz(e,t,r){let n=Ap.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(Pz,"removeAttributeFromAllObjects");async function vz(e){let t=new yz(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 Lz(t)).filter(o=>o[Xn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(wz.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 Iz(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Dz(i)}a(vz,"dropAttributeFromSystem")});var bw=T((Hue,Ow)=>{"use strict";var Op=$e(),Zo=ht(),Bue=Dr(),bp=M(),Tw=J(),{getTransactionAuditStorePath:Bz}=We(),Hz=Jo(),V_=Wo(),xz=V();Ow.exports=Fz;async function Fz(e){let t=Bz(e.schema,e.table),r=await Op.openEnvironment(t,e.table,!0),n=Op.listDBIs(r);Op.initializeDBIs(r,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case bp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gw(r,e.search_values);case bp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Gz(r,e.search_values,s);case bp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return qz(r,e.search_values);default:return gw(r)}}a(Fz,"readAuditLog");function gw(e,t=[0,Date.now()]){Tw.isEmpty(t[0])&&(t[0]=0),Tw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zo.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 V_,s))}a(gw,"searchTransactionsByTimestamp");function qz(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[Zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Aw(e,i))}return Object.fromEntries(r)}a(qz,"searchTransactionsByUsername");function Gz(e,t,r){let n=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);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=Aw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);Rw(u,"records",r,l,o),Rw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Gz,"searchTransactionsByHashValues");function Rw(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 V_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new V_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(Rw,"loopRecords");function Aw(e,t){let r=[];try{let n=e.dbis[Zo.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 V_,i);r.push(o)}}catch(i){xz.warn(i)}return r}catch(n){throw n}}a(Aw,"batchSearchTransactions")});var yw=T((Gue,Nw)=>{"use strict";var{getSchemaPath:Fue}=We(),que=$e(),{database:kz}=(ge(),ee(xe));Nw.exports={writeTransaction:Vz};async function Vz(e,t,r){return kz({database:e,table:t}).transaction(r)}a(Vz,"writeTransaction")});var Lw=T((Vue,Cw)=>{"use strict";var{getSchemaPath:Iw}=We(),ww=$e();Cw.exports={flush:$z,resetReadTxn:Yz};async function $z(e,t){return(await ww.openEnvironment(Iw(e,t),t.toString())).flushed}a($z,"flush");async function Yz(e,t){try{(await ww.openEnvironment(Iw(e,t),t.toString())).resetReadTxn()}catch{}}a(Yz,"resetReadTxn")});var Pw=T((Yue,Uw)=>{"use strict";var{Readable:Kz}=require("stream"),{getDatabases:Wz}=(ge(),ee(xe)),{readSync:Qz,openSync:zz,createReadStream:Dw}=require("fs"),{open:Jz}=require("lmdb"),Mw=i_(),Xz=a_(),{AUDIT_STORE_OPTIONS:jz}=(Pi(),ee(vw)),{INTERNAL_DBIS_NAME:Zz,AUDIT_STORE_NAME:eJ}=ht();Uw.exports=rJ;var Np=32768,tJ=100;async function rJ(e){let t=e.database||e.schema||"data",r=Wz()[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=Jz({noSync:!0,maxDbs:Xz.MAX_DBS}),f,E=d.openDB(Zz,new Mw(!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:F,version:P,value:Q}of K.getRange({transaction:h,versions:K.useVersions}))f=B.put(F,Q,P),p++%tJ===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,F=new Mw(!K,K);await S(I,F)}e.include_audit&&await S(eJ,Object.assign({},jz)),await f;let A=Dw(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(Np);Qz(c,_,0,Np),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Dw(null,{fd:c,start:Np}),f=new Kz.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(rJ,"getBackup")});var xw=T((Wue,Hw)=>{"use strict";var nJ=V(),{handleHDBError:sJ}=Z(),iJ=Eb(),oJ=m_(),aJ=Wm(),cJ=Qy(),uJ=Fc(),lJ=ep(),_J=gI(),dJ=CI(),fJ=Vc(),EJ=HI(),hJ=QI(),mJ=tw(),pJ=nw(),SJ=aw(),TJ=Ew(),gJ=up(),RJ=Sw(),AJ=bw(),OJ=yw(),Bw=Lw(),bJ=Pw(),yp=class extends iJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return EJ(t)}async getDataByHash(t){return await lJ(t)}async searchByHash(t){return await _J(t)}async getDataByValue(t,r){return await dJ(t,r)}async searchByValue(t){return await fJ(t)}async createSchema(t){return await cJ(t)}async dropSchema(t){return await hJ(t)}async createTable(t,r){return await mJ(t,r)}async dropTable(t){return await gJ(t)}async createAttribute(t){return await oJ(t)}async createRecords(t){return await aJ(t)}async updateRecords(t){return await pJ(t)}async upsertRecords(t){try{return await SJ(t)}catch(r){throw sJ(r,null,null,nJ.ERR,r)}}async deleteRecords(t){return await uJ(t)}async dropAttribute(t){return await RJ(t)}async deleteAuditLogsBefore(t){return await TJ(t)}async readAuditLog(t){return await AJ(t)}writeTransaction(t,r,n){return OJ.writeTransaction(t,r,n)}flush(t,r){return Bw.flush(t,r)}resetReadTxn(t,r){return Bw.resetReadTxn(t,r)}getBackup(t){return bJ(t)}};Hw.exports=yp});function wJ(){IJ=setInterval(function(){for(let e of Ip)if(e.stale){let t=e[Re]?.url;Fw.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},yJ).unref()}var wp,Fw,NJ,Ip,zi,$_,yJ,IJ,Cp=Ae(()=>{wp=v(Dr()),Fw=v(V());yn();NJ=100,Ip=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(),Ip.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Ip.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,wp.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<NJ>>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=[]}},$_=class extends zi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,wp.getNextMonotonicTime)())}getReadTxn(){}},yJ=3e4;a(wJ,"startMonitoringTxns");wJ()});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 qw,Ji=Ae(()=>{qw=require("../../index");yn();Cp();a(Qe,"transaction");(0,qw._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 zw={};Ve(zw,{ResourceBridge:()=>Mp});function Up({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 kw(e,t){let r=jn(e),n=Up(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&&K_(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||LJ,r=Mn()[t];if(!r)throw(0,Dn.handleHDBError)(new Error,CJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Vw(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*$w(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 Yw,Y_,Dn,Kw,Ww,Un,Lp,Dp,Qw,CJ,LJ,DJ,MJ,Gw,Mp,Jw=Ae(()=>{"use strict";Yw=v(xw()),Y_=v(Xo()),Dn=v(Z());ge();Kw=v(Ic()),Ww=v(Mc()),Un=v(M()),Lp=v(Rs()),Dp=v(Ln()),Qw=v(J());Ji();W_();({HDB_ERROR_MSGS:CJ}=Dn.hdb_errors),LJ="data",DJ=1e4,MJ=10,Mp=class extends Yw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Gw=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,Y_.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:Up(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 Qc({database:t.schema,table:null}),Lp.signalSchemaChange(new Dp.SchemaEventMsg(process.pid,Un.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Pp(t.schema),Lp.signalSchemaChange(new Dp.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,Gw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Kw.default)(t);(0,Ww.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=K_(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 Vw(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,Qw.async_set_timeout)(MJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%DJ===0&&await _();return u.length>0&&await _(),s?Vw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Y_.default)(t,"hashes");if(r)throw r;return kw(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of kw(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,Y_.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:Up(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 $w(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return $w(r,t.search_values?.[0],t.search_values?.[1])}}};a(Up,"getSelect");a(kw,"getRecords");a(jn,"getTable");a(Vw,"createDeleteResponse");a($w,"groupRecordsInHistory")});var Cn=T((ale,Xw)=>{"use strict";var{ResourceBridge:UJ}=(Jw(),ee(zw)),PJ=j();PJ.initSync();var Q_;function vJ(){return Q_||(Q_=new UJ,Q_)}a(vJ,"getBridge");Xw.exports=vJ()});var tC=T((ule,eC)=>{"use strict";var jw=require("lodash"),zc=require("mathjs"),BJ=require("jsonata"),Zw=J();eC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?jw.uniqWith(e,jw.isEqual):e,searchJSON:HJ,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,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Jc,"aggregateFunction");function HJ(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(Zw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Zw.isEmpty(this.__ala__.res[r])){let n=BJ(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(HJ,"searchJSON")});var nC=T((_le,rC)=>{"use strict";var pt=require("moment"),vp="YYYY-MM-DDTHH:mm:ss.SSSZZ";pt.suppressDeprecationWarnings=!0;rC.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(vp),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(vp),offset_utc:(e,t)=>pt(e).utc().utcOffset(t).format(vp)}});var aC=T((dle,oC)=>{"use strict";var xJ=require("@turf/area"),FJ=require("@turf/length"),qJ=require("@turf/circle"),GJ=require("@turf/difference"),kJ=require("@turf/distance"),VJ=require("@turf/boolean-contains"),$J=require("@turf/boolean-equal"),YJ=require("@turf/boolean-disjoint"),KJ=require("@turf/helpers"),sC=M(),me=J(),bs=V();oC.exports={geoArea:WJ,geoLength:QJ,geoCircle:zJ,geoDifference:JJ,geoDistance:iC,geoNear:XJ,geoContains:jJ,geoEqual:ZJ,geoCrosses:e2,geoConvert:t2};function WJ(e){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return xJ.default(e)}catch(t){return bs.trace(t,e),NaN}}a(WJ,"geoArea");function QJ(e,t){if(me.isEmpty(e))return NaN;typeof e=="string"&&(e=me.autoCastJSON(e));try{return FJ.default(e,{units:t||"kilometers"})}catch(r){return bs.trace(r,e),NaN}}a(QJ,"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 qJ.default(e,t,{units:r||"kilometers"})}catch(n){return bs.trace(n,e,t),NaN}}a(zJ,"geoCircle");function JJ(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 GJ(e,t)}catch(r){return bs.trace(r,e,t),NaN}}a(JJ,"geoDifference");function iC(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 bs.trace(n,e,t),NaN}}a(iC,"geoDistance");function XJ(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 iC(e,t,n)<=r}catch(s){return bs.trace(s,e,t),!1}}a(XJ,"geoNear");function jJ(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 VJ.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(jJ,"geoContains");function ZJ(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 $J.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(ZJ,"geoEqual");function e2(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!YJ.default(e,t)}catch(r){return bs.trace(r,e,t),!1}}a(e2,"geoCrosses");function t2(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(sC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=me.autoCastJSON(e)),KJ[t](e,r)}a(t2,"geoConvert")});var z_=T((Ele,cC)=>{var Xi=tC(),Hr=nC(),Zn=aC();cC.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=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.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 dC=T((hle,_C)=>{"use strict";var Xc=require("lodash"),cr=require("alasql");cr.options.cache=!1;var r2=z_(),uC=require("clone"),J_=require("recursive-iterator"),ue=V(),we=J(),ea=Cn(),n2=M(),{hdb_errors:s2}=Z(),{getDatabases:lC}=(ge(),ee(xe)),i2="IS NULL",Pn="There was a problem performing this search. Please check the logs and try again.";r2(cr);var Bp=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(uC(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 n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=lC()[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(n2.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&&Xc.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(uC(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(i2)>-1&&this.tables.forEach(s=>{let i={columnid:lC()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Xc.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 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]=[...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 ea.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 ea.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 ea.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=Xc.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=Xc.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 ea.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(s2.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 ea.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)}};_C.exports=Bp});var en=T((ple,fC)=>{"use strict";var o2=db();fC.exports={searchByConditions:c2,searchByHash:u2,searchByValue:l2,search:_2};var Hp=Cn(),{transformReq:xp}=J(),a2=dC();async function c2(e){return xp(e),Hp.searchByConditions(e)}a(c2,"searchByConditions");async function u2(e){xp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Hp.searchByHash(e))r&&t.push(r);return t}a(u2,"searchByHash");async function l2(e){xp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Hp.searchByValue(e))t.push(r);return t}a(l2,"searchByValue");function _2(e,t){try{let r=new o2(e);r.validate(),new a2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(_2,"search")});var X_=T((Tle,EC)=>{"use strict";var d2=Cn();EC.exports={writeTransaction:f2};function f2(e,t,r){return d2.writeTransaction(e,t,r)}a(f2,"writeTransaction")});var SC=T((Ale,pC)=>{"use strict";var E2=en(),h2=Xs(),hC=V(),m2=tn(),Rle=X_(),p2=require("clone"),qp=require("alasql"),S2=z_(),mC=require("util"),T2=mC.promisify(h2.getTableSchema),g2=mC.promisify(E2.search),R2=M(),Fp=J();S2(qp);pC.exports={update:O2};var A2="There was a problem performing this update. Please check the logs and try again.";async function O2({statement:e,hdb_user:t}){let r=await T2(e.table.databaseid,e.table.tableid),n=b2(e.columns);Fp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=p2(s),c=Fp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=qp.parse(u).statements[0],l=await g2(_),d=N2(n,l);return y2(o,d,t)}a(O2,"update");function b2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=qp.compile(`SELECT ${r.expression.toString()} AS [${R2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw hC.error(t),new Error(A2)}}a(b2,"createUpdateRecord");function N2(e,t){return Fp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(N2,"buildUpdateRecords");async function y2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await m2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){hC.error(`Error delete new_attributes from update response: ${i}`)}return s}a(y2,"updateRecords")});var gC=T((yle,TC)=>{var I2=require("alasql"),w2=en(),C2=V(),L2=Cn(),kp=require("util"),Gp=J(),D2=M(),M2=Xs(),ble=X_(),Nle=tn(),U2="record",P2="successfully deleted",v2=kp.callbackify(F2),B2=kp.promisify(w2.search),H2=kp.promisify(M2.getTableSchema);TC.exports={convertDelete:v2};function x2(e){return`${e.deleted_hashes.length} ${U2}${e.deleted_hashes.length===1?"":"s"} ${P2}`}a(x2,"generateReturnMessage");async function F2({statement:e,hdb_user:t}){let r=await H2(e.table.databaseid,e.table.tableid);Gp.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Gp.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=I2.parse(o).statements[0],u={operation:D2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await B2(c);let _=await L2.deleteRecords(u);return Gp.isEmptyOrZeroLength(_.message)&&(_.message=x2(_)),delete _.txn_time,_}catch(_){throw C2.error(_),_.hdb_code?_.message:_}}a(F2,"convertDelete")});var NC=T((wle,bC)=>{"use strict";var q2=xi(),{hdb_errors:RC}=Z(),{getDatabases:AC}=(ge(),ee(xe));bC.exports={checkSchemaExists:OC,checkSchemaTableExists:G2,schema_describe:q2};async function OC(e){if(!AC()[e])return RC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OC,"checkSchemaExists");async function G2(e,t){let r=await OC(e);if(r)return r;if(!AC()[e][t])return RC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(G2,"checkSchemaTableExists")});var jc=T((Lle,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 ru={};Ve(ru,{addAnalyticsListener:()=>tu,recordAction:()=>xr,recordActionBinary:()=>nn,setAnalyticsEnabled:()=>V2});function V2(e){vC=e}function xr(e,t,r,n,s){if(!vC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=ed.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},ed.set(i,o)}j_||$2()}function nn(e,t,r,n,s){xr(!!e,t,r,n,s)}function tu(e){xC.push(e)}function $2(){j_=performance.now(),setTimeout(async()=>{let e=performance.now()-j_;j_=0;let t=[],r={time:Date.now(),period:e,threadId:ji.threadId,metrics:t};for(let[s,i]of ed){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 FC){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 qC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ji.threadId,byThread:!0,...n});for(let s of xC)s(t);ed=new Map,ji.parentPort?ji.parentPort.postMessage({type:HC,report:r}):VC({report:r})},BC).unref()}async function Y2(e,t=6e4){let r=Yp(),n=GC(),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:F,count:P,total:Q,distribution:Y,threads:z,...re}=I;P||(P=1);let Ie=F+(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 qC()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:w,total:B,distribution:K,threads:F,...P}=h;F=F.filter(Q=>Q);for(let Q in P){if(typeof h[Q]!="number")continue;let Y=0;for(let z of F){let re=z[Q];typeof re=="number"&&(Y+=re)}h[Q]=Y}h.count=F.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 FC){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[F,P,Q,Y,z,re,Ie,ne,ct]=I;Object.assign(S,{p1:F,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,Z_.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,Z_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-yC,active:E-IC,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}yC=f,IC=E}async function wC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Yp(){return CC||(CC=_t({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function GC(){return LC||(LC=_t({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Q2(){kC=!0;let e=(0,eu.get)($p.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Y2(BC,e),await wC(Yp(),K2),await wC(GC(),W2)},Math.min(e/2,2147483647)).unref()}function VC(e,t){let r=e.report;r.threadId=t?.threadId||ji.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(DC+=n.mean*n.count);r.totalBytesProcessed=DC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(MC.get(t))}),MC.set(t,t.performance.eventLoopUtilization())),r.id=(0,Z_.getNextMonotonicTime)(),Yp().primaryStore.put(r.id,r),kC||Q2(),z2&&($C=X2(r))}async function X2(e){if(await $C,!ni){let r=(0,Zc.dirname)((0,PC.getLogFilePath)());try{ni=await(0,Vp.open)((0,Zc.join)(r,"analytics.log"),"r+")}catch{ni=await(0,Vp.open)((0,Zc.join)(r,"analytics.log"),"w+")}}let t=(await ni.stat()).size;if(t>J2){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
|
|
6
|
+
`)},ik="certificate.pem",ok="privateKey.pem",ak="ca.pem";EO.exports={CERTIFICATE_VALUES:sk,CERTIFICATE_PEM_NAME:ik,PRIVATEKEY_PEM_NAME:ok,CA_PEM_NAME:ak}});var tt=T((zie,mO)=>{"use strict";var tr=require("validate.js");tr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||tr.validators.type.checks[t](e)?null:` must be a '${t}' value`};tr.validators.type.checks={Object:function(e){return tr.isObject(e)&&!tr.isArray(e)},Array:tr.isArray,Integer:tr.isInteger,Number:tr.isNumber,String:tr.isString,Date:tr.isDate,Boolean:function(e){return typeof e=="boolean"}};tr.validators.hasValidFileExt=function(e,t){return tr.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};mO.exports={validateObject:ck,validateObjectAsync:uk,validateBySchema:lk};function ck(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=tr(e,t,{format:"flat"});return r?new Error(r):null}a(ck,"validateObject");async function uk(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await tr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(uk,"validateObjectAsync");function lk(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lk,"validateBySchema")});var fh=T((jie,RO)=>{"use strict";var gO=require("fs-extra"),ue=require("joi"),_k=require("os"),{boolean:ve,string:en,number:Ut,array:dh}=ue.types(),{totalmem:pO}=require("os"),yi=require("path"),dk=Y(),ql=J(),Xie=hO(),SO=M(),fk=tt(),TO="log",Ek="components",hk="Invalid logging.rotation.maxSize unit. Available units are G, M or K",mk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",pk="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'",Tk="rootPath config parameter is undefined",gk="clustering.enabled config parameter is undefined",Ii=Ut.min(0).required(),Gl=dh.items({host:en.required(),port:Ii}).empty(null),kn;RO.exports={configValidator:Rk,routesValidator:Ik,route_constraints:Gl};function Rk(e){if(kn=e.rootPath,ql.isEmpty(kn))throw Tk;let t=ve.required(),r=Ut.min(0).max(1e3).empty(null).default(yk),n=en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nc),s=en.optional().empty(null),i=en.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(nc),c=ue.custom(Ok).empty(null).default(nc),u=e.clustering?.enabled;if(ql.isEmpty(u))throw gk;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:Ii,routes:Gl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:Ii}).required()}).required(),network:ue.object({port:Ii}).required()}).required(),leafServer:ue.object({network:ue.object({port:Ii,routes:Gl}).required(),streams:ue.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:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:ve.optional(),databaseLevel:ve.optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ve.required(),verify:ve.optional()}),user:en.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:ve.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:ve,cacheTTL:Ut.required(),enableSessions:ve}),analytics:ue.object({aggregatePeriod:Ut}),componentsRoot:n.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:ve,logSuccessful:ve}),file:ve.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:ve.optional(),compress:ve.optional(),interval:en.custom(Nk).optional().empty(null),maxSize:en.custom(bk).optional().empty(null),path:en.optional().empty(null).default(nc)}).required(),root:n,stdStreams:ve.required(),auditLog:ve.required()}).required(),operationsApi:ue.object({network:ue.object({cors:ve.optional(),corsAccessList:dh.optional(),headersTimeout:Ut.min(1).optional(),keepAliveTimeout:Ut.min(1).optional(),port:Ut.optional().empty(null),domainSocket:ue.optional().empty("hdb/operations-server").default(nc),securePort:Ut.optional().empty(null),timeout:Ut.min(1).optional()}).optional(),tls:ue.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:Ii,securePort:Ii,mtls:ue.alternatives([ve.optional(),ue.object({user:en.optional(),certificateAuthority:s,required:ve.optional()})])}).required(),webSocket:ve.optional(),requireAuthentication:ve.optional()}),http:ue.object({compressionThreshold:Ut.optional(),cors:ve.optional(),corsAccessList:dh.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:ue.object({writeAsync:ve.required(),overlappingSync:ve.optional(),caching:ve.optional(),compression:ve.optional(),noReadAhead:ve.optional(),path:c,prefetchWrites:ve.optional()}).required(),ignoreScripts:ve.optional(),tls:ue.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:en.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Rk,"configValidator");function Ak(e){return gO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Ak,"doesPathExist");function Ok(e,t){ue.assert(e,en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Ak(e);if(r)return t.message(r)}a(Ok,"validatePath");function bk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(hk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pk):e}a(bk,"validateRotationMaxSize");function Nk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(mk);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Sk):e}a(Nk,"validateRotationInterval");function yk(e,t){let r=t.state.path.join("."),n=_k.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||pO();return i=Math.round(Math.min(i,pO())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),dk.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(yk,"setDefaultThreads");function nc(e,t){let r=t.state.path.join(".");if(!ql.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(ql.isEmpty(kn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return yi.join(kn,Ek);case"logging.root":return yi.join(kn,TO);case"clustering.leafServer.streams.path":return yi.join(kn,"clustering","leaf");case"storage.path":let n=yi.join(kn,SO.LEGACY_DATABASES_DIR_NAME);return gO.existsSync(n)?n:yi.join(kn,SO.DATABASES_DIR_NAME);case"logging.rotation.path":return yi.join(kn,TO);case"operationsApi.network.domainSocket":return r==null?null:yi.join(kn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(nc,"setDefaultRoot");function Ik(e){let t=ue.object({routes:Gl});return fk.validateBySchema({routes:e},t)}a(Ik,"routesValidator")});var wi={};Ke(wi,{server:()=>ut});var AO,ut,rr=Re(()=>{AO=require("../../index"),ut={};(0,AO._assignPackageExport)("server",ut)});var Lr=T((toe,LO)=>{"use strict";var Dr=M(),Pt=J(),Ot=Y(),{configValidator:wk,routesValidator:OO}=fh(),nr=require("fs-extra"),Ck=require("yaml"),An=require("path"),Dk=require("is-number"),NO=require("properties-reader"),Lk=require("lodash"),{handleHDBError:Mk}=Z(),{HTTP_STATUS_CODES:Uk,HDB_ERROR_MSGS:kl}=wr(),eoe=require("minimist"),{server:Pk}=(rr(),ee(wi)),{DATABASES_PARAM_CONFIG:sc,CONFIG_PARAMS:Cr,CONFIG_PARAM_MAP:On}=Dr,vk="Unable to get config value because config is uninitialized",Bk="Config successfully initialized",Hk="Error backing up config file",xk="Empty parameter sent to getConfigValue",yO=An.join(Dr.PACKAGE_ROOT,"config","yaml",Dr.HDB_DEFAULT_CONFIG_FILE),Fk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",bO={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"},Vl,bt,$l;LO.exports={createConfigFile:qk,getDefaultConfig:Gk,getConfigValue:wO,initConfig:hh,flattenConfig:vo,updateConfigValue:CO,updateConfigObject:Vk,getConfiguration:Kk,setConfiguration:Wk,readConfigFile:ph,getClusteringRoutes:Qk,initOldConfig:DO,getConfigFromFile:zk,getConfigFilePath:Ci,addConfig:Jk,deleteConfigFromFile:Xk,getConfigObj:jk};function qk(e){let t=Ws(yO);Vl=vo(t.toJSON());let r;for(let o in e){let c=On[o.toLowerCase()];if(c===Cr.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){Ot.error(l)}}}r&&IO(t,r),mh(t);let n=t.toJSON();bt=vo(n);let s=t.getIn(["rootPath"]),i=An.join(s,Dr.HDB_CONFIG_FILE);nr.createFileSync(i),nr.writeFileSync(i,String(t)),Ot.trace(`Config file written to ${i}`)}a(qk,"createConfigFile");function IO(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Pt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(sc.TABLES))for(let i in n[s][sc.TABLES])for(let o in n[s][sc.TABLES][i]){let c=n[s][sc.TABLES][i][o],u=[Cr.DATABASES,s,sc.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=[Cr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Ot.error("Error parsing schemas CLI/env config arguments",n)}}a(IO,"setSchemasConfig");function Gk(e){if(Vl===void 0){let r=Ws(yO);Vl=vo(r.toJSON())}let t=On[e.toLowerCase()];if(t!==void 0)return Vl[t.toLowerCase()]}a(Gk,"getDefaultConfig");function wO(e){if(e==null){Ot.error(xk);return}if(bt===void 0){Ot.trace(vk);return}let t=On[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(wO,"getConfigValue");function Ci(e=Pt.getPropsFilePath()){let t=Pt.getEnvCliRootPath();return t?An.join(t,Dr.HDB_CONFIG_FILE):NO(e).get(Dr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ci,"getConfigFilePath");function hh(e=!1){if(bt===void 0||e){let t;if(!Pt.noBootFile()){t=Pt.getPropsFilePath();try{nr.accessSync(t,nr.constants.F_OK|nr.constants.R_OK)}catch(i){throw Ot.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ci(t),n;if(r.includes("config/settings.js"))try{DO(r);return}catch(i){if(i.code!==Dr.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ws(r)}catch(i){if(i.code===Dr.NODE_ERROR_CODES.ENOENT){Ot.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 Ot.error(i),new Error(`Error reading HarperDB config file at ${r}`)}kk(n,r),mh(n);let s=n.toJSON();if(Pk.config=s,bt=vo(s),bt.logging_rotation_rotate)for(let i in bO)bt[i]&&Ot.error(`Config ${bO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ot.trace(Bk)}}a(hh,"initConfig");function kk(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],An.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],An.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],An.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Ot.trace("Updating config file with missing config params"),nr.writeFileSync(t,String(e)))}a(kk,"checkForUpdatedConfig");function mh(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=wk(t);if(r.error)throw kl.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 Vk(e,t){bt===void 0&&(bt={});let r=On[e.toLowerCase()];if(r===void 0){Ot.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(Vk,"updateConfigObject");function CO(e,t,r=void 0,n=!1,s=!1,i=!1){bt===void 0&&hh();let o=wO(On.hdb_root),c=An.join(o,Dr.HDB_CONFIG_FILE),u=Ws(c),_;if(r===void 0&&e.toLowerCase()===Cr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=On[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=On[f.toLowerCase()];if(E===Cr.HTTP_SECUREPORT&&r[f]===bt[Cr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===Cr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===bt[Cr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===Cr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),S=Dr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];S&&S.startsWith("customFunctions")&&u.hasIn(S.split("_"))&&(E=S,h=S.split("_"));let p=Eh(E,r[f]);E==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],p)}catch(g){Ot.error(g)}}}_&&IO(u,_),mh(u);let l=u.getIn(["rootPath"]),d=An.join(l,Dr.HDB_CONFIG_FILE);n===!0&&$k(c,l),nr.writeFileSync(d,String(u)),s&&(bt=vo(u.toJSON())),Ot.trace(`Config parameter: ${e} updated with value: ${t}`)}a(CO,"updateConfigValue");function $k(e,t){try{let r=An.join(t,"backup",`${Dr.HDB_CONFIG_FILE}.bak`);nr.copySync(e,r),Ot.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ot.error(Hk),Ot.error(r)}}a($k,"backupConfigFile");var Yk=["databases"];function vo(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)),$l=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])&&!Yk.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;!Cr[u.toUpperCase()]&&On[u]&&(s[On[u].toLowerCase()]=o[c]),s[u]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(vo,"flattenConfig");function Eh(e,t){if(e===Cr.CLUSTERING_NODENAME||e===Cr.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(Dk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Pt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Pt.autoCast(t)}a(Eh,"castConfigValue");function Kk(){let e=Pt.getPropsFilePath(),t=Ci(e);return Ws(t).toJSON()}a(Kk,"getConfiguration");async function Wk(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return CO(void 0,void 0,s,!0),Fk}catch(i){throw typeof i=="string"||i instanceof String?Mk(i,i,Uk.BAD_REQUEST,void 0,void 0,!0):i}}a(Wk,"setConfiguration");function ph(){let e=Pt.getPropsFilePath();try{nr.accessSync(e,nr.constants.F_OK|nr.constants.R_OK)}catch(n){if(!Pt.noBootFile())throw Ot.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ci(e);return Ws(t).toJSON()}a(ph,"readConfigFile");function Ws(e){return Ck.parseDocument(nr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ws,"parseYamlDoc");function Qk(){let e=ph(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Pt.isEmptyOrZeroLength(t)?[]:t;let r=OO(t);if(r)throw kl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Pt.isEmptyOrZeroLength(n)?[]:n;let s=OO(n);if(s)throw kl.CONFIG_VALIDATION(s.message);if(!Pt.isEmptyOrZeroLength(n)&&!Pt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Pt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw kl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(Qk,"getClusteringRoutes");function DO(e){let t=NO(e);bt={};for(let r in On){let n=t.get(r.toUpperCase());if(Pt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=On[r].toLowerCase();s===Cr.LOGGING_ROOT?bt[s]=An.dirname(n):bt[s]=n}return bt}a(DO,"initOldConfig");function zk(e){let t=ph();return Lk.get(t,e.replaceAll("_","."))}a(zk,"getConfigFromFile");async function Jk(e,t){let r=Ws(Ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await nr.writeFile(Ci(),String(r))}a(Jk,"addConfig");function Xk(e){let t=Ci(Pt.getPropsFilePath()),r=Ws(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=An.join(n,Dr.HDB_CONFIG_FILE);nr.writeFileSync(s,String(r))}a(Xk,"deleteConfigFromFile");function jk(){return $l||(hh(),$l)}a(jk,"getConfigObj")});var j=T((noe,vO)=>{"use strict";var Sh=require("fs-extra"),Di=require("path"),MO=require("os"),Zk=require("properties-reader"),oc=Y(),ic=J(),ae=M(),Yl=Lr(),eV="Error initializing environment manager",Kl="BOOT_PROPS_FILE_PATH",UO=!1,tV={[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},ms={};vO.exports={BOOT_PROPS_FILE_PATH:Kl,getHdbBasePath:rV,setHdbBasePath:nV,get:PO,initSync:iV,setProperty:Ce,initTestEnvironment:oV};function rV(){return ms[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(rV,"getHdbBasePath");function nV(e){ms[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(nV,"setHdbBasePath");function PO(e){let t=Yl.getConfigValue(e);return t===void 0?ms[e]:t}a(PO,"get");function Ce(e,t){tV[e]&&(ms[e]=t),Yl.updateConfigObject(e,t)}a(Ce,"setProperty");function sV(){let e;try{e=ic.getPropsFilePath(),Sh.accessSync(e,Sh.constants.F_OK|Sh.constants.R_OK),UO=!0;let t=Zk(e);return ms[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),ms[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ms[Kl]=e,!0}catch{return oc.trace(`Environment manager found no properties file at ${e}`),!1}}a(sV,"doesPropFileExist");function iV(e=!1){try{(UO||sV()||ic.noBootFile())&&(Yl.initConfig(e),ms[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Yl.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){oc.error(eV),oc.error(t),console.error(t),process.exit(1)}}a(iV,"initSync");function oV(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");ms[Kl]=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,MO.userInfo()?MO.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,PO(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,ic.isEmpty(i)?!1:i),Ce(ae.CONFIG_PARAMS.HTTP_CORS,ic.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,ic.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 ${Kl}. Please check your boot props and settings files`;oc.fatal(r),oc.error(t)}}a(oV,"initTestEnvironment")});var Je=T((ioe,kO)=>{"use strict";var _c=M(),aV=J(),sr=j(),dc=require("path"),cV=require("minimist"),BO=require("fs-extra"),HO=require("lodash");sr.initSync();var{CONFIG_PARAMS:Qs,DATABASES_PARAM_CONFIG:ac,SYSTEM_SCHEMA_NAME:Wl}=_c,cc,uc,lc;function xO(){if(cc!==void 0)return cc;if(sr.getHdbBasePath()!==void 0)return cc=sr.get(Qs.STORAGE_PATH)||dc.join(sr.getHdbBasePath(),_c.DATABASES_DIR_NAME),cc}a(xO,"getBaseSchemaPath");function FO(){if(uc!==void 0)return uc;if(sr.getHdbBasePath()!==void 0)return uc=GO(Wl),uc}a(FO,"getSystemSchemaPath");function qO(){if(lc!==void 0)return lc;if(sr.getHdbBasePath()!==void 0)return lc=sr.get(_c.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dc.join(sr.getHdbBasePath(),_c.TRANSACTIONS_DIR_NAME),lc}a(qO,"getTransactionAuditStoreBasePath");function uV(e,t){let r=sr.get(Qs.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dc.join(qO(),e.toString())}a(uV,"getTransactionAuditStorePath");function GO(e,t){e=e.toString(),t=t&&t.toString();let r=sr.get(_c.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dc.join(xO(),e)}a(GO,"getSchemaPath");function lV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,cV(process.argv));let n=r[Qs.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!aV.isObject(n))throw o;i=n}for(let o of i){let c=o[Wl];if(!c)continue;let u=sr.get(Qs.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ac.PATH];if(_)return HO.set(u,[Wl,ac.TABLES,t,ac.PATH],_),sr.setProperty(Qs.DATABASES,u),_;let l=c?.[ac.PATH];if(l)return HO.set(u,[Wl,ac.PATH],l),sr.setProperty(Qs.DATABASES,u),l}}let s=r[Qs.STORAGE_PATH.toUpperCase()];if(s){if(!BO.pathExistsSync(s))throw new Error(s+" does not exist");let i=dc.join(s,e);return BO.mkdirsSync(i),sr.setProperty(Qs.STORAGE_PATH,s),i}return FO()}a(lV,"initSystemSchemaPaths");function _V(){cc=void 0,uc=void 0,lc=void 0}a(_V,"resetPaths");kO.exports={getBaseSchemaPath:xO,getSystemSchemaPath:FO,getTransactionAuditStorePath:uV,getTransactionAuditStoreBasePath:qO,getSchemaPath:GO,initSystemSchemaPaths:lV,resetPaths:_V}});var Mr=T((uoe,WO)=>{"use strict";var dV=wr().LMDB_ERRORS_ENUM,aoe=require("lmdb"),fV=Et(),coe=require("buffer").Buffer,{OVERFLOW_MARKER:VO,MAX_SEARCH_KEY_LENGTH:Ql}=fV,$O=["number","string","symbol","boolean","bigint"];function EV(e){if(e=e?.primaryStore||e,!e)throw new Error(dV.ENV_REQUIRED)}a(EV,"validateEnv");function hV(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(hV,"stringifyData");function mV(e){return e instanceof Date?e.valueOf():e}a(mV,"convertKeyValueToWrite");function pV(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if($O.includes(typeof e))return e.length>Ql?[e.slice(0,Ql)+VO]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if($O.includes(typeof i))i.length>Ql?r.push(i.slice(0,Ql)+VO):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(pV,"getIndexedValues");var zl=0,YO=0;function KO(){YO=Date.now()-performance.now()}a(KO,"adjustStartTime");KO();var SV=6e4;setInterval(KO,SV).unref();function TV(){let e=performance.now()+YO;return e>zl?(zl=e,e):(zl+=488e-6,zl)}a(TV,"getNextMonotonicTime");WO.exports={validateEnv:EV,stringifyData:hV,convertKeyValueToWrite:mV,getNextMonotonicTime:TV,getIndexedValues:pV}});var QO,bn,Th,fc=Re(()=>{QO=require("events"),bn=class extends QO.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={};Ke(Rh,{loadGQLSchema:()=>AV,start:()=>gh,startOnMainThread:()=>RV});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 p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let G=function(H){if(H.kind==="NonNullType"){let W=G(H.type);return W.nullable=!1,W}if(H.kind==="ListType")return{type:"array",elements:G(H.type)};let z={type:H.name?.value};return Object.defineProperty(z,"location",{value:H.loc.startToken}),z};a(G,"getProperty");let g=p.name.value,A=[],b={table:null,database:null,properties:A};f.set(g,b);for(let H of p.directives){if(H.name.value==="table"){for(let P of H.arguments)b[P.name.value]=P.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,E.push(b)}if(H.name.value==="sealed"&&(b.sealed=!0),H.name.value==="export"){b.export=!0;for(let P of H.arguments)P.name.value==="name"&&(b.export={name:P.value.value})}}let v=!1;for(let H of p.fields){let P=G(H.type);P.name=H.name.value,A.push(P);for(let z of H.directives)if(z.name.value==="primaryKey")v?console.warn("Can not define two attributes as a primary key"):(P.isPrimaryKey=!0,v=!0);else if(z.name.value==="indexed")P.indexed=!0;else if(z.name.value==="relationship"){let W={};for(let Q of z.arguments)W[Q.name.value]=Q.value.value;P.relationship=W}else if(z.name.value==="createdTime")P.assignCreatedTime=!0;else if(z.name.value==="updatedTime")P.assignUpdatedTime=!0;else if(z.name.value==="expiresAt")P.expiresAt=!0;else if(z.name.value==="allow"){let W=P.authorizedRoles=[];for(let Q of z.arguments)Q.name.value==="role"&&W.push(Q.value.value)}}b.type=g,g==="Query"&&(h=b)}function S(p){let g=f.get(p.type);g?(Object.defineProperty(p,"properties",{value:g.properties}),Object.defineProperty(p,"definition",{value:g})):p.type==="array"?S(p.elements):gV.includes(p.type)||(0,zO.getWorkerIndex)()===0&&console.error(`The type ${p.type} is unknown at line ${p.location.line}, column ${p.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let p of f.values())for(let g of p.properties)S(g);for(let p of E)p.tableClass=e(p),p.export&&(p.export.name===""?i.set((0,Jl.dirname)(n),p.tableClass):i.set((0,Jl.dirname)(n)+"/"+(p.export.name||p.type),p.tableClass));if(h)for(let p of h.properties){let g=f.get(p.type);if(!g)throw new Error(`${p.type} was not found as a Query export`);i.set((0,Jl.dirname)(n)+"/"+p.name,g.tableClass)}}}var Jl,zO,gV,RV,AV,JO=Re(()=>{Jl=require("path");Ae();zO=B(rt()),gV=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(gh,"start");RV=gh,AV=gh({ensureTable:lt}).handleFile});async function Xl(e){return OV?(Ec||(Ec=bV(yV)),(await(await Ec).import(e)).namespace):import(e)}async function bV(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:NV,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,jO.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Ft,tables:Ur,databases:nt})}};let n=await(0,XO.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Ec}function NV(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 yV(){return{Resource:Ft,tables:Ur}}var XO,jO,OV,Ec,Ah=Re(()=>{Nn();Ae();XO=require("fs/promises"),jO=require("path"),OV=!1;a(Xl,"secureImport");a(bV,"getCompartment");a(NV,"secureOnlyFetch");a(yV,"getGlobalVars")});var bh={};Ke(bh,{handleFile:()=>IV});async function IV(e,t,r,n){let s=new Map,i=(0,ZO.pathToFileURL)(r).toString(),o=await Xl(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 ZO,Oh,eb=Re(()=>{ZO=require("url");Ah();Oh=require("path");a(IV,"handleFile")});var yh={};Ke(yh,{start:()=>wV});function wV({resources:e}){e.set("login",Nh),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Nh,tb=Re(()=>{Nn();a(wV,"start");Nh=class extends Ft{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 cb={};Ke(cb,{parse:()=>wh,streamAsJSON:()=>hc,stringify:()=>Li});function hc(e){return new Ih({value:e})}function rb(e){return console.error(e),JSON.stringify(e.toString())}function nb(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Li(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===ob)return ab(e);if(t.resolution)return t.resolution.then(()=>Li(e));throw t}}function ab(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+=ab(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Li(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function wh(e){return LV.test(e)?CV.parse(e):JSON.parse(e)}var sb,ib,CV,DV,ob,Ih,LV,Ch=Re(()=>{sb=require("stream"),ib=B(require("json-bigint-fixes")),CV=(0,ib.default)({useNativeBigInt:!0}),DV=1e4,ob={};BigInt.prototype.toJSON=function(){throw ob};a(hc,"streamAsJSON");Ih=class extends sb.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),rb)}catch(s){yield rb(s)}else yield Li(t)}else yield Li(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);nb(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>DV?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 nb(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(rb,"handleError");a(nb,"when");a(Li,"stringify");a(ab,"jsStringify");LV=/-?\d{16,}/;a(wh,"parse")});var Rb=T((Noe,gb)=>{"use strict";var Dh=require("recursive-iterator"),MV=require("alasql"),Lh=require("clone"),ub=J(),{handleHDBError:lb,hdb_errors:UV}=Z(),{HDB_ERROR_MSGS:_b,HTTP_STATUS_CODES:db}=UV,{getDatabases:PV}=(Ae(),ee(qe)),vV=["DISTINCT_ARRAY"],fb=Symbol("validateTables"),Mh=Symbol("validateTable"),boe=Symbol("getAllColumns"),Eb=Symbol("validateAllColumns"),jl=Symbol("findColumn"),hb=Symbol("validateOrderBy"),mc=Symbol("validateSegment"),Uh=Symbol("validateColumn"),mb=Symbol("setColumnsForTable"),pb=Symbol("checkColumnsForAsterisk"),Sb=Symbol("validateGroupBy"),Tb=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[fb](),this[pb](),this[Eb]()}[fb](){if(this[Tb]()){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)})}}[Tb](){let t=!1,r=new Dh(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=PV();if(!r[t.databaseid])throw lb(new Error,_b.SCHEMA_NOT_FOUND(t.databaseid),db.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw lb(new Error,_b.TABLE_NOT_FOUND(t.databaseid,t.tableid),db.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Lh(s);i.table=Lh(t),this.attributes.push(i)})}[jl](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)}[pb](){let t=new Dh(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[mb](r.tableid)}[mb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new MV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Eb](){this[mc](this.statement.columns,!1),this[mc](this.statement.joins,!1),this[mc](this.statement.where,!1),this[Sb](this.statement.group,!1),this[mc](this.statement.order,!0)}[mc](t,r){if(!t)return;let n=new Dh(t),s=[];for(let{node:i,path:o}of n)!ub.isEmpty(i)&&!ub.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[hb](i):s.push(this[Uh](i)));return s}[Sb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&vV.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Lh(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[jl](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[jl](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`}[hb](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[jl](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]}};gb.exports=Ph});var Ob=T((Ioe,Ab)=>{"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")}};Ab.exports=vh});var Nb=T((Coe,bb)=>{"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}};bb.exports=Bh});var Cb={};Ke(Cb,{HAS_EXPIRATION:()=>$h,LAST_TIMESTAMP_PLACEHOLDER:()=>Tc,LOCAL_TIMESTAMP:()=>BV,METADATA:()=>pc,NO_TIMESTAMP:()=>xh,PENDING_LOCAL_TIME:()=>Yh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Vh,RecordEncoder:()=>Gh,TIMESTAMP_ASSIGN_LAST:()=>xV,TIMESTAMP_ASSIGN_NEW:()=>Ib,TIMESTAMP_ASSIGN_PREVIOUS:()=>wb,TIMESTAMP_PLACEHOLDER:()=>Zl,TIMESTAMP_RECORD_PREVIOUS:()=>Fh,fromResource:()=>n_,getUpdateRecord:()=>Kh,handleLocalTimeForGets:()=>s_});function qV(){return Sc[0]=Sc[0]^64,HV.getFloat64(0)}function n_(e){kh=!0;try{return e()}finally{kh=!1}}function s_(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?.[pc];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?.[pc]>=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[pc];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(){if(this.timerTracked||(this.timerTracked=!0,Mi.push(new WeakRef(this))),!kh)try{throw new Error("Read transaction used outside of resource")}catch(u){this.readStack=u.stack}o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Mi.length;u++){let _=Mi[u].deref();(!_||_.isDone||_.isCommitted)&&Mi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Kh(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Bo=i?.localTime?Fh|wb:xh:Bo=u?i?.localTime?Fh|16384:Ib|16384:xh,l>0&&(c|=$h),t_=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:Bo>0},S;try{f&&(h.ifVersion=S=i?.version??null);let p=e.put(n,s,h);if(u){let g=_?.user?.username;if(E&&(e_=e.encoder.encode(E)),f&&i?.localTime){let A=i?.localTime,b=r.get(A);if(b){let v=vt(b).previousLocalTime;return r.put(A,r_(o,t,n,v,g,d,e_),{ifVersion:S}),p}}r.put(Tc,r_(o,t,n,i?.localTime?1:0,g,d,e_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:S})}return p}catch(p){throw p.message+=" id: "+n+" options: "+h,p}}}var yb,Hh,Zl,Tc,Vh,BV,pc,Sc,HV,xh,Ib,xV,wb,Fh,$h,Yh,FV,e_,Bo,t_,qh,Gh,Moe,kh,Mi,Ho=Re(()=>{yb=require("msgpackr");Ui();Hh=B(Y()),Zl=new Uint8Array([1,1,1,1,4,64,0,0]),Tc=new Uint8Array([1,1,1,1,1,0,0,0]),Vh=new Uint8Array([1,1,1,1,3,64,0,0]),BV=Symbol("local-timestamp"),pc=Symbol("metadata"),Sc=new Uint8Array(8),HV=new DataView(Sc.buffer,0,8),xh=0,Ib=0,xV=1,wb=3,Fh=4,$h=16,Yh=1,Bo=0,t_=-1,qh=0,Gh=class extends yb.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Bo||t_>=0){let i=0,o=Bo;o&&(i+=8,Bo=0);let c=t_,u=qh;c>=0&&(i+=2,t_=-1,u&&(i+=8,qh=0));let _=FV=r.call(this,n,s|2048|i);e_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Zl[4]=o,Zl[5]=o>>8,_.set(Zl,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(Sc,0,c),c+=8;else for(let d=0;d<8;d++)Sc[d]=t[c++];u=qV(),i=t[c]}let _;i<32&&(o=i,c+=2,o&$h&&(_=(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,[pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(qV,"getTimestamp");Moe=Map.prototype.get;a(n_,"fromResource");a(s_,"handleLocalTimeForGets");Mi=[];setInterval(()=>{for(let e=0;e<Mi.length;e++){let t=Mi[e].deref();!t||t.isDone||t.isCommitted?Mi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Hh.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Hh.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(Kh,"getUpdateRecord")});var i_=T((Poe,Db)=>{"use strict";var Qh=j(),zh=M(),{RecordEncoder:GV}=(Ho(),ee(Cb));Qh.initSync();var kV=Qh.get(zh.CONFIG_PARAMS.STORAGE_COMPRESSION),VV=Qh.get(zh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,$V=zh.UPDATES_PROPERTY,Wh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=kV&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=VV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:GV},this.alwaysLazyProperty=n=>n===$V)}};Db.exports=Wh});var a_=T((Boe,Mb)=>{"use strict";var xo=j(),gc=M();xo.initSync();var YV=xo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xo.get(gc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Lb=xo.get(gc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),KV=xo.get(gc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),o_=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=YV,this.noFSAccess=!0,Lb!==void 0&&(this.overlappingSync=Lb),this.noReadAhead=KV}};Mb.exports=o_;o_.MAX_DBS=1e4});var We=T((xoe,kb)=>{"use strict";var Xh=require("lmdb"),yn=require("fs-extra"),Pr=require("path"),c_=Mr(),vb=Y(),ir=wr().LMDB_ERRORS_ENUM,u_=Nb(),jh=i_(),Bb=a_(),zs=Et(),Ub=M(),{table:WV,resetDatabases:QV}=(Ae(),ee(qe)),Pb=j(),In=zs.INTERNAL_DBIS_NAME,Hb=zs.DBI_DEFINITION_NAME,zV="data.mdb",JV="lock.mdb",Rc=".mdb",XV="-lock",Jh=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=tn(t,r),this.key_type=this.dbi[zs.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[zs.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Xh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function l_(e,t){if(e===void 0)throw new Error(ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ir.ENV_NAME_REQUIRED)}a(l_,"pathEnvNameValidation");async function Zh(e,t,r=!0){try{await yn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(ir.INVALID_BASE_PATH):n}try{let n=Pr.join(e,t+Rc);return await yn.access(n,yn.constants.R_OK|yn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await yn.access(Pr.join(e,t,zV),yn.constants.R_OK|yn.constants.F_OK),Pr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(ir.INVALID_ENVIRONMENT)}else throw new Error(ir.INVALID_ENVIRONMENT);throw n}}a(Zh,"validateEnvironmentPath");function __(e,t){if(c_.validateEnv(e),t===void 0)throw new Error(ir.DBI_NAME_REQUIRED)}a(__,"validateEnvDBIName");async function jV(e,t,r=!1,n=!1){l_(e,t);let s=Pr.basename(e);t=t.toString();let i=Pb.get(Ub.CONFIG_PARAMS.DATABASES);i||Pb.setProperty(Ub.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Zh(e,t,n),xb(e,t,r)}catch(o){if(o.message===ir.INVALID_ENVIRONMENT){let c=Pr.join(e,t);await yn.mkdirp(n?c:e);let u=new Bb(n?c:c+Rc,!1),_=Xh.open(u);_.dbis=Object.create(null);let l=new jh(!1);_.openDB(In,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=em(e,t,r);return _[zs.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(jV,"createEnvironment");async function ZV(e,t,r,n=!0){l_(e,t),t=t.toString();let s=Pr.join(e,t);return WV({table:t,database:Pr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ZV,"copyEnvironment");async function xb(e,t,r=!1){l_(e,t),t=t.toString();let n=em(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 Zh(e,t),i=Pr.join(e,t+Rc),o=s!=i,c=new Bb(s,o),u=Xh.open(c);u.dbis=Object.create(null);let _=qb(u);for(let l=0;l<_.length;l++)tn(u,_[l]);return u[zs.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(xb,"openEnvironment");async function e$(e,t,r=!1){l_(e,t),t=t.toString();let n=Pr.join(e,t+Rc),s=await Zh(e,t);if(global.lmdb_map!==void 0){let i=em(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Fb(o),delete global.lmdb_map[i]}}await yn.remove(s),await yn.remove(s===n?s+XV:Pr.join(Pr.dirname(s),JV))}a(e$,"deleteEnvironment");async function Fb(e){c_.validateEnv(e);let t=e[zs.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Fb,"closeEnvironment");function em(e,t,r=!1){let s=`${Pr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(em,"getCachedEnvironmentName");function t$(e){c_.validateEnv(e);let t=Object.create(null),r=tn(e,In);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==In)try{t[n]=Object.assign(new u_,s)}catch{vb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(t$,"listDBIDefinitions");function qb(e){c_.validateEnv(e);let t=[],r=tn(e,In);for(let{key:n}of r.getRange({start:!1}))n!==In&&t.push(n);return t}a(qb,"listDBIs");function r$(e,t){let n=tn(e,In).getEntry(t),s=new u_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{vb.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(r$,"getDBIDefinition");function Gb(e,t,r,n=!r){if(__(e,t),t=t.toString(),t===In)throw new Error(ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return tn(e,t)}catch(s){if(s.message===ir.DBI_DOES_NOT_EXIST){let i=new jh(r,n===!0),o=e.openDB(t,i),c=new u_(r===!0,n);return o[Hb]=c,tn(e,In).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Gb,"createDBI");function tn(e,t){if(__(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==In?r=r$(e,t):r=new u_,r===void 0)throw new Error(ir.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(ir.DBI_DOES_NOT_EXIST):s}return n[Hb]=r,e.dbis[t]=n,n}a(tn,"openDBI");function n$(e,t){__(e,t),t=t.toString();let r=tn(e,t),n=r.getStats();return r[zs.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(n$,"statDBI");async function s$(e,t){try{let r=Pr.join(e,t+Rc);return(await yn.stat(r)).size}catch{throw new Error(ir.INVALID_ENVIRONMENT)}}a(s$,"environmentDataSize");function i$(e,t){if(__(e,t),t=t.toString(),t===In)throw new Error(ir.CANNOT_DROP_INTERNAL_DBIS_NAME);tn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],tn(e,In).removeSync(t)}a(i$,"dropDBI");function o$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{tn(e,i)}catch(o){if(o.message===ir.DBI_DOES_NOT_EXIST)Gb(e,i,i!==t,i===t),n=!0;else throw o}}n&&QV()}a(o$,"initializeDBIs");kb.exports={openDBI:tn,openEnvironment:xb,createEnvironment:jV,listDBIs:qb,listDBIDefinitions:t$,createDBI:Gb,dropDBI:i$,statDBI:n$,deleteEnvironment:e$,initializeDBIs:o$,TransactionCursor:Jh,environmentDataSize:s$,copyEnvironment:ZV,closeEnvironment:Fb}});var $b=T((qoe,Vb)=>{"use strict";var tm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};Vb.exports=tm});var Kb=T((koe,Yb)=>{"use strict";var rm=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}};Yb.exports=rm});var Qb=T(($oe,Wb)=>{"use strict";var nm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};Wb.exports=nm});var Fo=T((zoe,Xb)=>{"use strict";var a$=We(),c$=$b(),u$=Kb(),l$=Qb(),Vn=Mr(),Ac=wr().LMDB_ERRORS_ENUM,_$=Et(),ps=M(),d$=J(),f$=require("uuid"),Koe=require("lmdb"),{handleHDBError:E$,hdb_errors:h$}=Z(),{OVERFLOW_MARKER:Woe,MAX_SEARCH_KEY_LENGTH:Qoe}=_$,zb=j();zb.initSync();var d_=zb.get(ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),sm=ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Pi=ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m$(e,t,r,n,s=Vn.getNextMonotonicTime()){cm(e,t,r,n),im(e,t,r);let i=new c$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Jb(_,!0,s);let l=p$(e,t,r,_),d=_[t];o.push(l),c.push(d)}return om(o,c,n,i,s)}a(m$,"insertRecords");function p$(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][ps.FUNC_VAL],n[o]=c)}let u=Vn.getIndexedValues(c),_=e.dbis[o];if(u){d_&&_.prefetch(u.map(l=>({key:l,value:s})),f_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}d_&&e.dbis[t].prefetch([s],f_),e.dbis[t].put(s,n,n[Pi])})}a(p$,"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 Jb(e,t,r){let n=r>0;(n||!Number.isInteger(e[Pi]))&&(e[Pi]=r||(r=Vn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[sm]))&&(e[sm]=r||Vn.getNextMonotonicTime()):delete e[sm]}a(Jb,"setTimestamps");function im(e,t,r){r.indexOf(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),a$.initializeDBIs(e,t,r)}a(im,"initializeTransaction");async function T$(e,t,r,n,s=Vn.getNextMonotonicTime()){cm(e,t,r,n),im(e,t,r);let i=new u$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],f;try{f=am(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return om(c,u,n,i,s,o)}a(T$,"updateRecords");async function g$(e,t,r,n,s=Vn.getNextMonotonicTime()){try{cm(e,t,r,n)}catch(u){throw E$(u,u.message,h$.HTTP_STATUS_CODES.BAD_REQUEST)}im(e,t,r);let i=new l$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;d$.isEmpty(_[t])?(l=f$.v4(),_[t]=l):l=_[t];let d=am(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return om(o,c,n,i,s)}a(g$,"upsertRecords");async function om(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||Vn.getNextMonotonicTime(),S$(r,i),n}a(om,"finalizeWrite");function am(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(Jb(r,!l,o),Number.isInteger(r[Pi])&&_[Pi]>r[Pi])return!1;l&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],p=e.dbis[h];if(p===void 0)continue;let g=_[h];if(typeof S=="function"){let b=S([[_]]);Array.isArray(b)&&(S=b[0][ps.FUNC_VAL],r[h]=S)}if(S===g)continue;let A=Vn.getIndexedValues(g);if(A){d_&&p.prefetch(A.map(b=>({key:b,value:n})),f_);for(let b=0,v=A.length;b<v;b++)p.remove(A[b],n)}if(A=Vn.getIndexedValues(S),A){d_&&p.prefetch(A.map(b=>({key:b,value:n})),f_);for(let b=0,v=A.length;b<v;b++)p.put(A[b],n)}}let E=Object.assign({},_,r);c.put(n,E,E[Pi])},"do_put");return u?d=c.ifVersion(n,u.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:am(e,t,r,n,s,i,o))}a(am,"updateUpsertRecord");function R$(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(Ac.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ac.WRITE_ATTRIBUTES_REQUIRED):new Error(Ac.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(R$,"validateBasic");function cm(e,t,r,n){if(R$(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Ac.RECORDS_REQUIRED):new Error(Ac.RECORDS_MUST_BE_ARRAY)}a(cm,"validateWrite");function f_(){}a(f_,"noop");Xb.exports={insertRecords:m$,updateRecords:T$,upsertRecords:g$}});var vi=T((Xoe,A$)=>{A$.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 Yn=T((joe,eN)=>{"use strict";var Zb=J(),jb=M(),qo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,$n=require("joi"),Js={schema_format:{pattern:qo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},O$=$n.alternatives($n.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),$n.number(),$n.array()).required(),b$=$n.alternatives($n.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),$n.number()),N$=$n.alternatives($n.string().min(1).max(Js.schema_length.maximum).pattern(qo).messages({"string.pattern.base":"{:#label} "+Js.schema_format.message}),$n.number()).required();function y$(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Js.schema_length.maximum?`'${e}' maximum of 250 characters`:qo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(y$,"checkValidTable");function I$(e,t){return Zb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(I$,"validateSchemaExists");function w$(e,t){let r=t.state.ancestors[0].schema;return Zb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(w$,"validateTableExists");function C$(e,t){return e.toLowerCase()===jb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${jb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(C$,"validateSchemaName");eN.exports={common_validators:Js,schema_regex:qo,hdb_schema_table:O$,validateSchemaExists:I$,validateTableExists:w$,validateSchemaName:C$,checkValidTable:y$,hdb_database:b$,hdb_table:N$}});var E_=T((eae,tN)=>{var{common_validators:Kn}=Yn(),bc=tt(),Oc="is required",ht={database:{presence:!1,format:Kn.schema_format,length:Kn.schema_length},schema:{presence:!1,format:Kn.schema_format,length:Kn.schema_length},table:{presence:!0,format:Kn.schema_format,length:Kn.schema_length},attribute:{presence:!0,format:Kn.schema_format,length:Kn.schema_length},hash_attribute:{presence:!0,format:Kn.schema_format,length:Kn.schema_length}};function Nc(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(Nc,"makeAttributesStrings");function D$(e){return e=Nc(e),ht.table.presence=!1,ht.attribute.presence=!1,ht.hash_attribute.presence=!1,bc.validateObject(e,ht)}a(D$,"schema_object");function L$(e){return e=Nc(e),ht.table.presence={message:Oc},ht.attribute.presence=!1,ht.hash_attribute.presence=!1,bc.validateObject(e,ht)}a(L$,"table_object");function M$(e){return e=Nc(e),ht.table.presence={message:Oc},ht.attribute.presence=!1,bc.validateObject(e,ht)}a(M$,"create_table_object");function U$(e){return e=Nc(e),ht.table.presence={message:Oc},ht.attribute.presence={message:Oc},ht.hash_attribute.presence=!1,bc.validateObject(e,ht)}a(U$,"attribute_object");function P$(e){return e=Nc(e),ht.table.presence={message:Oc},ht.attribute.presence=!1,ht.hash_attribute.presence=!1,bc.validateObject(e,ht)}a(P$,"describe_table");function v$(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(v$,"validateTableResidence");tN.exports={schema_object:D$,create_table_object:M$,table_object:L$,attribute_object:U$,describe_table:P$,validateTableResidence:v$}});var nN=T((rae,rN)=>{"use strict";var B$=require("uuid"),um=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||B$.v4(),this.schema_table=`${this.schema}.${this.table}`}};rN.exports=um});var h_=T((sae,sN)=>{"use strict";var H$=nN(),lm=class extends H${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}};sN.exports=lm});var oN=T((oae,iN)=>{"use strict";iN.exports=F$;var x$="inserted";function F$(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===x$?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(F$,"returnObject")});var m_=T((cae,_N)=>{"use strict";var q$=M(),_m=We(),G$=Fo(),{getSystemSchemaPath:k$,getSchemaPath:V$}=Je(),$$=vi(),Y$=E_(),K$=h_(),W$=oN(),{handleHDBError:aN,hdb_errors:uN}=Z(),cN=J(),{HTTP_STATUS_CODES:Q$}=uN,dm=$$.hdb_attribute,lN=[];for(let e=0;e<dm.attributes.length;e++)lN.push(dm.attributes[e].attribute);var z$="inserted";_N.exports=J$;async function J$(e){let t=Y$.attribute_object(e);if(t)throw aN(new Error,t.message,uN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&cN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw aN(new Error,r,Q$.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=cN.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 K$(e.schema,e.table,e.attribute,e.id);try{let i=await _m.openEnvironment(V$(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}`);_m.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await _m.openEnvironment(k$(),q$.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await G$.insertRecords(o,dm.hash_attribute,lN,[s]);return W$(z$,c,{records:[s]},u)}catch(i){throw i}}a(J$,"lmdbCreateAttribute")});var Em=T((lae,fN)=>{var{hdb_table:X$,hdb_database:dN}=Yn(),j$=tt(),fm=require("joi"),Z$={undefined:"undefined",null:"null"},e1=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||Z$[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"),t1=fm.object({database:dN,schema:dN,table:X$,records:fm.array().items(fm.object().custom(e1)).required()});fN.exports=function(e){return j$.validateBySchema(e,t1)}});var yc=T((fae,hN)=>{"use strict";var Ss=J(),EN=Y(),dae=Em(),{getDatabases:r1}=(Ae(),ee(qe)),{ClientError:Bi}=Z();hN.exports=n1;function n1(e){if(Ss.isEmpty(e))throw new Bi("invalid update parameters defined.");if(Ss.isEmptyOrZeroLength(e.schema))throw new Bi("invalid schema specified.");if(Ss.isEmptyOrZeroLength(e.table))throw new Bi("invalid table specified.");if(!Array.isArray(e.records))throw new Bi("records must be an array");let t=r1()[e.schema]?.[e.table];if(Ss.isEmpty(t))throw new Bi(`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&&Ss.isEmptyOrZeroLength(o[r]))throw EN.error("a valid hash attribute must be provided with update record:",o),new Bi("a valid hash attribute must be provided with update record, check log for more info");if(!Ss.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw EN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Bi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ss.isEmpty(o[r])&&o[r]!==""&&n.has(Ss.autoCast(o[r]))&&(o.skip=!0),n.add(Ss.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(n1,"insertUpdateValidate")});var Ic=T((hae,mN)=>{"use strict";var s1=M().OPERATIONS_ENUM,hm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=s1.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};mN.exports=hm});var Lc=T((Sae,pN)=>{"use strict";var pae=Ic(),p_=M(),pm=J(),mm=Y(),i1=require("uuid"),{handleHDBError:wc,hdb_errors:o1}=Z(),{HDB_ERROR_MSGS:Cc,HTTP_STATUS_CODES:Dc}=o1;pN.exports=a1;function a1(e,t,r){for(let s=0;s<t.length;s++)c1(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];u1(i,r,e.operation)}}a(a1,"processRows");function c1(e){if(Buffer.byteLength(String(e))>p_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw wc(new Error,Cc.ATTR_NAME_LENGTH_ERR(e),Dc.BAD_REQUEST,void 0,void 0,!0);if(pm.isEmptyOrZeroLength(e)||pm.isEmpty(e.trim()))throw wc(new Error,Cc.ATTR_NAME_NULLISH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(c1,"validateAttribute");function u1(e,t,r){if(!e.hasOwnProperty(t)||pm.isEmptyOrZeroLength(e[t])){if(r===p_.OPERATIONS_ENUM.INSERT||r===p_.OPERATIONS_ENUM.UPSERT){e[t]=i1.v4();return}throw mm.error("Update transaction aborted due to record with no hash value:",e),wc(new Error,Cc.RECORD_MISSING_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>p_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mm.error(e),wc(new Error,Cc.HASH_VAL_LENGTH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw mm.error(e),wc(new Error,Cc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Dc.BAD_REQUEST,void 0,void 0,!0)}a(u1,"validateHash")});var TN=T((gae,SN)=>{"use strict";var Sm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};SN.exports=Sm});var AN=T((Aae,RN)=>{"use strict";var Tm=We(),l1=Y(),gN=wr().LMDB_ERRORS_ENUM;RN.exports=_1;async function _1(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 Tm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==gN.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Tm.closeEnvironment(global.lmdb_map[n]),await Tm.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==gN.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){l1.error(t)}}a(_1,"cleanLMDBMap")});var Ts=T((bae,yN)=>{"use strict";var Mc=require("crypto"),d1=j(),{CONFIG_PARAMS:f1}=M(),bN="aes-256-cbc",E1=32,h1=16,gm=64,NN=32,m1=gm+NN,ON=new Map;yN.exports={encrypt:p1,decrypt:S1,createNatsTableStreamName:T1};function p1(e){let t=Mc.randomBytes(E1),r=Mc.randomBytes(h1),n=Mc.createCipheriv(bN,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(p1,"encrypt");function S1(e){let t=e.substr(0,gm),r=e.substr(gm,NN),n=e.substr(m1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Mc.createDecipheriv(bN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(S1,"decrypt");function T1(e,t){let r=d1.get(f1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=ON.get(r);return n||(n=Mc.createHash("md5").update(r).digest("hex"),ON.set(r,n)),n}a(T1,"createNatsTableStreamName")});var Hi=T((Iae,wN)=>{"use strict";var yae=rn(),S_=Y(),IN=E_(),g1=Ts(),T_=J(),{handleHDBError:g_,hdb_errors:R1}=Z(),{HDB_ERROR_MSGS:R_,HTTP_STATUS_CODES:Rm}=R1,A1=j();A1.initSync();var{getDatabases:Am}=(Ae(),ee(qe));wN.exports={describeAll:O1,describeTable:A_,describeSchema:b1};async function O1(e){try{let t=T_.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=Am(),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 A_({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 A_({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){S_.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 S_.error("Got an error in describeAll"),S_.error(t),g_(new Error,R_.DESCRIBE_ALL_ERR)}}a(O1,"describeAll");async function A_(e,t){T_.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=IN.describe_table(e);if(i)throw i;let c=Am()[r];if(!c)throw g_(new Error,R_.SCHEMA_NOT_FOUND(e.schema),Rm.NOT_FOUND);let u=c[n];if(!u)throw g_(new Error,R_.TABLE_NOT_FOUND(e.schema,e.table),Rm.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=g1.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){S_.warn(`unable to stat table dbi due to ${f}`)}return d}a(A_,"descTable");async function b1(e){T_.transformReq(e);let t=IN.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=Am()[n];if(!i)throw g_(new Error,R_.SCHEMA_NOT_FOUND(e.schema),Rm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),T_.isEmpty(u)||u.describe){let _=await A_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(b1,"describeSchema")});var Xs=T((Lae,UN)=>{var N1=vi(),{callbackify:DN,promisify:y1}=require("util"),{getDatabases:LN}=(Ae(),ee(qe));UN.exports={setSchemaDataToGlobal:CN,getTableSchema:I1,getSystemSchema:w1,setSchemaDataToGlobalAsync:y1(CN)};var MN=Hi(),Cae=DN(MN.describeAll),Dae=DN(MN.describeTable);function CN(e){global.hdb_schema=LN(),e&&e()}a(CN,"setSchemaDataToGlobal");function I1(e,t,r){let n=LN()[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(I1,"getTableSchema");function w1(){return N1}a(w1,"getSystemSchema")});var nn=T((Uae,HN)=>{"use strict";var b_=Em(),qt=J(),C1=require("util"),N_=wn(),D1=Xs(),PN=Y(),{handleHDBError:xi,hdb_errors:L1}=Z(),{HTTP_STATUS_CODES:Fi}=L1,M1=C1.promisify(D1.getTableSchema),U1="updated",vN="inserted",BN="upserted";HN.exports={insert:v1,update:B1,upsert:H1,validation:P1,flush:x1};async function P1(e){if(qt.isEmpty(e))throw new Error("invalid update parameters defined.");if(qt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(qt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await M1(e.schema,e.table),r=b_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&qt.isEmptyOrZeroLength(c[n]))throw PN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!qt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw PN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!qt.isEmpty(c[n])&&c[n]!==""&&s.has(qt.autoCast(c[n]))&&(c.skip=!0),s.add(qt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(P1,"validation");async function v1(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=b_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await N_.createRecords(e);return O_(vN,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(v1,"insertData");async function B1(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=b_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await N_.updateRecords(e);return qt.isEmpty(n.existing_rows)?O_(U1,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):O_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(B1,"updateData");async function H1(e){if(e.operation!=="upsert")throw xi(new Error,"invalid operation, must be upsert",Fi.INTERNAL_SERVER_ERROR);let t=b_(e);if(t)throw xi(new Error,t.message,Fi.BAD_REQUEST);qt.transformReq(e);let r=qt.checkSchemaTableExist(e.schema,e.table);if(r)throw xi(new Error,r,Fi.BAD_REQUEST);let n=await N_.upsertRecords(e);return O_(BN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(H1,"upsertData");function O_(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===vN?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===BN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(O_,"returnObject");function x1(e){return qt.transformReq(e),N_.flush(e.schema,e.table)}a(x1,"flush")});var bm=T((vae,qN)=>{var F1=tt(),Om=require("joi"),{hdb_table:q1,hdb_database:xN}=Yn(),FN={schema:xN,database:xN,table:q1},G1={date:Om.date().iso().required()},k1={timestamp:Om.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qN.exports=function(e,t){let r=t==="timestamp"?{...FN,...k1}:{...FN,...G1},n=Om.object(r);return F1.validateBySchema(e,n)}});var VN=T((Bae,kN)=>{var V1=tt(),Nm=require("joi"),{hdb_table:$1,hdb_database:GN}=Yn(),Y1=Nm.object({schema:GN,database:GN,table:$1,hash_values:Nm.array().required(),ids:Nm.array()});kN.exports=function(e){return V1.validateBySchema(e,Y1)}});var YN=T((Hae,$N)=>{"use strict";var ym=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}},Im=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}},wm=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};$N.exports={InsertObject:ym,NoSQLSeachObject:Im,DeleteResponseObject:wm}});var ki=T((Fae,JN)=>{"use strict";var WN=bm(),K1=VN(),qi=J(),KN=require("moment"),QN=Y(),{promisify:W1,callbackify:Q1}=require("util"),Gi=M(),z1=Xs(),Cm=W1(z1.getTableSchema),Dm=wn(),{DeleteResponseObject:J1}=YN(),{handleHDBError:js,hdb_errors:X1}=Z(),{HDB_ERROR_MSGS:y_,HTTP_STATUS_CODES:Zs}=X1,j1="records successfully deleted",Z1=Q1(zN);JN.exports={delete:Z1,deleteRecord:zN,deleteFilesBefore:eY,deleteAuditLogsBefore:tY};async function eY(e){let t=WN(e,"date");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),!KN(e.date,KN.ISO_8601).isValid())throw js(new Error,y_.INVALID_DATE,Zs.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,y_.INVALID_DATE,!0);let n=qi.checkSchemaTableExist(e.schema,e.table);if(n)throw js(new Error,n,Zs.NOT_FOUND,Gi.LOG_LEVELS.ERROR,n,!0);let s=await Dm.deleteRecordsBefore(e);if(await Cm(e.schema,e.table),QN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(eY,"deleteFilesBefore");async function tY(e){let t=WN(e,"timestamp");if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);if(qi.transformReq(e),isNaN(e.timestamp))throw js(new Error,y_.INVALID_VALUE("Timestamp"),Zs.BAD_REQUEST,Gi.LOG_LEVELS.ERROR,y_.INVALID_VALUE("Timestamp"),!0);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);let n=await Dm.deleteAuditLogsBefore(e);return await Cm(e.schema,e.table),QN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(tY,"deleteAuditLogsBefore");async function zN(e){e.ids&&(e.hash_values=e.ids);let t=K1(e);if(t)throw js(t,t.message,Zs.BAD_REQUEST,void 0,void 0,!0);qi.transformReq(e);let r=qi.checkSchemaTableExist(e.schema,e.table);if(r)throw js(new Error,r,Zs.NOT_FOUND,Gi.LOG_LEVELS.ERROR,r,!0);try{await Cm(e.schema,e.table);let n=await Dm.deleteRecords(e);return qi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${j1}`),n}catch(n){if(n.message===Gi.SEARCH_NOT_FOUND_MESSAGE){let s=new J1;return s.message=Gi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(zN,"deleteRecord")});var I_=T((Gae,ZN)=>{var rY=require("crypto"),XN=9;function nY(e){let t=iY(XN),r=jN(e+t);return t+r}a(nY,"createHash");function sY(e,t){let r=e?.substr(0,XN),n=r+jN(t+r);return e===n}a(sY,"validateHash");function iY(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(iY,"generateSalt");function jN(e){return rY.createHash("md5").update(e).digest("hex")}a(jN,"md5");ZN.exports={hash:nY,validate:sY}});var ty=T((Vae,ey)=>{var Lm=tt(),Wt={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 oY(e){return Wt.password.presence=!0,Wt.username.presence=!0,Wt.role.presence=!0,Wt.active.presence=!0,Lm.validateObject(e,Wt)}a(oY,"addUserValidation");function aY(e){return Wt.password.presence=!1,Wt.username.presence=!0,Wt.role.presence=!1,Wt.active.presence=!1,Lm.validateObject(e,Wt)}a(aY,"alterUserValidation");function cY(e){return Wt.password.presence=!1,Wt.username.presence=!0,Wt.role.presence=!1,Wt.active.presence=!1,Lm.validateObject(e,Wt)}a(cY,"dropUserValidation");ey.exports={addUserValidation:oY,alterUserValidation:aY,dropUserValidation:cY}});var st=T((Kae,ny)=>{"use strict";var{platform:Yae}=require("os"),uY="nats-server.zip",Mm="nats-server",lY=process.platform==="win32"?`${Mm}.exe`:Mm,Um="HDB",_Y=/^[^\s.,*>]+$/,ry="__request__",dY=a(e=>`${e}.${ry}`,"REQUEST_SUBJECT"),fY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},EY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},hY={HUB:"hub.pid",LEAF:"leaf.pid"},mY={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},pY={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Um,deliver_subject:"__HDB__.WORKQUEUE"},SY={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Um,deliver_subject:"HDB.SCHEMAQUEUE"},TY={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Um,deliver_subject:"HDB.USERQUEUE"},gY={SUCCESS:"success",ERROR:"error"},RY={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},AY={TXN:"txn",MSGID:"msgid"},Go={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},OY={[Go.ERR]:1,[Go.WRN]:2,[Go.INF]:3,[Go.DBG]:4,[Go.TRC]:5},bY={debug:"-D",trace:"-DVV"};ny.exports={NATS_SERVER_ZIP:uY,NATS_SERVER_NAME:Mm,NATS_BINARY_NAME:lY,PID_FILES:hY,NATS_CONFIG_FILES:EY,SERVER_SUFFIX:mY,WORK_QUEUE_CONSUMER_NAMES:pY,SCHEMA_QUEUE_CONSUMER_NAMES:SY,USER_QUEUE_CONSUMER_NAMES:TY,NATS_TERM_CONSTRAINTS_RX:_Y,REQUEST_SUFFIX:ry,UPDATE_REMOTE_RESPONSE_STATUSES:gY,CLUSTER_STATUS_STATUSES:RY,REQUEST_SUBJECT:dY,SUBJECT_PREFIXES:AY,MSG_HEADERS:fY,LOG_LEVELS:Go,LOG_LEVEL_FLAGS:bY,LOG_LEVEL_HIERARCHY:OY}});var iy=T((Qae,sy)=>{"use strict";var w_=M(),C_=class{static{a(this,"BaseLicense")}constructor(t=0,r=w_.RAM_ALLOCATION_ENUM.DEFAULT,n=w_.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},Pm=class extends C_{static{a(this,"ExtendedLicense")}constructor(t=0,r=w_.RAM_ALLOCATION_ENUM.DEFAULT,n=w_.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};sy.exports={BaseLicense:C_,ExtendedLicense:Pm}});var Vi=T((Jae,_y)=>{"use strict";var Vo=require("fs-extra"),ay=I_(),cy=require("crypto"),NY=require("moment"),yY=require("uuid").v4,Qt=Y(),Bm=require("path"),IY=J(),ei=M(),{totalmem:oy}=require("os"),wY=iy().ExtendedLicense,ko="invalid license key format",CY="061183",DY="mofi25",LY="aes-256-cbc",MY=16,UY=32,uy=j();uy.initSync();var vm;_y.exports={validateLicense:ly,generateFingerPrint:vY,licenseSearch:Fm,getLicense:xY,checkMemoryLimit:FY};function Hm(){return Bm.join(uy.getHdbBasePath(),ei.LICENSE_KEY_DIR_NAME,ei.LICENSE_FILE_NAME)}a(Hm,"getLicenseDirPath");function PY(){let e=Hm();return Bm.join(e,ei.LICENSE_FILE_NAME)}a(PY,"getLicenseFilePath");function xm(){let e=Hm();return Bm.join(e,ei.REG_KEY_FILE_NAME)}a(xm,"getFingerPrintFilePath");async function vY(){let e=xm();try{return await Vo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await BY();throw Qt.error(`Error writing fingerprint file to ${e}`),Qt.error(t),new Error("There was an error generating the fingerprint")}}a(vY,"generateFingerPrint");async function BY(){let e=yY(),t=ay.hash(e),r=xm();try{await Vo.mkdirp(Hm()),await Vo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Qt.error(`Error writing fingerprint file to ${r}`),Qt.error(n),new Error("There was an error generating the fingerprint")}return t}a(BY,"writeFingerprint");function ly(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 Qt.error("empty license key passed to validate."),r;let n=xm(),s=!1;try{s=Vo.statSync(n)}catch(i){Qt.error(i)}if(s){let i;try{i=Vo.readFileSync(n,"utf8")}catch{Qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(DY),c=o[1];c=Buffer.concat([Buffer.from(c)],MY);let u=Buffer.concat([Buffer.from(i)],UY),_=cy.createDecipheriv(LY,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=HY(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ko),Qt.error(ko),new Error(ko)}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(ko),Qt.error(ko),new Error(ko)}else r.exp_date=l;r.exp_date<NY().valueOf()&&(r.valid_date=!1),ay.validate(o[1],`${CY}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Qt.error("Invalid licence"),r}a(ly,"validateLicense");function HY(e,t){try{let r=cy.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Qt.warn("Check old license failed")}}a(HY,"checkOldLicense");function Fm(){let e=new wY,t=[];try{t=Vo.readFileSync(PY(),"utf-8").split(ei.NEW_LINE)}catch(r){r.code==="ENOENT"?Qt.info("no license file found"):Qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(IY.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=ly(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){Qt.error("There was an error parsing the license string."),Qt.error(s),e.ram_allocation=ei.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return vm=e,e}a(Fm,"licenseSearch");async function xY(){return vm||await Fm(),vm}a(xY,"getLicense");function FY(){let e=Fm().ram_allocation,t=process.constrainedMemory?.()||oy();if(t=Math.round(Math.min(t,oy())/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(FY,"checkMemoryLimit")});var sn=T((tce,Iy)=>{"use strict";var hy="username is required",my="nothing to update, must supply active, role or password to update",py="password cannot be an empty string",Sy="If role is specified, it cannot be empty.",Ty="active must be true or false";Iy.exports={addUser:QY,alterUser:zY,dropUser:XY,getSuperUser:tK,userInfo:jY,listUsers:L_,listUsersExternal:ZY,setUsersToGlobal:Yo,findAndValidateUser:Ny,getClusterUser:rK,USERNAME_REQUIRED:hy,ALTERUSER_NOTHING_TO_UPDATE:my,EMPTY_PASSWORD:py,EMPTY_ROLE:Sy,ACTIVE_BOOLEAN:Ty};var gy=nn(),qY=ki(),km=I_(),Ry=ty(),Ay=rn(),Vm=gs(),vr=J(),Oy=require("validate.js"),ge=Y(),{promisify:GY}=require("util"),$m=Ts(),dy=M(),fy=st(),kY=Lr(),jae=j(),Zae=Vi(),VY=vi(),{table:ece}=(Ae(),ee(qe)),{handleHDBError:Wn,hdb_errors:$Y}=Z(),{HTTP_STATUS_CODES:Qn,AUTHENTICATION_ERROR_MSGS:qm,HDB_ERROR_MSGS:$o}=$Y,{UserEventMsg:Ym}=Cn(),Gm=require("lodash"),{server:Km}=(rr(),ee(wi)),YY=Y();Km.getUser=(e,t)=>Ny(e,t,t!=null);var by={username:!0,active:!0,role:!0,password:!0},Ey=new Map,D_=Ay.searchByValue,KY=Ay.searchByHash,WY=GY(qY.delete);async function QY(e){let t=Oy.cleanAttributes(e,by),r=Ry.addUserValidation(t);if(r)throw Wn(new Error,r.message,Qn.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 D_(n),s=s&&Array.from(s)}catch(u){throw ge.error("There was an error searching for a role in add user"),ge.error(u),u}if(!s||s.length<1)throw Wn(new Error,$o.ROLE_NAME_NOT_FOUND(t.role),Qn.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Wn(new Error,$o.DUP_ROLES_FOUND(t.role),Qn.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=$m.encrypt(t.password)),t.password=km.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await gy.insert(i)}catch(u){throw ge.error("There was an error searching for a user."),ge.error(u),u}ge.debug(o);try{await Yo()}catch(u){throw ge.error("Got an error setting users to global"),ge.error(u),u}if(o.skipped_hashes.length===1)throw Wn(new Error,$o.USER_ALREADY_EXISTS(t.username),Qn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],Vm.signalUserChange(new Ym(process.pid)),`${c.username} successfully added`}a(QY,"addUser");async function zY(e){let t=Oy.cleanAttributes(e,by);if(vr.isEmptyOrZeroLength(t.username))throw new Error(hy);if(vr.isEmptyOrZeroLength(t.password)&&vr.isEmptyOrZeroLength(t.role)&&vr.isEmptyOrZeroLength(t.active))throw new Error(my);if(!vr.isEmpty(t.password)&&vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(py);if(!vr.isEmpty(t.active)&&!vr.isBoolean(t.active))throw new Error(Ty);let r=JY(t.username);if(!vr.isEmpty(t.password)&&!vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=$m.encrypt(t.password)),t.password=km.hash(t.password)),t.role==="")throw new Error(Sy);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 D_(i)||[])}catch(c){throw ge.error("Got an error searching for a role."),ge.error(c),c}if(!o||o.length===0){let c=$o.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ge.error(c),Wn(new Error,c,Qn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$o.ALTER_USER_DUP_ROLES(t.role);throw ge.error(c),Wn(new Error,c,Qn.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 gy.update(n)}catch(i){throw ge.error("Error during update."),ge.error(i),i}try{await Yo()}catch(i){throw ge.error("Got an error setting users to global"),ge.error(i),i}return Vm.signalUserChange(new Ym(process.pid)),s}a(zY,"alterUser");function JY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(JY,"isClusterUser");async function XY(e){try{let t=Ry.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 Wn(new Error,$o.USER_NOT_EXIST(e.username),Qn.NOT_FOUND,void 0,void 0,!0);let n;try{n=await WY(r)}catch(s){throw ge.error("Got an error deleting a user."),ge.error(s),s}ge.debug(n);try{await Yo()}catch(s){throw ge.error("Got an error setting users to global."),ge.error(s),s}return Vm.signalUserChange(new Ym(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(XY,"dropUser");async function jY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Gm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await KY(r)}catch(s){throw ge.error("Got an error searching for a role."),ge.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ge.error(r),r}return t}a(jY,"userInfo");async function ZY(){let e;try{e=await L_()}catch(t){throw ge.error("Got an error listing users."),ge.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(ZY,"listUsersExternal");async function L_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await D_(e)}catch(o){throw ge.error("Got an error searching for roles."),ge.error(o),o}let r={};for(let o of t)r[o.id]=Gm.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 D_(n)}catch(o){throw ge.error("Got an error searching for users."),ge.error(o),o}let i=new Map;for(let o of s)o=Gm.cloneDeep(o),o.role=r[o.role],eK(o.role),i.set(o.username,o);return i}catch(e){throw ge.error("got an error listing users"),ge.error(e),vr.errorizeMessage(e)}return null}a(L_,"listUsers");function eK(e){try{if(!e){ge.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(VY)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ge.error("Got an error trying to set system permissions."),ge.error(t)}}a(eK,"appendSystemTablesToRole");async function Yo(){try{let e=await L_();global.hdb_users=e}catch(e){throw ge.error(e),e}}a(Yo,"setUsersToGlobal");async function Ny(e,t,r=!0){global.hdb_users||await Yo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Wn(new Error,qm.GENERIC_AUTH_FAIL,Qn.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Wn(new Error,qm.USER_INACTIVE,Qn.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(Ey.get(t)===n.password)return s;if(km.validate(n.password,t))Ey.set(t,n.password);else throw Wn(new Error,qm.GENERIC_AUTH_FAIL,Qn.UNAUTHORIZED,void 0,void 0,!0)}return s}a(Ny,"findAndValidateUser");async function tK(){global.hdb_users||await Yo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(tK,"getSuperUser");async function rK(){let e=await L_(),t=kY.getConfigFromFile(dy.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!vr.isEmpty(r)&&r?.role?.role===dy.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=$m.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+fy.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+fy.SERVER_SUFFIX.ADMIN,r}a(rK,"getClusterUser");var yy=[];Km.invalidateUser=function(e){for(let t of yy)try{t(e)}catch(r){YY.error("Error invalidating user",r)}};Km.onInvalidatedUser=function(e){yy.push(e)}});var Pc=T((ice,Ly)=>{"use strict";var $i=Y(),Br=M(),nK=AN(),nce=Xs(),sce=Hi(),sK=sn(),{validateEvent:wy}=Cn(),Uc=wn(),iK=require("process"),{resetDatabases:oK}=(Ae(),ee(qe)),aK={[Br.ITC_EVENT_TYPES.SCHEMA]:cK,[Br.ITC_EVENT_TYPES.USER]:Dy};async function cK(e){let t=wy(e);if(t){$i.error(t);return}$i.trace("ITC schemaHandler received schema event:",e),await nK(e.message),await uK(e.message)}a(cK,"schemaHandler");async function uK(e){try{Uc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Uc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Uc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=oK();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){$i.error(t)}}a(uK,"syncSchemaMetadata");var Cy=[];async function Dy(e){try{try{Uc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Uc.resetReadTxn(Br.SYSTEM_SCHEMA_NAME,Br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){$i.warn(r)}let t=wy(e);if(t){$i.error(t);return}$i.trace(`ITC userHandler ${Br.HDB_ITC_CLIENT_PREFIX}${iK.pid} received user event:`,e),await sK.setUsersToGlobal();for(let r of Cy)r()}catch(t){$i.error(t)}}a(Dy,"userHandler");Dy.addListener=function(e){Cy.push(e)};Ly.exports=aK});var Cn=T((_ce,Uy)=>{"use strict";var ace=Y(),Wm=J(),lK=M(),{ITC_ERRORS:vc}=wr(),{parentPort:cce,threadId:_K,isMainThread:dK,workerData:uce}=require("worker_threads"),{onMessageFromWorkers:fK,broadcast:lce,broadcastWithAcknowledgement:EK}=rt();Uy.exports={sendItcEvent:hK,validateEvent:My,SchemaEventMsg:mK,UserEventMsg:pK};var M_;fK(async(e,t)=>{M_=M_||Pc(),My(e),M_[e.type]&&await M_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function hK(e){return!dK&&e.message&&(e.message.originator=_K),EK(e)}a(hK,"sendItcEvent");function My(e){if(typeof e!="object")return vc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Wm.isEmpty(e.type))return vc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Wm.isEmpty(e.message))return vc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Wm.isEmpty(e.message.originator))return vc.MISSING_ORIGIN;if(lK.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return vc.INVALID_EVENT(e.type)}a(My,"validateEvent");function mK(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(mK,"SchemaEventMsg");function pK(e){this.originator=e}a(pK,"UserEventMsg")});var gs=T((Ece,Hy)=>{"use strict";var Py=M(),fce=J(),U_=Y(),vy=TN(),Ko,{sendItcEvent:By}=Cn();function SK(e){try{U_.trace("signalSchemaChange called with message:",e),Ko=Ko||Pc();let t=new vy(Py.ITC_EVENT_TYPES.SCHEMA,e);return Ko.schema(t),By(t)}catch(t){U_.error(t)}}a(SK,"signalSchemaChange");function TK(e){try{U_.trace("signalUserChange called with message:",e),Ko=Ko||Pc();let t=new vy(Py.ITC_EVENT_TYPES.USER,e);return Ko.user(t),By(t)}catch(t){U_.error(t)}}a(TK,"signalUserChange");Hy.exports={signalSchemaChange:SK,signalUserChange:TK}});var P_=T((mce,Fy)=>{"use strict";var xy=J(),gK=M(),RK=Y(),AK=m_(),OK=h_(),bK=gs(),{SchemaEventMsg:NK}=Cn(),yK="already exists in";Fy.exports=IK;async function IK(e,t,r){if(xy.isEmptyOrZeroLength(r))return r;let n=[];xy.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 wK(e,t.schema,t.name,i)})),s}a(IK,"lmdbCheckForNewAttributes");async function wK(e,t,r,n){let s=new OK(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await CK(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(yK))RK.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(wK,"createNewAttribute");async function CK(e){let t;return t=await AK(e),bK.signalSchemaChange(new NK(process.pid,gK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(CK,"createAttribute")});var Wo=T((Sce,qy)=>{"use strict";var Qm=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}};qy.exports=Qm});var ky=T((gce,Gy)=>{"use strict";var DK=Wo(),LK=M().OPERATIONS_ENUM,zm=class extends DK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(LK.INSERT,r,n,s,i),this.records=t}};Gy.exports=zm});var $y=T((Ace,Vy)=>{"use strict";var MK=Wo(),UK=M().OPERATIONS_ENUM,Jm=class extends MK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(UK.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Vy.exports=Jm});var Ky=T((bce,Yy)=>{"use strict";var PK=Wo(),vK=M().OPERATIONS_ENUM,Xm=class extends PK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(vK.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Yy.exports=Xm});var Qy=T((yce,Wy)=>{"use strict";var BK=Wo(),HK=M().OPERATIONS_ENUM,jm=class extends BK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(HK.DELETE,n,s,t,i),this.original_records=r}};Wy.exports=jm});var Bc=T((Cce,jy)=>{"use strict";var wce=require("path"),zy=We(),xK=ky(),FK=$y(),qK=Ky(),GK=Qy(),Qo=Et(),Jy=J(),{CONFIG_PARAMS:kK}=M(),Xy=j();Xy.initSync();var v_=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:VK}=Je();jy.exports=$K;async function $K(e,t){if(Xy.get(kK.LOGGING_AUDITLOG)===!1)return;let r=VK(e.schema,e.table),n=await zy.openEnvironment(r,e.table,!0),s=YK(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){zy.initializeDBIs(n,Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qo.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Jy.isEmpty(s.user_name)||n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a($K,"writeTransaction");function YK(e,t){let r=Jy.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===v_.INSERT)return new xK(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.UPDATE)return new FK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.UPSERT)return new qK(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===v_.DELETE)return new GK(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(YK,"createTransactionObject")});var Zm=T((Mce,Zy)=>{"use strict";var KK=yc(),Lce=Ic(),Hc=M(),WK=Lc(),QK=Fo().insertRecords,zK=We(),JK=Y(),XK=P_(),{getSchemaPath:jK}=Je(),ZK=Bc();Zy.exports=eW;async function eW(e){try{let{schema_table:t,attributes:r}=KK(e);WK(e,r,t.hash_attribute),e.schema!==Hc.SYSTEM_SCHEMA_NAME&&(r.includes(Hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await XK(e.hdb_auth_header,t,r),s=jK(e.schema,e.table),i=await zK.openEnvironment(s,e.table),o=await QK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await ZK(e,o)}catch(c){JK.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(eW,"lmdbCreateRecords")});var rI=T((Pce,tI)=>{"use strict";var eI=M(),tW=Zm(),rW=Ic(),nW=require("fs-extra"),{getSchemaPath:sW}=Je();tI.exports=iW;async function iW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new rW(eI.SYSTEM_SCHEMA_NAME,eI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await tW(r),await nW.mkdirp(sW(e.schema))}a(iW,"lmdbCreateSchema")});var sI=T((Bce,nI)=>{"use strict";var ep=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}};nI.exports=ep});var cI=T((Gce,aI)=>{"use strict";var iI=We(),tp=Mr(),rp=wr().LMDB_ERRORS_ENUM,oW=Et(),oI=Y(),xce=J(),aW=require("lmdb"),cW=sI(),uW=M(),{OVERFLOW_MARKER:Fce,MAX_SEARCH_KEY_LENGTH:qce}=oW,lW=uW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _W(e,t,r,n){if(tp.validateEnv(e),t===void 0)throw new Error(rp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rp.IDS_REQUIRED):new Error(rp.IDS_MUST_BE_ITERABLE);try{let s=iI.listDBIs(e);iI.initializeDBIs(e,t,s);let i=new cW,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[lW]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,aW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<s.length;p++){let g=s[p];if(!h.hasOwnProperty(g)||g===t)continue;let A=e.dbis[g],b=h[g];if(b!=null)try{let v=tp.getIndexedValues(b);if(v)for(let G=0,H=v.length;G<H;G++)A.remove(v[G],o)}catch{oI.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){oI.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=tp.getNextMonotonicTime(),i}catch(s){throw s}}a(_W,"deleteRecords");aI.exports={deleteRecords:_W}});var xc=T((Vce,lI)=>{"use strict";var zo=J(),dW=cI(),fW=We(),{getSchemaPath:EW}=Je(),hW=Bc(),mW=Y();lI.exports=pW;async function pW(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(zo.isEmpty(n))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][n];zo.isEmpty(u)||e.hash_values.push(u)}}if(zo.isEmptyOrZeroLength(e.hash_values))return uI([],[]);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]={[n]:e.hash_values[c]}}let s=EW(e.schema,e.table),i=await fW.openEnvironment(s,e.table),o=await dW.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await hW(e,o)}catch(c){mW.error(`unable to write transaction due to ${c.message}`)}return uI(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(pW,"lmdbDeleteRecords");function uI(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(uI,"createDeleteResponse")});var sp=T((Kce,_I)=>{"use strict";var SW=M(),Yce=Mr();function np(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(np,"parseRow");function TW(e,t,r,n){let s=np(r,e);n.push(s)}a(TW,"searchAll");function gW(e,t,r,n){let s=np(r,e);n[t]=s}a(gW,"searchAllToMap");function RW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(RW,"iterateDBI");function Yi(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(Yi,"pushResults");function AW(e,t,r,n,s,i){t.toString().endsWith(e)&&Yi(t,r,n,s,i)}a(AW,"endsWith");function OW(e,t,r,n,s,i){t.toString().includes(e)&&Yi(t,r,n,s,i)}a(OW,"contains");function bW(e,t,r,n,s,i){t>e&&Yi(t,r,n,s,i)}a(bW,"greaterThanCompare");function NW(e,t,r,n,s,i){t>=e&&Yi(t,r,n,s,i)}a(NW,"greaterThanEqualCompare");function yW(e,t,r,n,s,i){t<e&&Yi(t,r,n,s,i)}a(yW,"lessThanCompare");function IW(e,t,r,n,s,i){t<=e&&Yi(t,r,n,s,i)}a(IW,"lessThanEqualCompare");_I.exports={parseRow:np,searchAll:TW,searchAllToMap:gW,iterateDBI:RW,endsWith:AW,contains:OW,greaterThanCompare:bW,greaterThanEqualCompare:NW,lessThanCompare:yW,lessThanEqualCompare:IW,pushResults:Yi}});var Jo=T((Xce,SI)=>{"use strict";var ti=We(),Qce=Y(),Hr=Mr(),B_=Et(),_t=wr().LMDB_ERRORS_ENUM,zce=J(),wW=M(),H_=sp(),{parseRow:CW}=H_,Jce=require("lmdb"),{OVERFLOW_MARKER:dI,MAX_SEARCH_KEY_LENGTH:DW}=B_;function fI(e,t,r,n=!1,s=void 0,i=void 0){return Ki(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(fI,"iterateFullIndex");function Fc(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ki(e,t,r,(l,d,f,E)=>{let A={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?(A.values=!1,d.getRange(A).map(b=>({value:b}))):d.getRange(A)})}a(Fc,"iterateRangeBetween");function Ki(e,t,r,n){let s=e.database||e,i=ti.openDBI(s,r);i[B_.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(Ki,"setupTransaction");function EI(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(dI)){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[B_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(EI,"getOverflowCheck");function LW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);return Ki(e,t,t,(o,c,u)=>(x_(r),r=qc(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>CW(_.value,r))))}a(LW,"searchAll");function MW(e,t,r,n=!1,s=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);x_(r),r=qc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of fI(e,t,t,n,s,i))o.set(c,H_.parseRow(u,r));return o}a(MW,"searchAllToMap");function UW(e,t,r=!1,n=void 0,s=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(_t.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=fI(e,void 0,t,r,n,s),c=o.transaction,u=EI(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(UW,"iterateDBI");function PW(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);return ti.statDBI(e,t).entryCount}a(PW,"countAll");function vW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Ki(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(vW,"equals");function BW(e,t,r){return ri(e,t,r),ti.openDBI(e,t).getValuesCount(r)}a(BW,"count");function HW(e,t,r,n,s=!1,i=void 0,o=void 0){return ri(e,r,n),Ki(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(HW,"startsWith");function xW(e,t,r,n,s=!1,i=void 0,o=void 0){return hI(e,t,r,n,s,i,o,!0)}a(xW,"endsWith");function hI(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return ri(e,r,n),Ki(e,null,r,(u,_,l,d)=>{let f=EI(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(dI)?_.getValues(E,{transaction:u}).map(S=>{let p=f(E,S);if(c?p.endsWith(n):p.includes(n))return{key:p,value:S}}).filter(S=>S):(c?h.endsWith(n):h.includes(n))?_[B_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(S=>({key:E,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(hI,"contains");function FW(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),Fc(e,t,r,n,u,s,i,o,!0,!1)}a(FW,"greaterThan");function qW(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),Fc(e,t,r,n,u,s,i,o,!1,!1)}a(qW,"greaterThanEqual");function GW(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),Fc(e,t,r,u,n,s,i,o,!1,!0)}a(GW,"lessThan");function kW(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),Fc(e,t,r,u,n,s,i,o,!1,!1)}a(kW,"lessThanEqual");function VW(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(_t.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(_t.START_VALUE_REQUIRED);if(s===void 0)throw new Error(_t.END_VALUE_REQUIRED);if(n=Hr.convertKeyValueToWrite(n),s=Hr.convertKeyValueToWrite(s),n>s)throw new Error(_t.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Fc(e,t,r,n,s,i,o,c)}a(VW,"between");function $W(e,t,r,n){Hr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);if(x_(r),r=qc(s,r),n===void 0)throw new Error(_t.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=H_.parseRow(c,r)),o}a($W,"searchByHash");function YW(e,t,r){Hr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(_t.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(YW,"checkHashExists");function KW(e,t,r,n,s=[]){return pI(e,t,r,n,s),mI(e,t,r,n,s).map(i=>i[1])}a(KW,"batchSearchByHash");function WW(e,t,r,n,s=[]){pI(e,t,r,n,s);let i=new Map;for(let[o,c]of mI(e,t,r,n,s))i.set(o,c);return i}a(WW,"batchSearchByHashToMap");function mI(e,t,r,n,s=[]){return Ki(e,t,t,(i,o,c)=>{r=qc(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,H_.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(mI,"batchHashSearch");function pI(e,t,r,n,s){if(Hr.validateEnv(e),t===void 0)throw new Error(_t.HASH_ATTRIBUTE_REQUIRED);if(x_(r),n==null)throw new Error(_t.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(_t.IDS_MUST_BE_ITERABLE)}a(pI,"initializeBatchSearchByHash");function x_(e){if(!Array.isArray(e))throw e===void 0?new Error(_t.FETCH_ATTRIBUTES_REQUIRED):new Error(_t.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(x_,"validateFetchAttributes");function ri(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(_t.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(_t.SEARCH_VALUE_REQUIRED);if(r?.length>DW)throw new Error(_t.SEARCH_VALUE_TOO_LARGE)}a(ri,"validateComparisonFunctions");function qc(e,t){return t.length===1&&wW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ti.listDBIs(e)),t}a(qc,"setGetWholeRowAttributes");SI.exports={searchAll:LW,searchAllToMap:MW,count:BW,countAll:PW,equals:vW,startsWith:HW,endsWith:xW,contains:hI,searchByHash:$W,setGetWholeRowAttributes:qc,batchSearchByHash:KW,batchSearchByHashToMap:WW,checkHashExists:YW,iterateDBI:UW,greaterThan:FW,greaterThanEqual:qW,lessThan:GW,lessThanEqual:kW,between:VW}});var Xo=T((Zce,OI)=>{var TI=require("lodash"),gI=tt(),Ee=require("joi"),QW=J(),{hdb_schema_table:Gc,checkValidTable:RI,hdb_table:AI,hdb_database:F_}=Yn(),{handleHDBError:zW,hdb_errors:JW}=Z(),{getDatabases:XW}=(Ae(),ee(qe)),{HTTP_STATUS_CODES:jW}=JW,ZW=Ee.object({database:F_,schema:F_,table:AI,search_attribute:Gc,search_value:Ee.any().required(),get_attributes:Ee.array().min(1).items(Ee.alternatives(Gc,Ee.object())).optional(),desc:Ee.bool(),limit:Ee.number().integer().min(1),offset:Ee.number().integer().min(0)}),eQ=Ee.object({database:F_,schema:F_,table:AI,operator:Ee.string().valid("and","or").default("and").lowercase(),offset:Ee.number().integer().min(0),limit:Ee.number().integer().min(1),get_attributes:Ee.array().min(1).items(Ee.alternatives(Gc,Ee.object())).optional(),sort:Ee.object({attribute:Ee.alternatives(Gc,Ee.array().min(1)),descending:Ee.bool().optional()}).optional(),conditions:Ee.array().min(1).items(Ee.alternatives(Ee.object({operator:Ee.string().valid("and","or").default("and").lowercase(),conditions:Ee.array()}),Ee.object({search_attribute:Ee.alternatives(Gc,Ee.array().min(1)),search_type:Ee.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:Ee.when("search_type",{switch:[{is:"equals",then:Ee.any()},{is:"between",then:Ee.array().items(Ee.alternatives([Ee.string(),Ee.number()])).length(2)}],otherwise:Ee.alternatives(Ee.string(),Ee.number())}).required()}))).required()});OI.exports=function(e,t){let r=null;switch(t){case"value":r=gI.validateBySchema(e,ZW);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(RI("database",e.schema)),i(RI("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=gI.validateBySchema(e,eQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=QW.checkGlobalSchemaTable(e.schema,e.table);if(s)return zW(new Error,s,jW.NOT_FOUND);let o=XW()[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 _=TI.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!TI.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 ip=T((tue,bI)=>{"use strict";var tQ=We(),rQ=Xo(),{getSchemaPath:nQ}=Je();bI.exports=sQ;function sQ(e){let t=rQ(e,"hashes");if(t)throw t;let r=nQ(e.schema,e.table);return tQ.openEnvironment(r,e.table)}a(sQ,"initialize")});var op=T((nue,NI)=>{"use strict";var iQ=Jo(),oQ=ip();NI.exports=aQ;async function aQ(e){let t=await oQ(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return iQ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(aQ,"lmdbGetDataByHash")});var jo=T((iue,yI)=>{"use strict";var ap=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};yI.exports=ap});var wI=T((cue,II)=>{"use strict";var aue=jo(),cQ=Jo(),uQ=ip();II.exports=lQ;async function lQ(e){let t=await uQ(e),r=global.hdb_schema[e.schema][e.table];return cQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(lQ,"lmdbSearchByHash")});var zn=T((lue,CI)=>{"use strict";var cp=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}};CI.exports=cp});var q_=T((due,vI)=>{"use strict";var zt=Jo(),_Q=We(),dQ=J(),he=Et(),Wi=M(),fQ=vi(),DI=wr().LMDB_ERRORS_ENUM,{getSchemaPath:EQ}=Je(),Rs=Wi.SEARCH_WILDCARDS;async function hQ(e,t,r){let n;e.schema===Wi.SYSTEM_SCHEMA_NAME?n=fQ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=PI(e,n.hash_attribute,r,t);return MI(e,s,n.hash_attribute,r)}a(hQ,"prepSearch");async function MI(e,t,r,n){let s=EQ(e.schema,e.table),i=await _Q.openEnvironment(s,e.table),o=UI(i,e,t,r),c=o.transaction||i;if([he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,he.SEARCH_TYPES.SEARCH_ALL,he.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(mQ(e,r)===!1){let l=e.search_attribute;if(l===r)return n?LI(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return n?LI(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?zt.batchSearchByHashToMap(c,r,e.get_attributes,_):zt.batchSearchByHash(c,r,e.get_attributes,_)}a(MI,"executeSearch");function UI(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 he.SEARCH_TYPES.EQUALS:s=zt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.CONTAINS:s=zt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.ENDS_WITH:case he.SEARCH_TYPES._ENDS_WITH:s=zt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.STARTS_WITH:case he.SEARCH_TYPES._STARTS_WITH:s=zt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return zt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return zt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case he.SEARCH_TYPES.SEARCH_ALL:return zt.searchAll(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return zt.searchAllToMap(e,n,t.get_attributes,o,c,u);case he.SEARCH_TYPES.BETWEEN:s=zt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN:case he.SEARCH_TYPES._GREATER_THAN:s=zt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.GREATER_THAN_EQUAL:case he.SEARCH_TYPES._GREATER_THAN_EQUAL:s=zt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN:case he.SEARCH_TYPES._LESS_THAN:s=zt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case he.SEARCH_TYPES.LESS_THAN_EQUAL:case he.SEARCH_TYPES._LESS_THAN_EQUAL:s=zt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(UI,"searchByType");function LI(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(LI,"createMapFromIterable");function mQ(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(mQ,"checkToFetchMore");function PI(e,t,r,n){if(dQ.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),Rs.indexOf(s)>-1)return r===!0?he.SEARCH_TYPES.SEARCH_ALL_TO_MAP:he.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Rs[0])<0&&s.indexOf(Rs[1])<0)return c===!0?r===!0?he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:he.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:he.SEARCH_TYPES.EQUALS;if(Rs.indexOf(i)>=0&&Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),he.SEARCH_TYPES.CONTAINS;if(Rs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),he.SEARCH_TYPES.ENDS_WITH;if(Rs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),he.SEARCH_TYPES.STARTS_WITH;if(s.includes(Rs[0])||s.includes(Rs[1]))return he.SEARCH_TYPES.EQUALS;throw new Error(DI.UNKNOWN_SEARCH_TYPE)}else switch(n){case Wi.VALUE_SEARCH_COMPARATORS.BETWEEN:return he.SEARCH_TYPES.BETWEEN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER:return he.SEARCH_TYPES.GREATER_THAN;case Wi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return he.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wi.VALUE_SEARCH_COMPARATORS.LESS:return he.SEARCH_TYPES.LESS_THAN;case Wi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return he.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(DI.UNKNOWN_SEARCH_TYPE)}}a(PI,"createSearchTypeFromSearchObject");vI.exports={executeSearch:MI,createSearchTypeFromSearchObject:PI,prepSearch:hQ,searchByType:UI}});var HI=T((hue,BI)=>{"use strict";var Eue=zn(),pQ=Xo(),SQ=J(),TQ=M(),gQ=q_();BI.exports=RQ;function RQ(e,t){if(!SQ.isEmpty(t)&&TQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=pQ(e,"value");if(n)throw n;return gQ.prepSearch(e,t,!0)}a(RQ,"lmdbGetDataByValue")});var kc=T((Sue,xI)=>{"use strict";var pue=zn(),AQ=Xo(),OQ=J(),bQ=M(),NQ=q_();xI.exports=yQ;async function yQ(e,t){if(!OQ.isEmpty(t)&&bQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=AQ(e,"value");if(n)throw n;return NQ.prepSearch(e,t,!1)}a(yQ,"lmdbSearchByValue")});var qI=T((Rue,FI)=>{"use strict";var gue=Et(),up=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}},lp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},_p=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};FI.exports={SearchByConditionsObject:up,SearchCondition:lp,SortAttribute:_p}});var YI=T((Nue,$I)=>{"use strict";var Oue=qI().SearchByConditionsObject,IQ=zn(),wQ=Xo(),dp=Jo(),G_=Et(),{Resource:bue}=(Nn(),ee(fp)),VI=q_(),CQ=sp(),DQ=require("lodash"),{getSchemaPath:LQ}=Je(),GI=We(),{handleHDBError:MQ,hdb_errors:UQ}=Z(),{HTTP_STATUS_CODES:PQ}=UQ,vQ=1e8;$I.exports=BQ;async function BQ(e){let t=wQ(e,"conditions");if(t)throw MQ(t,t.message,PQ.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=LQ(e.schema,e.table),n=await GI.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)GI.openDBI(n,_.search_attribute);let i=DQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===G_.SEARCH_TYPES.EQUALS?_.estimated_count=dp.count(n,_.search_attribute,_.search_value):l===G_.SEARCH_TYPES.CONTAINS||l===G_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=vQ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await kI(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(VI.filterByType),d=l.length,f=dp.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=>CQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await kI(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=dp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(BQ,"lmdbSearchByConditions");async function kI(e,t,r,n){let s=new IQ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===G_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,VI.searchByType(e,s,i,n).map(o=>o.value)}a(kI,"executeConditionSearch")});var Vc=T((Iue,KI)=>{"use strict";var HQ=M().OPERATIONS_ENUM,Ep=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=HQ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};KI.exports=Ep});var hp=T((Cue,ew)=>{"use strict";var JI=zn(),XI=Vc(),jI=kc(),ZI=xc(),or=M(),WI=J(),QI=We(),{getTransactionAuditStorePath:xQ,getSchemaPath:FQ}=Je(),zI=Y();ew.exports=qQ;async function qQ(e){try{if(WI.isEmpty(global.hdb_schema[e.schema])||WI.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await GQ(e),await kQ(e);let t=FQ(e.schema,e.table);try{await QI.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")zI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=xQ(e.schema,e.table);await QI.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")zI.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(qQ,"lmdbDropTable");async function GQ(e){let t=new JI(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await jI(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 XI(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await ZI(s)}a(GQ,"deleteAttributesFromSystem");async function kQ(e){let t=new JI(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,or.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await jI(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 XI(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await ZI(s)}catch(i){throw i}}a(kQ,"dropTableFromSystem")});var rw=T((Lue,tw)=>{"use strict";var VQ=require("fs-extra"),$Q=zn(),YQ=jo(),KQ=Vc(),WQ=hp(),QQ=xc(),zQ=op(),JQ=kc(),As=M(),{getSchemaPath:XQ}=Je(),{handleHDBError:jQ,hdb_errors:ZQ}=Z(),{HDB_ERROR_MSGS:ez,HTTP_STATUS_CODES:tz}=ZQ;tw.exports=rz;async function rz(e){let t;try{t=await nz(e.schema);let r=new $Q(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await JQ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await WQ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new KQ(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await QQ(s);let i=XQ(t);await VQ.remove(i)}catch(r){throw r}}a(rz,"lmdbDropSchema");async function nz(e){let t=new YQ(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[As.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await zQ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw jQ(new Error,ez.SCHEMA_NOT_FOUND(e),tz.NOT_FOUND,void 0,void 0,!0);return n}a(nz,"validateDropSchema")});var pp=T((Uue,nw)=>{"use strict";var mp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};nw.exports=mp});var iw=T((Bue,sw)=>{"use strict";var sz=require("fs-extra"),k_=We(),{getTransactionAuditStorePath:iz}=Je(),Sp=Et(),vue=pp();sw.exports=oz;async function oz(e){let t;try{let r=iz(e.schema,e.table);await sz.mkdirp(r),t=await k_.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{k_.createDBI(t,Sp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),k_.createDBI(t,Sp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),k_.createDBI(t,Sp.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(oz,"createTransactionsAuditEnvironment")});var uw=T((xue,cw)=>{"use strict";var Tp=M(),ow=We(),az=Fo(),{getSystemSchemaPath:cz,getSchemaPath:uz}=Je(),lz=vi(),_z=m_(),gp=h_(),dz=Y(),fz=iw(),Ap=lz.hdb_table,aw=[];for(let e=0;e<Ap.attributes.length;e++)aw.push(Ap.attributes[e].attribute);cw.exports=Ez;async function Ez(e,t){let r=uz(t.schema,t.table),n=new gp(t.schema,t.table,Tp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new gp(t.schema,t.table,Tp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new gp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await ow.createEnvironment(r,t.table),e!==void 0){let o=await ow.openEnvironment(cz(),Tp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await az.insertRecords(o,Ap.hash_attribute,aw,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Rp(n),await Rp(s),await Rp(i)}await fz(t)}catch(o){throw o}}a(Ez,"lmdbCreateTable");async function Rp(e){try{await _z(e)}catch(t){dz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Rp,"createAttribute")});var _w=T((que,lw)=>{"use strict";var hz=yc(),mz=Lc(),pz=P_(),$c=M(),Sz=Fo().updateRecords,Tz=We(),{getSchemaPath:gz}=Je(),Rz=Bc(),Az=Y();lw.exports=Oz;async function Oz(e){try{let{schema_table:t,attributes:r}=hz(e);mz(e,r,t.hash_attribute),e.schema!==$c.SYSTEM_SCHEMA_NAME&&(r.includes($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push($c.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await pz(e.hdb_auth_header,t,r),s=gz(e.schema,e.table),i=await Tz.openEnvironment(s,e.table),o=await Sz(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Rz(e,o)}catch(c){Az.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(Oz,"lmdbUpdateRecords")});var fw=T((kue,dw)=>{"use strict";var bz=M().OPERATIONS_ENUM,Op=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=bz.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};dw.exports=Op});var hw=T((Yue,Ew)=>{"use strict";var $ue=fw(),Nz=yc(),yz=Lc(),Iz=P_(),Yc=M(),wz=Fo().upsertRecords,Cz=We(),{getSchemaPath:Dz}=Je(),Lz=Bc(),Mz=Y(),{handleHDBError:Uz,hdb_errors:Pz}=Z();Ew.exports=vz;async function vz(e){let t;try{t=Nz(e)}catch(u){throw Uz(u,u.message,Pz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;yz(e,n,r.hash_attribute),e.schema!==Yc.SYSTEM_SCHEMA_NAME&&(n.includes(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Yc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Yc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Iz(e.hdb_auth_header,r,n),i=Dz(e.schema,e.table),o=await Cz.openEnvironment(i,e.table),c=await wz(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Lz(e,c)}catch(u){Mz.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(vz,"lmdbUpsertRecords")});var pw=T((Wue,mw)=>{"use strict";var bp=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};mw.exports=bp});var Tw=T((zue,Sw)=>{"use strict";var Np=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}};Sw.exports=Np});var Aw=T((jue,Rw)=>{"use strict";var yp=We(),{getTransactionAuditStorePath:Bz}=Je(),Xue=pw(),Kc=Et(),Hz=J(),gw=Tw(),xz=require("util").promisify,Fz=xz(setTimeout),qz=1e4,Gz=100;Rw.exports=kz;async function kz(e){let t=Bz(e.schema,e.table),r=await yp.openEnvironment(t,e.table,!0),n=yp.listDBIs(r);yp.initializeDBIs(r,Kc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new gw;do s=await Vz(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 Fz(Gz);while(s.transactions_deleted>0);return i}a(kz,"deleteAuditLogsBefore");async function Vz(e,t){let r=new gw;try{let n=e.dbis[Kc.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[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Hz.isEmpty(c)||(s=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[Kc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>qz)break}return await s,r}catch(n){throw n}}a(Vz,"deleteTransactions")});var bw=T((ele,Ow)=>{"use strict";var Ip=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};Ow.exports=Ip});var yw=T((nle,Nw)=>{"use strict";var $z=zn(),Yz=Vc(),rle=bw(),Jn=M(),Kz=J(),wp=We(),Wz=vi(),Qz=kc(),zz=xc(),{getSchemaPath:Jz}=Je();Nw.exports=Xz;async function Xz(e,t=!0){let r;e.schema===Jn.SYSTEM_SCHEMA_NAME?r=Wz[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Zz(e),s=Jz(e.schema,e.table),i=await wp.openEnvironment(s,e.table);return t===!0&&await jz(e,i,r.hash_attribute),wp.dropDBI(i,e.attribute),n}a(Xz,"lmdbDropAttribute");async function jz(e,t,r){let n=wp.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(jz,"removeAttributeFromAllObjects");async function Zz(e){let t=new $z(Jn.SYSTEM_SCHEMA_NAME,Jn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Qz(t)).filter(o=>o[Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Kz.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Jn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Yz(Jn.SYSTEM_SCHEMA_NAME,Jn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return zz(i)}a(Zz,"dropAttributeFromSystem")});var Mw=T((ole,Lw)=>{"use strict";var Cp=We(),Zo=Et(),ile=Mr(),Dp=M(),Iw=J(),{getTransactionAuditStorePath:eJ}=Je(),tJ=Jo(),V_=Wo(),rJ=Y();Lw.exports=nJ;async function nJ(e){let t=eJ(e.schema,e.table),r=await Cp.openEnvironment(t,e.table,!0),n=Cp.listDBIs(r);Cp.initializeDBIs(r,Zo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Dp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ww(r,e.search_values);case Dp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,iJ(r,e.search_values,s);case Dp.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return sJ(r,e.search_values);default:return ww(r)}}a(nJ,"readAuditLog");function ww(e,t=[0,Date.now()]){Iw.isEmpty(t[0])&&(t[0]=0),Iw.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zo.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 V_,s))}a(ww,"searchTransactionsByTimestamp");function sJ(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[Zo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,Dw(e,i))}return Object.fromEntries(r)}a(sJ,"searchTransactionsByUsername");function iJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=tJ.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);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=Dw(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);Cw(u,"records",r,l,o),Cw(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(iJ,"searchTransactionsByHashValues");function Cw(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 V_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new V_(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(Cw,"loopRecords");function Dw(e,t){let r=[];try{let n=e.dbis[Zo.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 V_,i);r.push(o)}}catch(i){rJ.warn(i)}return r}catch(n){throw n}}a(Dw,"batchSearchTransactions")});var Pw=T((lle,Uw)=>{"use strict";var{getSchemaPath:cle}=Je(),ule=We(),{database:oJ}=(Ae(),ee(qe));Uw.exports={writeTransaction:aJ};async function aJ(e,t,r){return oJ({database:e,table:t}).transaction(r)}a(aJ,"writeTransaction")});var xw=T((dle,Hw)=>{"use strict";var{getSchemaPath:vw}=Je(),Bw=We();Hw.exports={flush:cJ,resetReadTxn:uJ};async function cJ(e,t){return(await Bw.openEnvironment(vw(e,t),t.toString())).flushed}a(cJ,"flush");async function uJ(e,t){try{(await Bw.openEnvironment(vw(e,t),t.toString())).resetReadTxn()}catch{}}a(uJ,"resetReadTxn")});var kw=T((Ele,Gw)=>{"use strict";var{Readable:lJ}=require("stream"),{getDatabases:_J}=(Ae(),ee(qe)),{readSync:dJ,openSync:fJ,createReadStream:Fw}=require("fs"),{open:EJ}=require("lmdb"),qw=i_(),hJ=a_(),{AUDIT_STORE_OPTIONS:mJ}=(Ui(),ee(Vw)),{INTERNAL_DBIS_NAME:pJ,AUDIT_STORE_NAME:SJ}=Et();Gw.exports=gJ;var Lp=32768,TJ=100;async function gJ(e){let t=e.database||e.schema||"data",r=_J()[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:hJ.MAX_DBS}),f,E=d.openDB(pJ,new qw(!1)),h=l.useReadTransaction(),S=0,p=a(async function(A,b){b.encoding="binary",b.encoder=void 0;let v=d.openDB(A,b),G=l.openDB(A,b);for(let{key:H,version:P,value:z}of G.getRange({transaction:h,versions:G.useVersions}))f=v.put(H,z,P),S++%TJ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:A,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(v=>A.startsWith?.(v+"/"))){E.put(A,b);let[,v]=A.split("/"),G=!v,H=new qw(!G,G);await p(A,H)}e.include_audit&&await p(SJ,Object.assign({},mJ)),await f;let g=Fw(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=fJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Lp);dJ(c,_,0,Lp),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=Fw(null,{fd:c,start:Lp}),f=new lJ.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(gJ,"getBackup")});var Kw=T((mle,Yw)=>{"use strict";var RJ=Y(),{handleHDBError:AJ}=Z(),OJ=Ob(),bJ=m_(),NJ=Zm(),yJ=rI(),IJ=xc(),wJ=op(),CJ=wI(),DJ=HI(),LJ=kc(),MJ=YI(),UJ=rw(),PJ=uw(),vJ=_w(),BJ=hw(),HJ=Aw(),xJ=hp(),FJ=yw(),qJ=Mw(),GJ=Pw(),$w=xw(),kJ=kw(),Mp=class extends OJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return MJ(t)}async getDataByHash(t){return await wJ(t)}async searchByHash(t){return await CJ(t)}async getDataByValue(t,r){return await DJ(t,r)}async searchByValue(t){return await LJ(t)}async createSchema(t){return await yJ(t)}async dropSchema(t){return await UJ(t)}async createTable(t,r){return await PJ(t,r)}async dropTable(t){return await xJ(t)}async createAttribute(t){return await bJ(t)}async createRecords(t){return await NJ(t)}async updateRecords(t){return await vJ(t)}async upsertRecords(t){try{return await BJ(t)}catch(r){throw AJ(r,null,null,RJ.ERR,r)}}async deleteRecords(t){return await IJ(t)}async dropAttribute(t){return await FJ(t)}async deleteAuditLogsBefore(t){return await HJ(t)}async readAuditLog(t){return await qJ(t)}writeTransaction(t,r,n){return GJ.writeTransaction(t,r,n)}flush(t,r){return $w.flush(t,r)}resetReadTxn(t,r){return $w.resetReadTxn(t,r)}getBackup(t){return kJ(t)}};Yw.exports=Mp});function KJ(){YJ=setInterval(function(){for(let e of Up)if(e.stale){let t=e[Oe]?.url;Ww.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},$J).unref()}var Pp,Ww,VJ,Up,Qi,$_,$J,YJ,vp=Re(()=>{Pp=B(Mr()),Ww=B(Y());Nn();Ho();VJ=100,Up=new Set,Qi=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,n_(()=>{this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxn.openTimer&&(this.readTxn.openTimer=0)}),Up.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),n_(()=>{this.readTxn.use()}),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Up.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,Pp.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 S=this.writes[h];if(!S)continue;let p=S[f===0?"before":"beforeIntermediate"];if(p){let g=p();E?E.push?E.push(g):E=[E,g]:E=g}}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<VJ>>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=[]}},$_=class extends Qi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Pp.getNextMonotonicTime)())}getReadTxn(){}},$J=3e4;a(KJ,"startMonitoringTxns");KJ()});function Xe(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 Qi;e.timestamp&&(n.timestamp=e.timestamp),n[Oe]=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 Qw,zi=Re(()=>{Qw=require("../../index");Nn();vp();a(Xe,"transaction");(0,Qw._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var nC={};Ke(nC,{ResourceBridge:()=>xp});function Fp({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 Jw(e,t){let r=Xn(e),n=Fp(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;Xe(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&&K_(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 Xn(e){let t=e.database||e.schema||QJ,r=Ln()[t];if(!r)throw(0,Dn.handleHDBError)(new Error,WJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Xw(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*jw(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 Zw,Y_,Dn,eC,tC,Mn,Bp,Hp,rC,WJ,QJ,zJ,JJ,zw,xp,sC=Re(()=>{"use strict";Zw=B(Kw()),Y_=B(Xo()),Dn=B(Z());Ae();eC=B(yc()),tC=B(Lc()),Mn=B(M()),Bp=B(gs()),Hp=B(Cn()),rC=B(J());zi();W_();({HDB_ERROR_MSGS:WJ}=Dn.hdb_errors),QJ="data",zJ=1e4,JJ=10,xp=class extends Zw.default{static{a(this,"ResourceBridge")}constructor(t){super(t),zw=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,Y_.default)(t,"conditions");if(r)throw(0,Dn.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Xn(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:Fp(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}]}lt({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Xn(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Xn(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){Xn(t).dropTable()}createSchema(t){return Wc({database:t.schema,table:null}),Bp.signalSchemaChange(new Hp.SchemaEventMsg(process.pid,Mn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qp(t.schema),Bp.signalSchemaChange(new Hp.SchemaEventMsg(process.pid,Mn.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,zw.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,eC.default)(t);(0,tC.default)(t,n,r.primaryKey);let s,i=Ln()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(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=K_(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=Ln()[t.schema][t.table],n={user:t.hdb_user};return Xe(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 Xw(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Ln()[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:Mn.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,rC.async_set_timeout)(JJ),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%zJ===0&&await _();return u.length>0&&await _(),s?Xw(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Y_.default)(t,"hashes");if(r)throw r;return Jw(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Jw(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Mn.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,Y_.default)(t,"value");if(n)throw n;let s=Xn(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===Mn.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:Fp(t,s)})}async getDataByValue(t,r){let n=new Map,s=Xn(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){Xn({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Xn(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Xn(t),n={};switch(t.search_type){case Mn.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 Mn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of jw(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return jw(r,t.search_values?.[0],t.search_values?.[1])}}};a(Fp,"getSelect");a(Jw,"getRecords");a(Xn,"getTable");a(Xw,"createDeleteResponse");a(jw,"groupRecordsInHistory")});var wn=T((Lle,iC)=>{"use strict";var{ResourceBridge:XJ}=(sC(),ee(nC)),jJ=j();jJ.initSync();var Q_;function ZJ(){return Q_||(Q_=new XJ,Q_)}a(ZJ,"getBridge");iC.exports=ZJ()});var uC=T((Ule,cC)=>{"use strict";var oC=require("lodash"),Qc=require("mathjs"),e2=require("jsonata"),aC=J();cC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?oC.uniqWith(e,oC.isEqual):e,searchJSON:t2,mad:zc.bind(null,Qc.mad),mean:zc.bind(null,Qc.mean),mode:zc.bind(null,Qc.mode),prod:zc.bind(null,Qc.prod),median:zc.bind(null,Qc.median)};function zc(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(zc,"aggregateFunction");function t2(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(aC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),aC.isEmpty(this.__ala__.res[r])){let n=e2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(t2,"searchJSON")});var _C=T((vle,lC)=>{"use strict";var mt=require("moment"),Gp="YYYY-MM-DDTHH:mm:ss.SSSZZ";mt.suppressDeprecationWarnings=!0;lC.exports={current_date:()=>mt().utc().format("YYYY-MM-DD"),current_time:()=>mt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return mt(e).utc().format("YYYY");case"month":return mt(e).utc().format("MM");case"day":return mt(e).utc().format("DD");case"hour":return mt(e).utc().format("HH");case"minute":return mt(e).utc().format("mm");case"second":return mt(e).utc().format("ss");case"millisecond":return mt(e).utc().format("SSS");default:break}},date:e=>mt(e).utc().format(Gp),date_format:(e,t)=>mt(e).utc().format(t),date_add:(e,t,r)=>mt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>mt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=mt(e).utc(),s=mt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>mt().utc().valueOf(),get_server_time:()=>mt().format(Gp),offset_utc:(e,t)=>mt(e).utc().utcOffset(t).format(Gp)}});var hC=T((Ble,EC)=>{"use strict";var r2=require("@turf/area"),n2=require("@turf/length"),s2=require("@turf/circle"),i2=require("@turf/difference"),o2=require("@turf/distance"),a2=require("@turf/boolean-contains"),c2=require("@turf/boolean-equal"),u2=require("@turf/boolean-disjoint"),l2=require("@turf/helpers"),dC=M(),Se=J(),Os=Y();EC.exports={geoArea:_2,geoLength:d2,geoCircle:f2,geoDifference:E2,geoDistance:fC,geoNear:h2,geoContains:m2,geoEqual:p2,geoCrosses:S2,geoConvert:T2};function _2(e){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return r2.default(e)}catch(t){return Os.trace(t,e),NaN}}a(_2,"geoArea");function d2(e,t){if(Se.isEmpty(e))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return n2.default(e,{units:t||"kilometers"})}catch(r){return Os.trace(r,e),NaN}}a(d2,"geoLength");function f2(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e));try{return s2.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(f2,"geoCircle");function E2(e,t){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return i2(e,t)}catch(r){return Os.trace(r,e,t),NaN}}a(E2,"geoDifference");function fC(e,t,r){if(Se.isEmpty(e))return NaN;if(Se.isEmpty(t))return NaN;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return o2.default(e,t,{units:r||"kilometers"})}catch(n){return Os.trace(n,e,t),NaN}}a(fC,"geoDistance");function h2(e,t,r,n){if(Se.isEmpty(e)||Se.isEmpty(t))return!1;if(Se.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return fC(e,t,n)<=r}catch(s){return Os.trace(s,e,t),!1}}a(h2,"geoNear");function m2(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return a2.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(m2,"geoContains");function p2(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return c2.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(p2,"geoEqual");function S2(e,t){if(Se.isEmpty(e)||Se.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Se.autoCastJSON(e)),typeof t=="string"&&(t=Se.autoCastJSON(t));try{return!u2.default(e,t)}catch(r){return Os.trace(r,e,t),!1}}a(S2,"geoCrosses");function T2(e,t,r){if(Se.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Se.isEmpty(t))throw new Error("geo_type is required");if(Se.isEmpty(dC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(dC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Se.autoCastJSON(e)),l2[t](e,r)}a(T2,"geoConvert")});var z_=T((xle,mC)=>{var Ji=uC(),xr=_C(),jn=hC();mC.exports=e=>{e.aggr.mad=e.aggr.MAD=Ji.mad,e.aggr.mean=e.aggr.MEAN=Ji.mean,e.aggr.mode=e.aggr.MODE=Ji.mode,e.aggr.prod=e.aggr.PROD=Ji.prod,e.aggr.median=e.aggr.MEDIAN=Ji.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ji.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ji.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=jn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=jn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=jn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=jn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=jn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=jn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=jn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=jn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=jn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=jn.geoNear}});var gC=T((Fle,TC)=>{"use strict";var Jc=require("lodash"),ar=require("alasql");ar.options.cache=!1;var g2=z_(),pC=require("clone"),J_=require("recursive-iterator"),le=Y(),we=J(),ea=wn(),R2=M(),{hdb_errors:A2}=Z(),{getDatabases:SC}=(Ae(),ee(qe)),O2="IS NULL",Un="There was a problem performing this search. Please check the logs and try again.";g2(ar);var kp=class{static{a(this,"SQLSearch")}constructor(t,r){if(we.isEmpty(t))throw le.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 le.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw le.error("Error thrown from checkEmptySQL in SQLSearch class method search."),le.error(n),new Error(Un)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw le.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),le.error(n),new Error(Un)}if(Object.keys(this.data).length===0)return le.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw le.error("Error thrown from processJoins in SQLSearch class method search."),le.error(n),new Error(Un)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw le.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),le.error(n),new Error(Un)}try{return t=await this._finalSQL(),t}catch(n){throw le.error("Error thrown from finalSQL in SQLSearch class method search."),le.error(n),new Error(Un)}}_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(pC(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=SC()[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)){le.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 ar.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 ar.yy.LogicValue({value:i}):n instanceof ar.yy.StringValue&&we.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new ar.yy.NumValue({value:i}))});if(t){le.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(R2.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 ar.promise(r)}catch(r){throw le.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),le.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(pC(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(O2)>-1&&this.tables.forEach(s=>{let i={columnid:SC()[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 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]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Un)}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 ea.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 le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),le.error(l),new Error(Un)}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 ea.getDataByValue(c,E.operation);if(u)for(let[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,p]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,p[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(l){throw le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),le.error(l),new Error(Un)}else try{c.search_attribute=s.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]=[...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 le.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),le.error(l),new Error(Un)}}}_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 ar.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 ar.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new ar.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 ar.yy.FuncValue:new ar.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,S=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${S}.${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 "${S}.${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 ar.promise(h,t),t=null}catch(E){throw le.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),le.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 S=f[E];o.forEach(p=>{S[p.key]!==null&&S[p.key]!==void 0&&p.keys.add(S[p.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),S=Jc.difference(h,[...E.keys].map(p=>p.toString()));for(let p=0,g=S.length;p<g;p++){let A=S[p];delete this.data[`${E.schema}_${E.table}`].__merged_data[A]}})}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 le.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),le.error(i),new Error(Un)}}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 ea.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 S=s.columns[h],p=E[S]===void 0?null:E[S];this.data[n].__merged_data[f].push(p)}}}}catch(r){throw le.error("Error thrown from getDataByHash function in SQLSearch class method getData."),le.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();le.trace(`Final SQL: ${s}`),n=await ar.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),le.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw le.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),le.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 le.error(A2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),le.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 ea.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 le.error("There was an error when processing this SQL operation. Check your logs"),le.error(o),new Error(Un)}}return Object.values(Object.values(this.data)[0].__merged_data)}};TC.exports=kp});var rn=T((Gle,RC)=>{"use strict";var b2=Rb();RC.exports={searchByConditions:y2,searchByHash:I2,searchByValue:w2,search:C2};var Vp=wn(),{transformReq:$p}=J(),N2=gC();async function y2(e){return $p(e),Vp.searchByConditions(e)}a(y2,"searchByConditions");async function I2(e){$p(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Vp.searchByHash(e))r&&t.push(r);return t}a(I2,"searchByHash");async function w2(e){$p(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Vp.searchByValue(e))t.push(r);return t}a(w2,"searchByValue");function C2(e,t){try{let r=new b2(e);r.validate(),new N2(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(C2,"search")});var X_=T((Vle,AC)=>{"use strict";var D2=wn();AC.exports={writeTransaction:L2};function L2(e,t,r){return D2.writeTransaction(e,t,r)}a(L2,"writeTransaction")});var yC=T((Kle,NC)=>{"use strict";var M2=rn(),U2=Xs(),OC=Y(),P2=nn(),Yle=X_(),v2=require("clone"),Kp=require("alasql"),B2=z_(),bC=require("util"),H2=bC.promisify(U2.getTableSchema),x2=bC.promisify(M2.search),F2=M(),Yp=J();B2(Kp);NC.exports={update:G2};var q2="There was a problem performing this update. Please check the logs and try again.";async function G2({statement:e,hdb_user:t}){let r=await H2(e.table.databaseid,e.table.tableid),n=k2(e.columns);Yp.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=v2(s),c=Yp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Kp.parse(u).statements[0],l=await x2(_),d=V2(n,l);return $2(o,d,t)}a(G2,"update");function k2(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Kp.compile(`SELECT ${r.expression.toString()} AS [${F2.FUNC_VAL}] FROM ?`)}),t}catch(t){throw OC.error(t),new Error(q2)}}a(k2,"createUpdateRecord");function V2(e,t){return Yp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(V2,"buildUpdateRecords");async function $2(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await P2.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){OC.error(`Error delete new_attributes from update response: ${i}`)}return s}a($2,"updateRecords")});var wC=T((Jle,IC)=>{var Y2=require("alasql"),K2=rn(),W2=Y(),Q2=wn(),Qp=require("util"),Wp=J(),z2=M(),J2=Xs(),Qle=X_(),zle=nn(),X2="record",j2="successfully deleted",Z2=Qp.callbackify(n4),e4=Qp.promisify(K2.search),t4=Qp.promisify(J2.getTableSchema);IC.exports={convertDelete:Z2};function r4(e){return`${e.deleted_hashes.length} ${X2}${e.deleted_hashes.length===1?"":"s"} ${j2}`}a(r4,"generateReturnMessage");async function n4({statement:e,hdb_user:t}){let r=await t4(e.table.databaseid,e.table.tableid);Wp.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Wp.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Y2.parse(o).statements[0],u={operation:z2.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await e4(c);let _=await Q2.deleteRecords(u);return Wp.isEmptyOrZeroLength(_.message)&&(_.message=r4(_)),delete _.txn_time,_}catch(_){throw W2.error(_),_.hdb_code?_.message:_}}a(n4,"convertDelete")});var UC=T((jle,MC)=>{"use strict";var s4=Hi(),{hdb_errors:CC}=Z(),{getDatabases:DC}=(Ae(),ee(qe));MC.exports={checkSchemaExists:LC,checkSchemaTableExists:i4,schema_describe:s4};async function LC(e){if(!DC()[e])return CC.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(LC,"checkSchemaExists");async function i4(e,t){let r=await LC(e);if(r)return r;if(!DC()[e][t])return CC.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(i4,"checkSchemaTableExists")});var Xc=T((e_e,o4)=>{o4.exports={name:"harperdb",version:"4.3.0-beta.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.3-beta.3-debug",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 tu={};Ke(tu,{addAnalyticsListener:()=>eu,recordAction:()=>Fr,recordActionBinary:()=>on,setAnalyticsEnabled:()=>a4});function a4(e){VC=e}function Fr(e,t,r,n,s){if(!VC)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=ed.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},ed.set(i,o)}j_||c4()}function on(e,t,r,n,s){Fr(!!e,t,r,n,s)}function eu(e){KC.push(e)}function c4(){j_=performance.now(),setTimeout(async()=>{let e=performance.now()-j_;j_=0;let t=[],r={time:Date.now(),period:e,threadId:Xi.threadId,metrics:t};for(let[s,i]of ed){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 WC){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let S=_[_.length-1];typeof S=="number"?_[_.length-1]={value:S,count:1+h}:S.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 QC()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Xi.threadId,byThread:!0,...n});for(let s of KC)s(t);ed=new Map,Xi.parentPort?Xi.parentPort.postMessage({type:YC,report:r}):XC({report:r})},$C).unref()}async function u4(e,t=6e4){let r=Xp(),n=zC(),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:S}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:p,threadId:g}=S;for(let A of p||[]){let{path:b,method:v,type:G,metric:H,count:P,total:z,distribution:W,threads:Q,...se}=A;P||(P=1);let pe=H+(b?"-"+b:"");v!==void 0&&(pe+="-"+v),G!==void 0&&(pe+="-"+G);let oe=o.get(pe);if(oe){if(oe.threads){let ce=oe.threads[g];if(ce)oe=ce;else{oe.threads[g]=Object.assign({},se);continue}}oe.count||(oe.count=1);let Fe=oe.count;for(let ce in se){let Lt=se[ce];typeof Lt=="number"&&(oe[ce]=(oe[ce]*Fe+Lt*P)/(Fe+P))}oe.count+=P,z>=0&&(oe.total+=z,oe.ratio=oe.total/oe.count)}else oe=Object.assign({period:t},A),delete oe.distribution,o.set(pe,oe),oe.byThread&&(oe.threads=[],oe.threads[g]=Object.assign({},se),u.push(oe));if(W){W=W.map(ce=>typeof ce=="number"?{value:ce,count:1}:ce);let Fe=c.get(pe);Fe?Fe.push(...W):c.set(pe,W)}}await QC()}for(let h of u){let{path:S,method:p,type:g,metric:A,count:b,total:v,distribution:G,threads:H,...P}=h;H=H.filter(z=>z);for(let z in P){if(typeof h[z]!="number")continue;let W=0;for(let Q of H){let se=Q[z];typeof se=="number"&&(W+=se)}h[z]=W}h.count=H.length,delete h.threads,delete h.byThread}for(let[h,S]of c){let p=o.get(h);S.sort((ce,Lt)=>ce.value>Lt.value?1:-1);let g=p.count-1,A=[],b=0,v=0,G;for(let ce of WC){let Lt=g*ce;for(;b<Lt;)G=S[v++],b+=G.count,v===1&&b--;let Il=S[v>1?v-2:0];G||(G=S[0]),A.push(G.value-(G.value-Il.value)*(b-Lt)/G.count)}let[H,P,z,W,Q,se,pe,oe,Fe]=A;Object.assign(p,{p1:H,p10:P,p25:z,median:W,p75:Q,p90:se,p95:pe,p99:oe,p999:Fe})}let l;for(let[h,S]of o)S.id=(0,Z_.getNextMonotonicTime)(),S.time=_,n.primaryStore.put(S.id,S,{append:!0}).then(p=>{p||n.primaryStore.put(S.id,S)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,Z_.getNextMonotonicTime)(),S={id:h,metric:"main-thread-utilization",idle:f-PC,active:E-vC,time:d,...process.memoryUsage()};n.primaryStore.put(h,S,{append:!0}).then(p=>{p||n.primaryStore.put(h,S)})}PC=f,vC=E}async function BC(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Xp(){return HC||(HC=lt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function zC(){return xC||(xC=lt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function d4(){JC=!0;let e=(0,Zc.get)(Jp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await u4($C,e),await BC(Xp(),l4),await BC(zC(),_4)},Math.min(e/2,2147483647)).unref()}function XC(e,t){let r=e.report;r.threadId=t?.threadId||Xi.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(FC+=n.mean*n.count);r.totalBytesProcessed=FC,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(qC.get(t))}),qC.set(t,t.performance.eventLoopUtilization())),r.id=(0,Z_.getNextMonotonicTime)(),Xp().primaryStore.put(r.id,r),JC||d4(),f4&&(jC=h4(r))}async function h4(e){if(await jC,!ni){let r=(0,jc.dirname)((0,kC.getLogFilePath)());try{ni=await(0,zp.open)((0,jc.join)(r,"analytics.log"),"r+")}catch{ni=await(0,zp.open)((0,jc.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 Xi,GC,kC,jc,zp,Z_,Zc,Jp,ed,VC,j_,$C,YC,KC,WC,PC,vC,QC,l4,_4,HC,xC,JC,FC,qC,f4,jC,ni,E4,bs=Re(()=>{Xi=require("worker_threads"),GC=B(rt());Ae();kC=B(Y()),jc=require("path"),zp=require("fs/promises"),Z_=B(Mr()),Zc=B(j()),Jp=B(M());rr();(0,Zc.initSync)();ed=new Map,VC=(0,Zc.get)(Jp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(a4,"setAnalyticsEnabled");a(Fr,"recordAction");ut.recordAnalytics=Fr;a(on,"recordActionBinary");j_=0,$C=1e3,YC="analytics-report",KC=[];a(eu,"addAnalyticsListener");WC=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(c4,"sendAnalytics");a(u4,"aggregation");PC=0,vC=0,QC=a(()=>new Promise(setImmediate),"rest");a(BC,"cleanup");l4=36e5,_4=31536e6;a(Xp,"getRawAnalyticsTable");a(zC,"getAnalyticsTable");(0,GC.setChildListenerByType)(YC,XC);a(d4,"startScheduledTasks");FC=0,qC=new Map,f4=!1;a(XC,"recordAnalytics");E4=1e6;a(h4,"logAnalytics")});var Nt=T((E_e,SD)=>{"use strict";var Gt=j();Gt.initSync();var m4=require("fs-extra"),p4=require("semver"),su=require("path"),{monotonicFactory:S4}=require("ulidx"),eD=S4(),T4=require("util"),tD=require("child_process"),g4=T4.promisify(tD.exec),R4=tD.spawn,be=st(),Pe=M(),tS=J(),qr=Y(),td=Ts(),A4=X_(),ru=Lr(),{onMessageByType:O4}=rt(),{isMainThread:b4}=require("worker_threads"),{Encoder:N4,decode:rS}=require("msgpackr"),rD=new N4,{isEmpty:to}=tS,nD=sn(),y4=48*36e11,I4=5e9;b4&&O4(Pe.ITC_EVENT_TYPES.RESTART,()=>{an=void 0,eo=void 0});var{connect:w4,StorageType:sD,RetentionPolicy:iD,AckPolicy:rd,DeliverPolicy:nd,DiscardPolicy:C4,NatsConnection:l_e,JetStreamManager:__e,JetStreamClient:d_e,StringCodec:f_e,JSONCodec:D4,createInbox:nS,headers:L4,ErrorCode:ZC}=require("nats"),{PACKAGE_ROOT:M4}=M(),U4=Xc(),{recordAction:P4}=(bs(),ee(tu)),oD=D4(),v4="clustering",B4=U4.engines[be.NATS_SERVER_NAME],H4=su.join(M4,"dependencies"),eS=su.join(H4,`${process.platform}-${process.arch}`,be.NATS_BINARY_NAME),jp,Zp,nu,ji,Zi;SD.exports={runCommand:aD,checkNATSServerInstalled:x4,createConnection:sS,getConnection:sd,getJetStreamManager:iu,getJetStream:uD,getNATSReferences:cr,getServerList:q4,createLocalStream:iS,listStreams:lD,deleteLocalStream:G4,getServerConfig:ou,listRemoteStreams:k4,viewStream:V4,viewStreamIterator:$4,publishToStream:Y4,createWorkQueueStream:K4,addSourceToWorkStream:dD,request:Q4,removeSourceFromWorkStream:ED,reloadNATS:oS,reloadNATSHub:z4,reloadNATSLeaf:J4,extractServerName:fD,requestErrorHandler:X4,updateWorkStream:j4,createLocalTableStream:mD,createTableStreams:Z4,purgeTableStream:pD,purgeSchemaTableStreams:e3,getStreamInfo:t3,updateLocalStreams:n3,closeConnection:F4,getJsmServerName:au,addNatsMsgHeader:_D,updateIngestStreamConsumer:W4,clearClientCache:cD};async function aD(e,t=void 0){let{stdout:r,stderr:n}=await g4(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(ZC,"runCommand");async function g4(){try{await j2.access(Qp)}catch{return!1}let e=await ZC(`${Qp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Z2.eq(t,S4)}a(g4,"checkNATSServerInstalled");async function jp(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await zC.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 l4({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),eL()}),i}a(jp,"createConnection");function eL(){sn=void 0,Zi=void 0,eo=void 0,to=void 0}a(eL,"clearClientCache");async function R4(){sn&&(await sn.drain(),sn=void 0,Zi=void 0,eo=void 0,to=void 0)}a(R4,"closeConnection");var sn,to;async function sd(){return to||(to=jp(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),sn=await to),sn||to}a(sd,"getConnection");async function ou(){if(Zi)return Zi;ro(sn)&&await sd();let{domain:e}=au(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(ou,"getJetStreamManager");async function tL(){if(eo)return eo;ro(sn)&&await sd();let{domain:e}=au(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(tL,"getJetStream");async function ur(){let e=sn||await sd(),t=Zi||await ou(),r=eo||await tL();return{connection:e,jsm:t,js:r}}a(ur,"getNATSReferences");async function A4(e){let t=Gt.get(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await zC.getClusterUser(),s=await jp(t,r,n),i=Xp(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=jC.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(A4,"getServerList");async function Zp(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:JC.File,retention:XC.Limits,subjects:t,discard:_4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Zp,"createLocalStream");async function rL(){let{jsm:e}=await ur(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(rL,"listStreams");async function O4(e){let{jsm:t}=await ur();await t.streams.delete(e)}a(O4,"deleteLocalStream");async function b4(e){let{connection:t}=await ur(),r=[],n=Xp(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(jC.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(b4,"listRemoteStreams");async function N4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=KC(),o={durable_name:i,ack_policy:rd.Explicit};t&&(o.deliver_policy=nd.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=Jp(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(N4,"viewStream");async function*y4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await ur(),i=KC(),o={durable_name:i,ack_policy:rd.Explicit};t&&(o.deliver_policy=nd.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=Jp(_.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(y4,"viewStreamIterator");async function I4(e,t,r,n){Fr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=nL(n,r);let{js:s}=await ur(),i=await cu(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:QC.encode(n);try{Fr.trace(`publishToStream publishing to subject: ${o}`),m4(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 aL(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 Zp(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(I4,"publishToStream");function nL(e,t){t===void 0&&(t=f4());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(nL,"addNatsMsgHeader");function au(e){e=e.toLowerCase();let t=iu.join(Gt.get(Me.CONFIG_PARAMS.ROOTPATH),p4);if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ro(Wp)&&(Wp={port:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:iu.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),Wp;if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ro(Kp)&&(Kp={port:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:nu.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:iu.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),Kp;Fr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(au,"getServerConfig");async function w4(e){let{jsm:t}=await ur(),r=await cu();try{await t.streams.add({name:e.stream_name,storage:JC.File,retention:XC.Limits,max_age:c4,max_bytes:u4,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:rd.Explicit,durable_name:e.durable_name,deliver_policy:nd.All,max_ack_pending:1e4});else throw n}}a(w4,"createWorkQueueStream");async function C4(){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:rd.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:nd.All,max_ack_pending:1e4}))}a(C4,"updateIngestStreamConsumer");async function sL(e,t,r){let{jsm:n}=await ur(),s=await n.streams.info(t),i=iL(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=td.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(sL,"addSourceToWorkStream");function iL(e){return e.split(".")[1]}a(iL,"extractServerName");async function oL(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=td.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(oL,"removeSourceFromWorkStream");async function L4(e,t,r=6e4,n=Xp()){if(!zp.isObject(t))throw new Error("data param must be an object");let s=QC.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 Jp(c.data)}a(L4,"request");function eS(e){return new Promise(async(t,r)=>{let n=n4(Qp,["--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(eS,"reloadNATS");async function D4(){let{pid_file_path:e}=au(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await eS(e)}a(D4,"reloadNATSHub");async function M4(){let{pid_file_path:e}=au(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await eS(e)}a(M4,"reloadNATSLeaf");function U4(e,t,r){let n;switch(e.code){case YC.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case YC.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(U4,"requestErrorHandler");async function P4(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await aL(async()=>{e.subscribe===!0?await sL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await oL(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(P4,"updateWorkStream");function aL(e){return s4.writeTransaction(Me.SYSTEM_SCHEMA_NAME,Me.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(aL,"exclusiveLock");async function cL(e,t){let r=td.createNatsTableStreamName(e,t),n=await cu(),s=x4(e,t,n);await Zp(r,[s])}a(cL,"createLocalTableStream");async function v4(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await cL(n,s)}}a(v4,"createTableStreams");async function uL(e,t,r=!1){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=td.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(uL,"purgeTableStream");async function B4(e,t){if(Gt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await uL(e,t[r])}a(B4,"purgeSchemaTableStreams");async function H4(e){return(await ou()).streams.info(e)}a(H4,"getStreamInfo");function x4(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(x4,"createSubjectName");async function cu(){if(su)return su;if(su=(await ou())?.nc?.info?.server_name,su===void 0)throw new Error("Unable to get jetstream manager server name");return su}a(cu,"getJsmServerName");async function F4(){let e=await ou(),t=await cu(),r=await rL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=q4(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(F4,"updateLocalStreams");function q4(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(q4,"updateStreamLimits")});var cd=T((Wle,EL)=>{"use strict";var ta=E_(),ra=NC(),G4=V(),k4=require("uuid").v4,Kle=require("clone"),od=Rs(),na=M(),V4=require("util"),si=Cn(),{handleHDBError:lr,hdb_errors:$4}=Z(),{HDB_ERROR_MSGS:id,HTTP_STATUS_CODES:_r}=$4,{SchemaEventMsg:ad}=Ln(),_L=It(),{getDatabases:Y4}=(ge(),ee(xe)),{transformReq:sa}=J();EL.exports={createSchema:K4,createSchemaStructure:dL,createTable:W4,createTableStructure:fL,createAttribute:j4,dropSchema:Q4,dropTable:z4,dropAttribute:J4,getBackup:Z4};async function K4(e){let t=await dL(e);return od.signalSchemaChange(new ad(process.pid,e.operation,e.schema)),t}a(K4,"createSchema");async function dL(e){let t=ta.schema_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(sa(e),!await ra.checkSchemaExists(e.schema))throw lr(new Error,id.SCHEMA_EXISTS_ERR(e.schema),_r.BAD_REQUEST,na.LOG_LEVELS.ERROR,id.SCHEMA_EXISTS_ERR(e.schema),!0);return await si.createSchema(e),`database '${e.schema}' successfully created`}a(dL,"createSchemaStructure");async function W4(e){return sa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await fL(e)}a(W4,"createTable");async function fL(e){let t=ta.create_table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);if(ta.validateTableResidence(e.residence),!await ra.checkSchemaTableExists(e.schema,e.table))throw lr(new Error,id.TABLE_EXISTS_ERR(e.schema,e.table),_r.BAD_REQUEST,na.LOG_LEVELS.ERROR,id.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(fL,"createTableStructure");async function Q4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ta.schema_object(e),n=t??r;if(n)throw lr(n,n.message,_r.BAD_REQUEST,void 0,void 0,!0);sa(e);let s=await ra.checkSchemaExists(e.schema);if(s)throw lr(new Error,s,_r.NOT_FOUND,na.LOG_LEVELS.ERROR,s,!0);let i=await ra.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await si.dropSchema(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema)),await _L.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Q4,"dropSchema");async function z4(e){let t=ta.table_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);return await si.dropTable(e),await _L.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(z4,"dropTable");async function J4(e){let t=ta.attribute_object(e);if(t)throw lr(t,t.message,_r.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw lr(new Error,r,_r.NOT_FOUND,na.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(na.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),X4(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw G4.error(`Got an error deleting attribute ${V4.inspect(e)}.`),n}}a(J4,"dropAttribute");function X4(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(X4,"dropAttributeFromGlobal");async function j4(e){sa(e);let t=Y4()[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),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(j4,"createAttribute");function Z4(e){return si.getBackup(e)}a(Z4,"getBackup")});var mL=T((zle,hL)=>{"use strict";var{OPERATIONS_ENUM:e3}=M(),tS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=e3.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};hL.exports=tS});var rS=T((jle,RL)=>{"use strict";var t3=Cn(),Xle=mL(),ud=J(),ld=M(),r3=j(),{handleHDBError:pL,hdb_errors:n3}=Z(),{HDB_ERROR_MSGS:SL,HTTP_STATUS_CODES:TL}=n3,s3=Object.values(ld.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),gL="To use this operation audit log must be enabled in harperdb-config.yaml";RL.exports=i3;async function i3(e){if(ud.isEmpty(e.schema))throw new Error(SL.SCHEMA_REQUIRED_ERR);if(ud.isEmpty(e.table))throw new Error(SL.TABLE_REQUIRED_ERR);if(!r3.get(ld.CONFIG_PARAMS.LOGGING_AUDITLOG))throw pL(new Error,gL,TL.BAD_REQUEST,ld.LOG_LEVELS.ERROR,gL,!0);let t=ud.checkSchemaTableExist(e.schema,e.table);if(t)throw pL(new Error,t,TL.NOT_FOUND,ld.LOG_LEVELS.ERROR,t,!0);if(!ud.isEmpty(e.search_type)&&s3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await t3.readAuditLog(e)}a(i3,"readAuditLog")});var OL=T((e_e,AL)=>{"use strict";var{OPERATIONS_ENUM:o3}=M(),nS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=o3.GET_BACKUP,this.schema=t,this.table=r}};AL.exports=nS});var yL=T((s_e,NL)=>{"use strict";var a3=Cn(),r_e=OL(),sS=J(),c3=M(),n_e=j(),{handleHDBError:u3,hdb_errors:l3}=Z(),{HDB_ERROR_MSGS:bL,HTTP_STATUS_CODES:_3}=l3;NL.exports=d3;async function d3(e){if(sS.isEmpty(e.schema))throw new Error(bL.SCHEMA_REQUIRED_ERR);if(sS.isEmpty(e.table))throw new Error(bL.TABLE_REQUIRED_ERR);let t=sS.checkSchemaTableExist(e.schema,e.table);if(t)throw u3(new Error,t,_3.NOT_FOUND,c3.LOG_LEVELS.ERROR,t,!0);return await a3.getBackup(read_audit_log_object)}a(d3,"getBackup")});var ML=T((o_e,DL)=>{var ii=require("validate.js"),wL=et(),ia=M(),{handleHDBError:f3,hdb_errors:E3}=Z(),{HDB_ERROR_MSGS:ft,HTTP_STATUS_CODES:h3}=E3,iS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),m3={STRUCTURE_USER:"structure_user"},IL=Object.values(ia.ROLE_TYPES_ENUM),p3="attribute_permissions",S3="attribute_name",{PERMS_CRUD_ENUM:oa}=ia,T3=[p3,...Object.values(oa)],CL=[oa.READ,oa.INSERT,oa.UPDATE],g3=[S3,...CL];function R3(e){let t=iS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,LL(e,t)}a(R3,"addRoleValidation");function A3(e){let t=iS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,LL(e,t)}a(A3,"alterRoleValidation");function O3(e){let t=iS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,wL.validateObject(e,t)}a(O3,"dropRoleValidation");var b3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function LL(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)b3.includes(n[o])||s.push(n[o]);s.length>0&&St(ft.INVALID_ROLE_JSON_KEYS(s),r);let i=wL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{St(o,r)}),e.permission){let o=N3(e);o&&St(o,r),IL.forEach(c=>{e.permission[c]&&!ii.isBoolean(e.permission[c])&&St(ft.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(IL.indexOf(o)<0){if(o===m3.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]||St(ft.SCHEMA_NOT_FOUND(d),r)}continue}St(ft.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){St(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]){St(ft.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{T3.includes(l)||St(ft.INVALID_PERM_KEY(l),r,o,u)}),Object.values(oa).forEach(l=>{ii.isDefined(_[l])?ii.isBoolean(_[l])||St(ft.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):St(ft.TABLE_PERM_MISSING(l),r,o,u)}),ii.isDefined(_.attribute_permissions)){if(!ii.isArray(_.attribute_permissions)){St(ft.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{St(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=>{!g3.includes(p)&&p!==oa.DELETE&&St(ft.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ii.isDefined(E.attribute_name)){St(ft.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){St(ft.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}CL.forEach(p=>{ii.isDefined(E[p])?ii.isBoolean(E[p])||St(ft.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):St(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}`;St(ft.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return y3(r)}a(LL,"customValidate");DL.exports={addRoleValidation:R3,alterRoleValidation:A3,dropRoleValidation:O3};function N3(e){let{operation:t,permission:r}=e;if(t===ia.OPERATIONS_ENUM.ADD_ROLE||t===ia.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?ia.ROLE_TYPES_ENUM.SUPER_USER:ia.ROLE_TYPES_ENUM.CLUSTER_USER;return ft.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(N3,"validateNoSUPerms");function y3(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 f3(new Error,n,h3.BAD_REQUEST)}else return null}a(y3,"generateRolePermResponse");function St(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(St,"addPermError")});var _S=T((c_e,BL)=>{"use strict";var UL=tn(),PL=en(),I3=Vi(),aS=ML(),cS=Rs(),w3=require("uuid").v4,C3=require("util"),_d=M(),L3=J(),uS=PL.searchByValue,D3=PL.searchByHash,M3=C3.promisify(I3.delete),U3=Jn(),P3=jo(),{hdb_errors:v3,handleHDBError:no}=Z(),{HDB_ERROR_MSGS:vL,HTTP_STATUS_CODES:uu}=v3,{UserEventMsg:lS}=Ln();BL.exports={addRole:B3,alterRole:H3,dropRole:x3,listRoles:F3};function oS(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(oS,"scrubRoleDetails");async function B3(e){let t=aS.addRoleValidation(e);if(t)throw t;e=oS(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 uS(r)||[])}catch(i){throw no(i)}if(n&&n.length>0)throw no(new Error,vL.ROLE_ALREADY_EXISTS(e.role),uu.CONFLICT,void 0,void 0,!0);e.id||(e.id=w3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await UL.insert(s),cS.signalUserChange(new lS(process.pid)),e=oS(e),e}a(B3,"addRole");async function H3(e){let t=aS.alterRoleValidation(e);if(t)throw t;e=oS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await UL.update(r)}catch(s){throw no(s)}if(n&&n?.message==="updated 0 of 1 records")throw no(new Error,"Invalid role id",uu.BAD_REQUEST,void 0,void 0,!0);return await cS.signalUserChange(new lS(process.pid)),e}a(H3,"alterRole");async function x3(e){let t=aS.dropRoleValidation(e);if(t)throw no(new Error,t,uu.BAD_REQUEST,void 0,void 0,!0);let r=new P3(_d.SYSTEM_SCHEMA_NAME,_d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await D3(r));if(n.length===0)throw no(new Error,vL.ROLE_NOT_FOUND,uu.NOT_FOUND,void 0,void 0,!0);let s=new U3(_d.SYSTEM_SCHEMA_NAME,_d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await uS(s)),o=!1;if(L3.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`,uu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await M3(c),cS.signalUserChange(new lS(process.pid)),`${n[0].role} successfully deleted`}a(x3,"dropRole");async function F3(){return uS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(F3,"listRoles")});var qL=T((l_e,FL)=>{"use strict";var q3=j(),oi=require("joi"),G3=et(),HL=require("moment"),k3=require("fs-extra"),dS=require("path"),V3=require("lodash"),lu=M(),{LOG_LEVELS:so}=M(),$3="YYYY-MM-DD hh:mm:ss",Y3=dS.resolve(__dirname,"../logs");FL.exports=function(e){return G3.validateBySchema(e,K3)};var K3=oi.object({from:oi.custom(xL),until:oi.custom(xL),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(W3)});function xL(e,t){if(HL(e,HL.ISO_8601).format($3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(xL,"validateDatetime");function W3(e,t){if(V3.invert(lu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=q3.get(lu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?lu.LOG_NAMES.HDB:e,i=s===lu.LOG_NAMES.INSTALL?dS.join(Y3,lu.LOG_NAMES.INSTALL):dS.join(n,s);return k3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(W3,"validateReadLogPath")});var ES=T((d_e,kL)=>{"use strict";var dd=M(),Q3=V(),z3=j(),J3=qL(),fS=require("path"),GL=require("fs-extra"),{once:X3}=require("events"),{handleHDBError:j3,hdb_errors:Z3}=Z(),{PACKAGE_ROOT:eX}=M(),tX=fS.join(eX,"logs"),rX=1e3,nX=200;kL.exports=sX;async function sX(e){let t=J3(e);if(t)throw j3(t,t.message,Z3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=z3.get(dd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?dd.LOG_NAMES.HDB:e.log_name,s=n===dd.LOG_NAMES.INSTALL?fS.join(tX,dd.LOG_NAMES.INSTALL):fS.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?rX: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(GL.statSync(s).size-(h+5)*nX,0));let S=GL.createReadStream(s,{start:p});S.on("error",F=>{Q3.error(F)});let A=0,I=[],w="",B;S.on("data",F=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=w+F;let Q=0,Y;for(;(Y=P.exec(F))&&!S.destroyed;){B&&(B.message=F.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=F.slice(Q)}),S.on("end",F=>{S.destroyed||B&&(B.message=w.trim(),K(B))}),S.resume();function K(F){let P,Q,Y;switch(!0){case(i&&c&&_):P=new Date(F.timestamp),Q=new Date(u),Y=new Date(l),F.level===o&&P>=Q&&P<=Y&&A<E?A++:F.level===o&&P>=Q&&P<=Y&&(ai(F,f,I),A++,A===h&&S.destroy());break;case(i&&c):P=new Date(F.timestamp),Q=new Date(u),F.level===o&&P>=Q&&A<E?A++:F.level===o&&P>=Q&&(ai(F,f,I),A++,A===h&&S.destroy());break;case(i&&_):P=new Date(F.timestamp),Y=new Date(l),F.level===o&&P<=Y&&A<E?A++:F.level===o&&P<=Y&&(ai(F,f,I),A++,A===h&&S.destroy());break;case(c&&_):P=new Date(F.timestamp),Q=new Date(u),Y=new Date(l),P>=Q&&P<=Y&&A<E?A++:P>=Q&&P<=Y&&(ai(F,f,I),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(ai(F,f,I),A++,A===h&&S.destroy());break;case c:P=new Date(F.timestamp),Q=new Date(u),P>=Q&&A<E?A++:P>=Q&&A>=E&&(ai(F,f,I),A++,A===h&&S.destroy());break;case _:P=new Date(F.timestamp),Y=new Date(l),P<=Y&&A<E?A++:P<=Y&&A>=E&&(ai(F,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(ai(F,f,I),A++,A===h&&S.destroy())}}return a(K,"onLogMessage"),await X3(S,"close"),I}a(sX,"readLog");function ai(e,t,r){t==="desc"?iX(e,r):t==="asc"?oX(e,r):r.push(e)}a(ai,"pushLineToResult");function iX(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(iX,"insertDescending");function oX(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(oX,"insertAscending")});var fd=T((p_e,KL)=>{"use strict";var hS=require("joi"),{string:_u,boolean:VL,date:aX}=hS.types(),cX=et(),{validateSchemaExists:E_e,validateTableExists:h_e,validateSchemaName:m_e}=Kn(),uX=M(),lX=nt(),$L=j();$L.initSync();var _X=_u.invalid($L.get(uX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(lX.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(),YL={operation:_u.valid("add_node","update_node","set_node_replication"),node_name:_X,subscriptions:hS.array().items({table:_u.optional(),schema:_u.optional(),database:_u.optional(),subscribe:VL.required(),publish:VL.required().custom(fX),start_time:aX.iso()}).min(1).required()};function dX(e){return cX.validateBySchema(e,hS.object(YL))}a(dX,"addUpdateNodeValidator");function fX(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(fX,"checkForFalsy");KL.exports={addUpdateNodeValidator:dX,validation_schema:YL}});var QL=T((T_e,WL)=>{var EX=et(),hX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};WL.exports=function(e){return EX.validateObject(e,hX)}});var pS=T((g_e,zL)=>{"use strict";var mX=M().OPERATIONS_ENUM,mS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=mX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};zL.exports=mS});var XL=T((A_e,JL)=>{"use strict";var pX={OPERATION:"operation",REFRESH:"refresh"},SS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},TS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};JL.exports={JWTTokens:SS,TOKEN_TYPE_ENUM:pX,JWTRSAKeys:TS}});var Eu=T((b_e,tD)=>{"use strict";var fu=require("jsonwebtoken"),gS=require("fs-extra"),RS=J(),on=M(),{handleHDBError:dr,hdb_errors:SX}=Z(),{HTTP_STATUS_CODES:fr,AUTHENTICATION_ERROR_MSGS:Er}=SX,du=V(),jL=I_(),bS=rn(),TX=tn().update,gX=pS(),RX=Rs(),{UserEventMsg:AX}=Ln(),ci=j();ci.initSync();var AS=require("path"),{JWTTokens:OX,JWTRSAKeys:bX,TOKEN_TYPE_ENUM:Ed}=XL(),NX=ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",yX=ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ci.get(on.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",hd="RS256",OS;tD.exports={createTokens:IX,validateOperationToken:CX,refreshOperationToken:wX,validateRefreshToken:eD};async function IX(e){if(RS.isEmpty(e)||typeof e!="object")throw dr(new Error,Er.INVALID_AUTH_OBJECT,fr.BAD_REQUEST,void 0,void 0,!0);if(RS.isEmpty(e.username))throw dr(new Error,Er.USERNAME_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);if(RS.isEmpty(e.password))throw dr(new Error,Er.PASSWORD_REQUIRED,fr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await bS.findAndValidateUser(e.username,e.password),!t)throw dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw du.error(f),dr(new Error,Er.INVALID_CREDENTIALS,fr.UNAUTHORIZED,void 0,void 0,!0)}let r=await md(),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 ZL(i,r.private_key,r.passphrase),c=await fu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:yX,algorithm:hd,subject:Ed.REFRESH}),u=jL.hash(c),_=new gX(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await TX(_)}catch(f){du.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 RX.signalUserChange(new AX(process.pid)),new OX(o,c)}a(IX,"createTokens");async function ZL(e,t,r){return await fu.sign(e,{key:t,passphrase:r},{expiresIn:NX,algorithm:hd,subject:Ed.OPERATION})}a(ZL,"signOperationToken");async function md(){if(OS===void 0)try{let e=AS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PASSPHRASE_NAME),t=AS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=AS.join(ci.getHdbBasePath(),on.LICENSE_KEY_DIR_NAME,on.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await gS.readFile(e)).toString(),s=(await gS.readFile(t)).toString(),i=(await gS.readFile(r)).toString();OS=new bX(i,s,n)}catch(e){throw du.error(e),dr(new Error,Er.NO_ENCRYPTION_KEYS,fr.INTERNAL_SERVER_ERROR)}return OS}a(md,"getJWTRSAKeys");async function wX(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 eD(e.refresh_token);let t=await md(),r=await fu.decode(e.refresh_token);return{operation_token:await ZL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(wX,"refreshOperationToken");async function CX(e){try{let t=await md(),r=await fu.verify(e,t.public_key,{algorithms:hd,subject:Ed.OPERATION});return await bS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw du.warn(t),t.name&&t.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}}a(CX,"validateOperationToken");async function eD(e){let t;try{let r=await md(),n=await fu.verify(e,r.public_key,{algorithms:hd,subject:Ed.REFRESH});t=await bS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw du.warn(r),r.name&&r.name==="TokenExpiredError"?dr(new Error,Er.TOKEN_EXPIRED,fr.FORBIDDEN):dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED)}if(!jL.validate(t.refresh_token,e))throw dr(new Error,Er.INVALID_TOKEN,fr.UNAUTHORIZED);return t}a(eD,"validateRefreshToken")});var NS=T((I_e,sD)=>{"use strict";var LX=QL(),aa=require("passport"),DX=require("passport-local").Strategy,MX=require("passport-http").BasicStrategy,UX=require("util"),PX=rn(),nD=UX.callbackify(PX.findAndValidateUser),y_e=Ir(),vX=M(),rD=Eu();aa.use(new DX(function(e,t,r){nD(e,t,r)}));aa.use(new MX(function(e,t,r){nD(e,t,r)}));aa.serializeUser(function(e,t){t(null,e)});aa.deserializeUser(function(e,t){t(null,e)});function BX(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":aa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===vX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?rD.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):rD.validateOperationToken(s).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(BX,"authorize");function HX(e,t){let r=LX(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(HX,"checkPermissions");sD.exports={authorize:BX,checkPermissions:HX}});var ca=T((C_e,iD)=>{"use strict";var yS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},IS=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};iD.exports={Node:yS,NodeSubscription:IS}});var aD=T((D_e,oD)=>{"use strict";var xX=M().OPERATIONS_ENUM,wS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=xX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};oD.exports=wS});var hu=T((U_e,cD)=>{"use strict";var CS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},LS=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)}};cD.exports={RemotePayloadObject:CS,RemotePayloadSubscription:LS}});var lD=T((v_e,uD)=>{"use strict";var DS=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}};uD.exports=DS});var fD=T((q_e,dD)=>{"use strict";var FX=lD(),H_e=ht(),_D=$e(),qX=V(),{getSchemaPath:x_e,getTransactionAuditStorePath:F_e}=We(),{getDatabases:GX}=(ge(),ee(xe));dD.exports=kX;async function kX(e){let t=new FX;try{let r=GX()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await _D.environmentDataSize(schema_path,e.name),o=await _D.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){qX.warn(`unable to stat table dbi due to ${r}`)}return t}a(kX,"lmdbGetTableSize")});var hD=T((k_e,ED)=>{"use strict";var MS=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}};ED.exports=MS});var ua=T((K_e,TD)=>{"use strict";var VX=require("fs-extra"),$X=require("path"),Xt=require("systeminformation"),ui=V(),YX=It(),US=nt(),Sd=M(),KX=fD(),SD=xi(),{getThreadInfo:mD}=tt(),VS=j();VS.initSync();var WX=hD(),{openEnvironment:$_e}=$e(),{getSchemaPath:Y_e}=We(),{database:QX}=(ge(),ee(xe)),pd;TD.exports={getHDBProcessInfo:HS,getNetworkInfo:FS,getDiskInfo:xS,getMemoryInfo:BS,getCPUInfo:vS,getTimeInfo:PS,getSystemInformation:qS,systemInformation:zX,getTableSize:GS,getMetrics:kS};function PS(){return Xt.time()}a(PS,"getTimeInfo");async function vS(){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:F,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(vS,"getCPUInfo");async function BS(){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(BS,"getMemoryInfo");async function HS(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await VX.readFile($X.join(VS.get(Sd.CONFIG_PARAMS.ROOTPATH),Sd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Sd.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(HS,"getHDBProcessInfo");async function xS(){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(xS,"getDiskInfo");async function FS(){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(FS,"getNetworkInfo");async function qS(){if(pd!==void 0)return pd;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,pd=e,pd}catch(t){return ui.error(`error in getSystemInformation: ${t}`),e}}a(qS,"getSystemInformation");async function GS(){let e=[],t=await SD.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await KX(n));return e}a(GS,"getTableSize");async function kS(){let e=await SD.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=QX({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 pD(){if(VS.get(Sd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await YX.getNATSReferences(),r=await t.streams.info(US.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(US.WORK_QUEUE_CONSUMER_NAMES.stream_name,US.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(pD,"getNatsStreamInfo");async function zX(e){let t=new WX;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await qS(),t.time=PS(),t.cpu=await vS(),t.memory=await BS(),t.disk=await xS(),t.network=await FS(),t.harperdb_processes=await HS(),t.table_size=await GS(),t.metrics=await kS(),t.threads=await mD(),t.replication=await pD(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await qS();break;case"time":t.time=PS();break;case"cpu":t.cpu=await vS();break;case"memory":t.memory=await BS();break;case"disk":t.disk=await xS();break;case"network":t.network=await FS();break;case"harperdb_processes":t.harperdb_processes=await HS();break;case"table_size":t.table_size=await GS();break;case"database_metrics":case"metrics":t.metrics=await kS();break;case"threads":t.threads=await mD();break;case"replication":t.replication=await pD();break;default:break}return t}a(zX,"systemInformation")});var $S=T((Q_e,gD)=>{"use strict";gD.exports={version:JX,printVersion:XX};var Td=jc();function JX(){if(Td)return Td.version}a(JX,"version");function XX(){Td&&console.log(`HarperDB Version ${Td.version}`)}a(XX,"printVersion")});var ys=T((j_e,bD)=>{"use strict";var jX=tn(),YS=J(),ZX=require("util"),io=M(),RD=j();RD.initSync();var ej=NS(),AD=en(),{Node:J_e,NodeSubscription:X_e}=ca(),tj=jo(),rj=aD(),{RemotePayloadObject:nj,RemotePayloadSubscription:sj}=hu(),{handleHDBError:ij,hdb_errors:oj}=Z(),{HTTP_STATUS_CODES:aj,HDB_ERROR_MSGS:cj}=oj,uj=Jn(),lj=ua(),_j=$S(),{getDatabases:dj}=(ge(),ee(xe)),fj=ZX.promisify(ej.authorize),Ej=AD.searchByHash,hj=AD.searchByValue;bD.exports={authHeaderToUser:mj,isEmpty:pj,getNodeRecord:Sj,upsertNodeRecord:Tj,buildNodePayloads:gj,checkClusteringEnabled:Rj,getAllNodeRecords:Aj,getSystemInfo:Oj,reverseSubscription:OD};async function mj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await fj(t,null),e}a(mj,"authHeaderToUser");function pj(e){return e==null}a(pj,"isEmpty");async function Sj(e){let t=new tj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Ej(t)}a(Sj,"getNodeRecord");async function Tj(e){let t=new rj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return jX.upsert(t)}a(Tj,"upsertNodeRecord");function OD(e){if(YS.isEmpty(e.subscribe)||YS.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(OD,"reverseSubscription");function gj(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=YS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=OD(c),E=dj()[u]?.[_],h=new sj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new nj(r,t,s,n)}a(gj,"buildNodePayloads");function Rj(){if(!RD.get(io.CONFIG_PARAMS.CLUSTERING_ENABLED))throw ij(new Error,cj.CLUSTERING_NOT_ENABLED,aj.BAD_REQUEST,void 0,void 0,!0)}a(Rj,"checkClusteringEnabled");async function Aj(){let e=new uj(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await hj(e))}a(Aj,"getAllNodeRecords");async function Oj(){let e=await lj.getSystemInformation();return{hdb_version:_j.version(),node_version:e.node_version,platform:e.platform}}a(Oj,"getSystemInfo")});var KS=T((ede,MD)=>{"use strict";var gd=It(),ND=J(),yD=nt(),ID=M(),Rd=V(),wD=cd(),bj=_p(),{RemotePayloadObject:Nj}=hu(),{handleHDBError:CD,hdb_errors:yj}=Z(),{HTTP_STATUS_CODES:LD}=yj,{NodeSubscription:DD}=ca();MD.exports=Ij;async function Ij(e,t){let r;try{r=await gd.request(`${t}.${yD.REQUEST_SUFFIX}`,new Nj(ID.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Rd.trace("Response from remote describe all request:",r)}catch(o){Rd.error(`addNode received error from describe all request to remote node: ${o}`);let c=gd.requestErrorHandler(o,"add_node",t);throw CD(new Error,c,LD.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===yD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw CD(new Error,o,LD.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===ID.SYSTEM_SCHEMA_NAME){await gd.createLocalTableStream(u,c);let h=new DD(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=ND.doesSchemaExist(u),l=n[u]!==void 0,d=c?ND.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Rd.trace(`addNode creating schema: ${u}`),await wD.createSchema({operation:"create_schema",schema:u})),!d&&f){Rd.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new bj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await wD.createTable(h)}await gd.createLocalTableStream(u,c);let E=new DD(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Ij,"reviewSubscriptions")});var bd=T((rde,vD)=>{"use strict";var{handleHDBError:Ad,hdb_errors:wj}=Z(),{HTTP_STATUS_CODES:Od}=wj,{addUpdateNodeValidator:Cj}=fd(),mu=V(),PD=M(),UD=nt(),Lj=J(),WS=It(),pu=ys(),Dj=j(),Mj=KS(),{Node:Uj,NodeSubscription:Pj}=ca(),{broadcast:vj}=tt(),Bj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Hj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",xj=Dj.get(PD.CONFIG_PARAMS.CLUSTERING_NODENAME);vD.exports=Fj;async function Fj(e,t=!1){mu.trace("addNode called with:",e),pu.checkClusteringEnabled();let r=Cj(e);if(r)throw Ad(r,r.message,Od.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await pu.getNodeRecord(n);if(!Lj.isEmptyOrZeroLength(d))throw Ad(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Od.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Mj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Bj,o;let c=pu.buildNodePayloads(s,xj,PD.OPERATIONS_ENUM.ADD_NODE,await pu.getSystemInfo());mu.trace("addNode sending remote payload:",c);let u;try{u=await WS.request(`${n}.${UD.REQUEST_SUFFIX}`,c)}catch(d){mu.error(`addNode received error from request: ${d}`);let f=WS.requestErrorHandler(d,"add_node",n);throw Ad(new Error,f,Od.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===UD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Ad(new Error,d,Od.INTERNAL_SERVER_ERROR,"error",d)}mu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];mu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await WS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new Pj(E.schema,E.table,E.publish,E.subscribe))}let l=new Uj(n,_,u.system_info);return await pu.upsertNodeRecord(l),vj({type:"nats_update"}),i.length>0?o.message=Hj:o.message=`Successfully added '${n}' to manifest`,o}a(Fj,"addNode")});var XS=T((ide,xD)=>{"use strict";var{handleHDBError:QS,hdb_errors:qj}=Z(),{HTTP_STATUS_CODES:zS}=qj,{addUpdateNodeValidator:Gj}=fd(),Su=V(),HD=M(),BD=nt(),sde=J(),JS=It(),Tu=ys(),kj=j(),{cloneDeep:Vj}=require("lodash"),$j=KS(),{Node:Yj,NodeSubscription:Kj}=ca(),{broadcast:Wj}=tt(),Qj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",zj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Jj=kj.get(HD.CONFIG_PARAMS.CLUSTERING_NODENAME);xD.exports=Xj;async function Xj(e){Su.trace("updateNode called with:",e),Tu.checkClusteringEnabled();let t=Gj(e);if(t)throw QS(t,t.message,zS.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Tu.getNodeRecord(r);s.length>0&&(n=Vj(s));let{added:i,skipped:o}=await $j(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Qj,c;let u=Tu.buildNodePayloads(i,Jj,HD.OPERATIONS_ENUM.UPDATE_NODE,await Tu.getSystemInfo());Su.trace("updateNode sending remote payload:",u);let _;try{_=await JS.request(`${r}.${BD.REQUEST_SUFFIX}`,u)}catch(l){Su.error(`updateNode received error from request: ${l}`);let d=JS.requestErrorHandler(l,"update_node",r);throw QS(new Error,d,zS.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===BD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw QS(new Error,l,zS.INTERNAL_SERVER_ERROR,"error",l)}Su.trace(_);for(let l=0,d=i.length;l<d;l++){let f=i[l];Su.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await JS.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new Yj(r,[],_.system_info)]),await jj(n[0],i,_.system_info),o.length>0?c.message=zj:c.message=`Successfully updated '${r}'`,c}a(Xj,"updateNode");async function jj(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 Kj(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Tu.upsertNodeRecord(n),Wj({type:"nats_update"})}a(jj,"updateNodeTable")});var VD=T((ade,kD)=>{"use strict";var GD=require("joi"),{string:FD}=GD.types(),Zj=et(),qD=M(),eZ=j(),tZ=nt();kD.exports=rZ;function rZ(e){let t=FD.invalid(eZ.get(qD.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(tZ.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=GD.object({operation:FD.valid(qD.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Zj.validateBySchema(e,r)}a(rZ,"removeNodeValidator")});var yd=T((ude,zD)=>{"use strict";var{handleHDBError:$D,hdb_errors:nZ}=Z(),{HTTP_STATUS_CODES:YD}=nZ,sZ=VD(),gu=V(),KD=ys(),iZ=J(),Nd=M(),WD=nt(),QD=It(),oZ=j(),{RemotePayloadObject:aZ}=hu(),{NodeSubscription:cZ}=ca(),uZ=$c(),lZ=Vi(),{broadcast:_Z}=tt(),dZ=oZ.get(Nd.CONFIG_PARAMS.CLUSTERING_NODENAME);zD.exports=fZ;async function fZ(e){gu.trace("removeNode called with:",e),KD.checkClusteringEnabled();let t=sZ(e);if(t)throw $D(t,t.message,YD.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await KD.getNodeRecord(r);if(iZ.isEmptyOrZeroLength(n))throw $D(new Error,`Node '${r}' was not found.`,YD.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new aZ(Nd.OPERATIONS_ENUM.REMOVE_NODE,dZ,[]),i,o=!1;try{i=await QD.request(`${r}.${WD.REQUEST_SUFFIX}`,s),gu.trace("Remove node reply from remote node:",r,i)}catch(u){gu.error("removeNode received error from request:",u),o=!0}for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];gu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new cZ(l.schema,l.table,!1,!1);await QD.updateWorkStream(d,r)}let c=new uZ(Nd.SYSTEM_SCHEMA_NAME,Nd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await lZ.deleteRecord(c),_Z({type:"nats_update"}),i?.status===WD.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(gu.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(fZ,"removeNode")});var jD=T((_de,XD)=>{"use strict";var JD=require("joi"),{string:EZ,array:hZ}=JD.types(),mZ=et(),pZ=fd();XD.exports=SZ;function SZ(e){let t=JD.object({operation:EZ.valid("configure_cluster").required(),connections:hZ.items(pZ.validation_schema).required()});return mZ.validateBySchema(e,t)}a(SZ,"configureClusterValidator")});var jS=T((fde,nM)=>{"use strict";var TZ=M(),Id=V(),gZ=J(),RZ=yd(),AZ=bd(),ZD=ys(),OZ=jD(),{handleHDBError:eM,hdb_errors:bZ}=Z(),{HTTP_STATUS_CODES:tM}=bZ,NZ="Configure cluster complete.",yZ="Failed to configure the cluster. Check the logs for more details.",IZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";nM.exports=wZ;async function wZ(e){Id.trace("configure cluster called with:",e),ZD.checkClusteringEnabled();let t=OZ(e);if(t)throw eM(t,t.message,tM.BAD_REQUEST,void 0,void 0,!0);let r=await ZD.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(rM(RZ,{operation:TZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);Id.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(rM(AZ,E,E.node_name))}let c=await Promise.allSettled(i);Id.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"&&(Id.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(gZ.isEmptyOrZeroLength(u))return{message:NZ,connections:_};if(l)return{message:IZ,failed_nodes:u,connections:_};throw eM(new Error,yZ,tM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(wZ,"configureCluster");async function rM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(rM,"functionWrapper")});var iM=T((hde,sM)=>{"use strict";var wd=require("joi"),CZ=et(),{validateSchemaExists:LZ,validateTableExists:DZ,validateSchemaName:MZ}=Kn(),UZ=wd.object({operation:wd.string().valid("purge_stream"),schema:wd.string().custom(LZ).custom(MZ).required(),table:wd.string().custom(DZ).required()});function PZ(e){return CZ.validateBySchema(e,UZ)}a(PZ,"purgeStreamValidator");sM.exports=PZ});var ZS=T((pde,oM)=>{"use strict";var{handleHDBError:vZ,hdb_errors:BZ}=Z(),{HTTP_STATUS_CODES:HZ}=BZ,xZ=iM(),FZ=It(),qZ=ys();oM.exports=GZ;async function GZ(e){if(e.purge_ingest!==!0){let s=xZ(e);if(s)throw vZ(s,s.message,HZ.BAD_REQUEST,void 0,void 0,!0)}qZ.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await FZ.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(GZ,"purgeStream")});var rT=T((Tde,dM)=>{"use strict";var tT=ys(),kZ=It(),uM=j(),Cd=M(),oo=nt(),VZ=J(),eT=V(),{RemotePayloadObject:$Z}=hu(),{ErrorCode:aM}=require("nats"),cM=uM.get(Cd.CONFIG_PARAMS.CLUSTERING_ENABLED),lM=uM.get(Cd.CONFIG_PARAMS.CLUSTERING_NODENAME);dM.exports={clusterStatus:YZ,buildNodeStatus:_M};async function YZ(){let e={node_name:lM,is_enabled:cM,connections:[]};if(!cM)return e;let t=await tT.getAllNodeRecords();if(VZ.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(_M(t[n],e.connections));return await Promise.allSettled(r),e}a(YZ,"clusterStatus");async function _M(e,t){let r=e.name,n=new $Z(Cd.OPERATIONS_ENUM.CLUSTER_STATUS,lM,void 0,await tT.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,eT.error(`Error getting node status from ${r} `,s))}catch(u){eT.warn(`Error getting node status from ${r}`,u),u.code===aM.NoResponders?o=oo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===aM.Timeout?o=oo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=oo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new KZ(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!==Cd.PRE_4_0_0_VERSION&&await tT.upsertNodeRecord(u)}catch(u){eT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(_M,"buildNodeStatus");function KZ(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(KZ,"NodeStatusObject")});var sT=T((Rde,fM)=>{"use strict";var{handleHDBError:WZ,hdb_errors:QZ}=Z(),{HTTP_STATUS_CODES:zZ}=QZ,JZ=It(),XZ=ys(),nT=J(),Ld=require("joi"),jZ=et(),ZZ=2e3,e5=Ld.object({timeout:Ld.number().min(1),connected_nodes:Ld.boolean(),routes:Ld.boolean()});fM.exports=t5;async function t5(e){XZ.checkClusteringEnabled();let t=jZ.validateBySchema(e,e5);if(t)throw WZ(t,t.message,zZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||nT.autoCastBoolean(n),o=s===void 0||nT.autoCastBoolean(s),c={nodes:[]},u=await JZ.getServerList(r??ZZ),_={};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:nT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(t5,"clusterNetwork")});var pM=T((Ode,mM)=>{"use strict";var iT=require("joi"),EM=et(),{route_constraints:hM}=uh();mM.exports={setRoutesValidator:r5,deleteRoutesValidator:n5};function r5(e){let t=iT.object({server:iT.valid("hub","leaf").required(),routes:hM.required()});return EM.validateBySchema(e,t)}a(r5,"setRoutesValidator");function n5(e){let t=iT.object({routes:hM.required()});return EM.validateBySchema(e,t)}a(n5,"deleteRoutesValidator")});var aT=T((Nde,RM)=>{"use strict";var ao=Lr(),oT=J(),Dd=M(),SM=pM(),{handleHDBError:TM,hdb_errors:s5}=Z(),{HTTP_STATUS_CODES:gM}=s5,i5="cluster routes successfully set",o5="cluster routes successfully deleted";RM.exports={setRoutes:a5,getRoutes:c5,deleteRoutes:u5};function a5(e){let t=SM.setRoutesValidator(e);if(t)throw TM(t,t.message,gM.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=oT.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(Dd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):ao.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:i5,set:o,skipped:i}}a(a5,"setRoutes");function c5(){let e=ao.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(c5,"getRoutes");function u5(e){let t=SM.deleteRoutesValidator(e);if(t)throw TM(t,t.message,gM.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=oT.isEmptyOrZeroLength(n)?null:n,ao.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=oT.isEmptyOrZeroLength(s)?null:s,ao.updateConfigValue(Dd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:o5,deleted:i,skipped:o}}a(u5,"deleteRoutes")});var OM=T((Ide,AM)=>{"use strict";var Ru=require("alasql"),co=require("recursive-iterator"),vn=V(),l5=J(),Au=M(),cT=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,d5(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=>Au.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=>!Au.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][Au.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=_5(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(_=>!Au.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Ru.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 _5(e){return e.filter(t=>t[Au.PERMS_CRUD_ENUM.READ])}a(_5,"filterReadRestrictedAttrs");function d5(e,t,r,n,s){f5(e,t,r,n,s)}a(d5,"interpretAST");function Ou(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(Ou,"addSchemaTableToMap");function f5(e,t,r,n,s){if(!e){vn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ru.yy.Insert?p5(e,t,r):e instanceof Ru.yy.Select?E5(e,t,r,n,s):e instanceof Ru.yy.Update?h5(e,t,r):e instanceof Ru.yy.Delete?m5(e,t,r):vn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(f5,"getRecordAttributesAST");function E5(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(l5.isEmptyOrZeroLength(i)){vn.error("No schema specified");return}e.from.forEach(c=>{Ou(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ou(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(E5,"getSelectAttributes");function h5(e,t,r){if(!e){vn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.table.databaseid;Ou(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uT(e.table.tableid,s,i.columnid,t,r)}a(h5,"getUpdateAttributes");function m5(e,t,r){if(!e){vn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new co(e.where),s=e.table.databaseid;Ou(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&uT(e.table.tableid,s,i.columnid,t,r)}a(m5,"getDeleteAttributes");function p5(e,t,r){if(!e){vn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new co(e.columns),s=e.into.databaseid;Ou(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&uT(e.into.tableid,s,i.columnid,t,r)}a(p5,"getInsertAttributes");function uT(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(uT,"pushAttribute");AM.exports=cT});var dT=T((Cde,IM)=>{var Md=$i(),bM=require("chalk"),qr=V(),NM=require("prompt"),{promisify:S5}=require("util"),lT=M(),T5=require("fs-extra"),g5=require("path"),R5=J(),A5=$S(),yM=j();yM.initSync();var O5=require("moment"),b5=S5(NM.get),N5=g5.join(yM.getHdbBasePath(),lT.LICENSE_KEY_DIR_NAME,lT.LICENSE_FILE_NAME,lT.LICENSE_FILE_NAME);IM.exports={getFingerprint:I5,setLicense:y5,parseLicense:_T,register:w5,getRegistrationInfo:L5};async function y5(e){if(e&&e.key&&e.company){try{qr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await _T(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw qr.error(r),qr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(y5,"setLicense");async function I5(){let e={};try{e=await Md.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw qr.error(r),qr.error(t),new Error(r)}return e}a(I5,"getFingerprint");async function _T(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");qr.info("Validating license input...");let r=Md.validateLicense(e,t);if(qr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(qr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(qr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{qr.info("writing license to disk"),await T5.writeFile(N5,JSON.stringify({license_key:e,company:t}))}catch(n){throw qr.error("Failed to write License"),n}return"Registration successful."}a(_T,"parseLicense");async function w5(){let e=await C5();return _T(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(w5,"register");async function C5(){let e=await Md.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:bM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:bM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{NM.start()}catch(n){qr.error(n)}let r;try{r=await b5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(C5,"promptForRegistration");async function L5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Md.getLicense()}catch(r){throw qr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(R5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=A5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=O5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(L5,"getRegistrationInfo")});var CM=T((Dde,wM)=>{"use strict";var D5=nt(),fT=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+D5.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"}};wM.exports=fT});var MM=T((Ude,DM)=>{"use strict";var LM=nt(),ET=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+LM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+LM.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"}};DM.exports=ET});var PM=T((vde,UM)=>{"use strict";var hT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};UM.exports=hT});var BM=T((Hde,vM)=>{"use strict";var M5=nt(),mT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+M5.SERVER_SUFFIX.ADMIN,this.password=r}};vM.exports=mT});var TT=T((Fde,FM)=>{"use strict";var la=require("path"),vd=require("fs-extra"),U5=CM(),P5=MM(),v5=PM(),B5=BM(),pT=rn(),da=J(),hr=Lr(),Pd=M(),bu=nt(),{CONFIG_PARAMS:Et}=Pd,Nu=V(),yu=j(),HM=gs(),ST=It(),_a="clustering",H5=1e4,xM=5;FM.exports={generateNatsConfig:F5,removeNatsConfig:q5,getHubConfigPath:x5};function x5(){let e=yu.get(Et.ROOTPATH);return la.join(e,_a,bu.NATS_CONFIG_FILES.HUB_SERVER)}a(x5,"getHubConfigPath");async function F5(e=!1,t=void 0){yu.initSync();let r=yu.get(Et.ROOTPATH),n=la.join(r,_a,bu.PID_FILES.HUB),s=la.join(r,_a,bu.PID_FILES.LEAF),i=hr.getConfigFromFile(Et.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=la.join(r,_a,bu.NATS_CONFIG_FILES.HUB_SERVER),c=la.join(r,_a,bu.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 ST.checkNATSServerInstalled()||Bd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await pT.listUsers(),S=hr.getConfigFromFile(Et.CLUSTERING_USER),A=await pT.getClusterUser();(da.isEmpty(A)||A.active!==!0)&&Bd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ud(Et.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ud(Et.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ud(Et.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ud(Et.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],w=[];for(let[z,re]of p.entries())re.role.role===Pd.ROLE_TYPES_ENUM.CLUSTER_USER&&re.active&&(I.push(new B5(re.username,HM.decrypt(re.hash))),w.push(new v5(re.username,HM.decrypt(re.hash))));let B=[],{hub_routes:K}=hr.getClusteringRoutes();if(!da.isEmptyOrZeroLength(K))for(let z of K)B.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${z.host}:${z.port}`);let F=new U5(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 F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=da.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Pd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await vd.writeJson(o,F),Nu.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 P5(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===Pd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await vd.writeJson(c,Y),Nu.trace(`Leaf server config written to ${c}`))}a(F5,"generateNatsConfig");async function Ud(e){let t=yu.get(e);return da.isEmpty(t)&&Bd(`port undefined for '${e}'`),await da.isPortTaken(t)&&Bd(`'${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(Ud,"isPortAvailable");function Bd(e){let t=`Error generating clustering config: ${e}`;Nu.error(t),console.error(t),process.exit(1)}a(Bd,"generateNatsConfigError");async function q5(e){let{port:t,config_file:r}=ST.getServerConfig(e),{username:n,decrypt_hash:s}=await pT.getClusterUser(),i=0,o=2e3;for(;i<xM;){try{let _=await ST.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Nu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=xM)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(H5),u=la.join(yu.get(Et.ROOTPATH),_a,r);await vd.writeFile(u,c),await vd.remove(u),Nu.notify(e,"started.")}a(q5,"removeNatsConfig")});var qd=T((Gde,KM)=>{"use strict";var G5=require("minimist"),{isMainThread:AT,parentPort:kM}=require("worker_threads"),st=M(),{PROCESS_DESCRIPTORS_VALIDATE:Iu}=st,es=V(),OT=J(),Hd=TT(),fa=It(),gT=nt(),VM=Lr(),ts=NT(),qM=ua(),k5=jE(),{restartWorkers:xd,onMessageByType:V5}=tt(),{handleHDBError:$5,hdb_errors:Y5}=Z(),{HTTP_STATUS_CODES:K5}=Y5,Fd=j();Fd.initSync();var wu=`Restarting HarperDB. This may take up to ${st.RESTART_TIMEOUT_MS/1e3} seconds.`,W5="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",GM="Clustering is not enabled so cannot be restarted",Q5="Invalid service",Ea,an;KM.exports={restart:$M,restartService:bT};AT&&V5(st.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?bT({service:e.workerType}):$M({operation:"restart"})});async function $M(e){an=Object.keys(e).length===0,Ea=await ts.isServiceRegistered(st.HDB_PROC_DESCRIPTOR);let t=G5(process.argv);if(t.service){await bT(t);return}if(an&&!Ea){console.error(W5);return}if(an&&console.log(wu),Ea){ts.enterPM2Mode(),es.notify(wu);let r=k5(Object.keys(st.CONFIG_PARAM_MAP),!0);return OT.isEmptyOrZeroLength(Object.keys(r))||VM.updateConfigValue(void 0,void 0,r,!0,!0),J5(),wu}return AT?(es.notify(wu),setTimeout(()=>{xd()},50)):kM.postMessage({type:st.ITC_EVENT_TYPES.RESTART}),wu}a($M,"restart");async function bT(e){let{service:t}=e;if(st.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw $5(new Error,Q5,K5.BAD_REQUEST,void 0,void 0,!0);if(Ea=await ts.isServiceRegistered(st.HDB_PROC_DESCRIPTOR),!AT)return kM.postMessage({type:st.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Iu.clustering:if(!Fd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GM;break}an&&console.log("Restarting clustering"),es.notify("Restarting clustering"),await YM();break;case Iu.clustering_config:case Iu["clustering config"]:if(!Fd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GM;break}an&&console.log("Restarting clustering_config"),es.notify("Restarting clustering_config"),await ts.reloadClustering();break;case"custom_functions":case"custom functions":case Iu.harperdb:case Iu.http_workers:if(an&&!Ea){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"),es.notify("Restarting http_workers"),an?await ts.restart(st.HDB_PROC_DESCRIPTOR):setTimeout(()=>{xd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(es.error(r),an&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(bT,"restartService");async function z5(){await fa.publishToStream(`${gT.SUBJECT_PREFIXES.TXN}.${gT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,gT.WORK_QUEUE_CONSUMER_NAMES.stream_name,fa.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(z5,"postDummyNatsMsg");async function J5(){await YM(),await ts.restart(st.HDB_PROC_DESCRIPTOR),await OT.async_set_timeout(2e3),Fd.get(st.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await RT(),an&&(await fa.closeConnection(),process.exit(0))}a(J5,"restartPM2Mode");async function YM(){if(!VM.getConfigFromFile(st.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await qM.getHDBProcessInfo()).clustering.length===0)es.trace("Clustering not running, restart will start clustering services"),await Hd.generateNatsConfig(!0),await ts.startClusteringProcesses(),await ts.startClusteringThreads(),await RT(),an&&await fa.closeConnection();else{await z5(),await Hd.generateNatsConfig(!0),Ea?(es.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ts.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ts.restart(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await qM.getHDBProcessInfo()).clustering.forEach(s=>{es.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await OT.async_set_timeout(3e3),await RT(),await fa.updateLocalStreams(),an&&await fa.closeConnection(),es.trace("Restart clustering restarting ingest and reply service threads");let t=xd(st.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xd(st.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(YM,"restartClustering");async function RT(){await Hd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Hd.removeNatsConfig(st.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(RT,"removeNatsConfig")});var nU=T(($de,rU)=>{"use strict";var Vde=require("lodash"),mr=M(),{handleHDBError:WM,hdb_errors:X5}=Z(),{HDB_ERROR_MSGS:j5,HTTP_STATUS_CODES:Z5}=X5,yT=V();rU.exports={getRolePermissions:t8};var uo=Object.create(null),e8=a(e=>({key:e,perms:{}}),"perms_template_obj"),XM=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),jM=a((e=!1,t=!1,r=!1,n=!1)=>({[mr.PERMS_CRUD_ENUM.READ]:e,[mr.PERMS_CRUD_ENUM.INSERT]:t,[mr.PERMS_CRUD_ENUM.UPDATE]:r,[mr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),IT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...jM(t,r,n,s)}),"table_perms_template"),QM=a((e,t=jM())=>({attribute_name:e,describe:tU(t),[Cu]:t[Cu],[wT]:t[wT],[CT]:t[CT]}),"attr_perms_template"),zM=a((e,t=!1)=>({attribute_name:e,describe:t,[Cu]:t}),"timestamp_attr_perms_template"),{READ:Cu,INSERT:wT,UPDATE:CT}=mr.PERMS_CRUD_ENUM,ZM=Object.values(mr.PERMS_CRUD_ENUM),eU=[Cu,wT,CT];function t8(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[mr.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=r8(e,r);return uo[t]?uo[t].key=n:uo[t]=e8(n),uo[t].perms=s,s}catch(r){if(!e[mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[mr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<mr.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 yT.error(n),yT.debug(r),WM(new Error,j5.OUTDATED_PERMS_TRANSLATION_ERROR,Z5.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
-
${r.stack}`;throw yT.error(n),WM(new Error)}}}a(t8,"getRolePermissions");function r8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[mr.SYSTEM_SCHEMA_NAME]=n[mr.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]=n8(t[i]);return}r[i]=XM(),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],_=s8(c,u);r[i].describe||ZM.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=IT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=IT()})}),r}a(r8,"translateRolePermissions");function n8(e){let t=XM(!0);return Object.keys(e).forEach(r=>{t.tables[r]=IT(!0,!0,!0,!0,!0)}),t}a(n8,"createStructureUserPermissions");function s8(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 mr.TIME_STAMP_NAMES.includes(d)&&(f=zM(d,l[Cu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=QM(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=tU(l),s.attribute_permissions.push(l),c||i8(l,u)}else if(_!==o){let l;mr.TIME_STAMP_NAMES.includes(_)?l=zM(_):l=QM(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=JM(s),s}else return e.describe=JM(e),e}a(s8,"getTableAttrPerms");function JM(e){return ZM.filter(t=>e[t]).length>0}a(JM,"getSchemaTableDescribePerm");function tU(e){return eU.filter(t=>e[t]).length>0}a(tU,"getAttributeDescribePerm");function i8(e,t){eU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(i8,"checkForHashPerms")});var sU={};Ve(sU,{Resources:()=>Gd,keyArrayToString:()=>ha,resetResources:()=>o8,resources:()=>li});function o8(){return li=new Gd}function ha(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Gd,li,Lu=Ae(()=>{Ji();Gd=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(o8,"resetResources");a(ha,"keyArrayToString")});var iU={};Ve(iU,{Headers:()=>_i});var _i,kd=Ae(()=>{_i=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 Du={};Ve(Du,{authentication:()=>fU,bypassAuth:()=>f8,login:()=>h8,logout:()=>m8,start:()=>E8});function f8(){dU=!0}async function fU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?l8?u8:[]:c8?a8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new _i([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Vd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Vd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Vd){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 aU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Yd.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?oU.notify(S):oU.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,$d.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,$d.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return d8&&(lo.get(h)||(lo.set(h,h),l(p,kt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:di({error:A.message},e)})}lo.set(n,d),_8&&l(d.username,kt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,e):(dU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,uU.getSuperUser)());Vd&&(e.session.update=function(E){if(!u){u=(0,lU.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,aU.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")&&li.loginPath?(f.status=302,f.headers.set("Location",li.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 _i);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function E8({server:e,port:t}){e.request(fU,{port:t||"all"}),cU||(cU=!0,setInterval(()=>{lo=new Map},cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),_U.user.addListener(()=>{lo=new Map}))}async function h8(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 m8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var uU,$d,lU,cn,kt,Yd,_U,oU,a8,c8,u8,l8,aU,Vd,dU,_8,d8,lo,cU,Kd=Ae(()=>{uU=v(rn());nr();Lu();$d=v(Eu());ge();lU=require("uuid"),cn=v(j()),kt=v(M()),Yd=v(V()),_U=v(vc());kd();ma();oU=(0,Yd.loggerWithTag)("auth-event");cn.initSync();a8=cn.get(kt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),c8=cn.get(kt.CONFIG_PARAMS.HTTP_CORS),u8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),l8=cn.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),aU=_t({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Vd=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,dU=cn.get(kt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,_8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,d8=cn.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,lo=new Map;lt.onInvalidatedUser(()=>{lo=new Map});a(f8,"bypassAuth");a(fU,"authentication");a(E8,"start");a(h8,"login");a(m8,"logout")});var gU=T((tfe,TU)=>{"use strict";var be=require("joi"),EU=require("fs-extra"),hU=require("path"),ws=et(),mU=j(),pU=M(),SU=V(),{hdb_errors:p8}=Z(),{HDB_ERROR_MSGS:jt}=p8,Is=/^[a-zA-Z0-9-_]+$/;TU.exports={getDropCustomFunctionValidator:T8,setCustomFunctionValidator:g8,addComponentValidator:b8,dropCustomFunctionProjectValidator:N8,packageComponentValidator:y8,deployComponentValidator:I8,setComponentFileValidator:R8,getComponentFileValidator:O8,dropComponentFileValidator:A8};function Wd(e,t,r){try{let n=mU.get(pU.CONFIG_PARAMS.COMPONENTSROOT),s=hU.join(n,t);return EU.existsSync(s)?e?t:r.message(jt.PROJECT_EXISTS):e?r.message(jt.NO_PROJECT):t}catch(n){return SU.error(n),r.message(jt.VALIDATION_ERR)}}a(Wd,"checkProjectExists");function Mu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Mu,"checkFilePath");function S8(e,t,r,n){try{let s=mU.get(pU.CONFIG_PARAMS.COMPONENTSROOT),i=hU.join(s,e,t,r+".js");return EU.existsSync(i)?r:n.message(jt.NO_FILE)}catch(s){return SU.error(s),n.message(jt.VALIDATION_ERR)}}a(S8,"checkFileExists");function T8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().pattern(Is).custom(S8.bind(null,e.project,e.type)).custom(Mu).required().messages({"string.pattern.base":jt.BAD_FILE_NAME})});return ws.validateBySchema(e,t)}a(T8,"getDropCustomFunctionValidator");function g8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().custom(Mu).required(),function_content:be.string().required()});return ws.validateBySchema(e,t)}a(g8,"setCustomFunctionValidator");function R8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:be.string().custom(Mu).required(),payload:be.string().allow("").optional(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ws.validateBySchema(e,t)}a(R8,"setComponentFileValidator");function A8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),file:be.string().custom(Mu).optional()});return ws.validateBySchema(e,t)}a(A8,"dropComponentFileValidator");function O8(e){let t=be.object({project:be.string().required(),file:be.string().custom(Mu).required(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ws.validateBySchema(e,t)}a(O8,"getComponentFileValidator");function b8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!1)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return ws.validateBySchema(e,t)}a(b8,"addComponentValidator");function N8(e){let t=be.object({project:be.string().pattern(Is).custom(Wd.bind(null,!0)).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME})});return ws.validateBySchema(e,t)}a(N8,"dropCustomFunctionProjectValidator");function y8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),skip_node_modules:be.boolean()});return ws.validateBySchema(e,t)}a(y8,"packageComponentValidator");function I8(e){let t=be.object({project:be.string().pattern(Is).required().messages({"string.pattern.base":jt.BAD_PROJECT_NAME}),payload:be.string().optional().messages({"string.pattern.base":jt.BAD_PACKAGE}),package:be.string().optional()});return ws.validateBySchema(e,t)}a(I8,"deployComponentValidator")});var Xd=T((nfe,IU)=>{"use strict";var Qd=require("joi"),zd=require("path"),RU=require("fs-extra"),{exec:w8}=require("child_process"),C8=require("util"),AU=C8.promisify(w8),Uu=M(),{handleHDBError:pa,hdb_errors:L8}=Z(),{HTTP_STATUS_CODES:Sa}=L8,Pu=j(),D8=et(),Ta=V();Pu.initSync();var LT=Pu.get(Uu.CONFIG_PARAMS.COMPONENTSROOT),OU="npm install --omit=dev --json",M8=`${OU} --dry-run`;IU.exports={installModules:B8,auditModules:H8,installAllRootModules:U8,uninstallRootModule:P8,linkHarperdb:v8};async function U8(e=!1){await Jd(),await vu(e?"npm install --ignore-scripts":"npm install",Pu.get(Uu.CONFIG_PARAMS.ROOTPATH))}a(U8,"installAllRootModules");async function P8(e){await vu(`npm uninstall ${e}`,Pu.get(Uu.CONFIG_PARAMS.ROOTPATH))}a(P8,"uninstallRootModule");async function v8(){await Jd(),await vu(`npm link ${Uu.PACKAGE_ROOT}`,Pu.get(Uu.CONFIG_PARAMS.ROOTPATH))}a(v8,"linkHarperdb");async function vu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await AU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
10
|
+
`,"")}a(aD,"runCommand");async function x4(){try{await m4.access(eS)}catch{return!1}let e=await aD(`${eS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return p4.eq(t,B4)}a(x4,"checkNATSServerInstalled");async function sS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await nD.getClusterUser();if(to(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 w4({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gt.get(Pe.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),cD()}),i}a(sS,"createConnection");function cD(){an=void 0,ji=void 0,Zi=void 0,eo=void 0}a(cD,"clearClientCache");async function F4(){an&&(await an.drain(),an=void 0,ji=void 0,Zi=void 0,eo=void 0)}a(F4,"closeConnection");var an,eo;async function sd(){return eo||(eo=sS(Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),an=await eo),an||eo}a(sd,"getConnection");async function iu(){if(ji)return ji;to(an)&&await sd();let{domain:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(to(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ji=await an.jetstreamManager({domain:e,timeout:6e4}),ji}a(iu,"getJetStreamManager");async function uD(){if(Zi)return Zi;to(an)&&await sd();let{domain:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(to(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Zi=an.jetstream({domain:e,timeout:6e4}),Zi}a(uD,"getJetStream");async function cr(){let e=an||await sd(),t=ji||await iu(),r=Zi||await uD();return{connection:e,jsm:t,js:r}}a(cr,"getNATSReferences");async function q4(e){let t=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await nD.getClusterUser(),s=await sS(t,r,n),i=nS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=oD.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 tS.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(q4,"getServerList");async function iS(e,t){let{jsm:r}=await cr(),n=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:sD.File,retention:iD.Limits,subjects:t,discard:C4.Old,max_msgs:s,max_bytes:i,max_age:n})}a(iS,"createLocalStream");async function lD(){let{jsm:e}=await cr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(lD,"listStreams");async function G4(e){let{jsm:t}=await cr();await t.streams.delete(e)}a(G4,"deleteLocalStream");async function k4(e){let{connection:t}=await cr(),r=[],n=nS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(oD.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(k4,"listRemoteStreams");async function V4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await cr(),i=eD(),o={durable_name:i,ack_policy:rd.Explicit};t&&(o.deliver_policy=nd.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=rS(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(be.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(V4,"viewStream");async function*$4(e,t=void 0,r=void 0){let{jsm:n,js:s}=await cr(),i=eD(),o={durable_name:i,ack_policy:rd.Explicit};t&&(o.deliver_policy=nd.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=rS(_.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(be.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a($4,"viewStreamIterator");async function Y4(e,t,r,n){qr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=_D(n,r);let{js:s}=await cr(),i=await au(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:rD.encode(n);try{qr.trace(`publishToStream publishing to subject: ${o}`),P4(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 hD(async()=>{try{await s.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 iS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Y4,"publishToStream");function _D(e,t){t===void 0&&(t=L4());let r=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(be.MSG_HEADERS.ORIGIN)&&r&&t.append(be.MSG_HEADERS.ORIGIN,r),t}a(_D,"addNatsMsgHeader");function ou(e){e=e.toLowerCase();let t=su.join(Gt.get(Pe.CONFIG_PARAMS.ROOTPATH),v4);if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return to(Zp)&&(Zp={port:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+be.SERVER_SUFFIX.HUB,config_file:be.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:su.join(t,be.PID_FILES.HUB),hdb_nats_path:t}),Zp;if(e===Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return to(jp)&&(jp={port:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+be.SERVER_SUFFIX.LEAF,config_file:be.NATS_CONFIG_FILES.LEAF_SERVER,domain:ru.getConfigFromFile(Pe.CONFIG_PARAMS.CLUSTERING_NODENAME)+be.SERVER_SUFFIX.LEAF,pid_file_path:su.join(t,be.PID_FILES.LEAF),hdb_nats_path:t}),jp;qr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ou,"getServerConfig");async function K4(e){let{jsm:t}=await cr(),r=await au();try{await t.streams.add({name:e.stream_name,storage:sD.File,retention:iD.Limits,max_age:y4,max_bytes:I4,subjects:[`${be.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:rd.Explicit,durable_name:e.durable_name,deliver_policy:nd.All,max_ack_pending:1e4});else throw n}}a(K4,"createWorkQueueStream");async function W4(){let{jsm:e}=await cr();(await e.consumers.info(be.WORK_QUEUE_CONSUMER_NAMES.stream_name,be.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(qr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(be.WORK_QUEUE_CONSUMER_NAMES.stream_name,be.WORK_QUEUE_CONSUMER_NAMES.durable_name),qr.info("Adding pull consumer to ingest stream"),await e.consumers.add(be.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:rd.Explicit,durable_name:be.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:nd.All,max_ack_pending:1e4}))}a(W4,"updateIngestStreamConsumer");async function dD(e,t,r){let{jsm:n}=await cr(),s=await n.streams.info(t),i=fD(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=td.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 S=0,p=s.config.sources.length;S<p;S++)if(d=s.config.sources[S],f=S,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 S=`txn.${c}.${u}.${e}`;await n.streams.purge(t,{filter:S}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${be.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(dD,"addSourceToWorkStream");function fD(e){return e.split(".")[1]}a(fD,"extractServerName");async function ED(e,t,r){let{jsm:n}=await cr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=td.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(ED,"removeSourceFromWorkStream");async function Q4(e,t,r=6e4,n=nS()){if(!tS.isObject(t))throw new Error("data param must be an object");let s=rD.encode(t),{connection:i}=await cr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return rS(c.data)}a(Q4,"request");function oS(e){return new Promise(async(t,r)=>{let n=R4(eS,["--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(oS,"reloadNATS");async function z4(){let{pid_file_path:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await oS(e)}a(z4,"reloadNATSHub");async function J4(){let{pid_file_path:e}=ou(Pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await oS(e)}a(J4,"reloadNATSLeaf");function X4(e,t,r){let n;switch(e.code){case ZC.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case ZC.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(X4,"requestErrorHandler");async function j4(e,t){let r=t+be.SERVER_SUFFIX.LEAF;await hD(async()=>{e.subscribe===!0?await dD(r,be.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await ED(r,be.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(j4,"updateWorkStream");function hD(e){return A4.writeTransaction(Pe.SYSTEM_SCHEMA_NAME,Pe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(hD,"exclusiveLock");async function mD(e,t){let r=td.createNatsTableStreamName(e,t),n=await au(),s=r3(e,t,n);await iS(r,[s])}a(mD,"createLocalTableStream");async function Z4(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await mD(n,s)}}a(Z4,"createTableStreams");async function pD(e,t,r=!1){if(Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=td.createNatsTableStreamName(e,t),{jsm:s}=await cr();r?await s.streams.purge(be.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")qr.warn(n);else throw n}}a(pD,"purgeTableStream");async function e3(e,t){if(Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await pD(e,t[r])}a(e3,"purgeSchemaTableStreams");async function t3(e){return(await iu()).streams.info(e)}a(t3,"getStreamInfo");function r3(e,t,r){return`${be.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(r3,"createSubjectName");async function au(){if(nu)return nu;if(nu=(await iu())?.nc?.info?.server_name,nu===void 0)throw new Error("Unable to get jetstream manager server name");return nu}a(au,"getJsmServerName");async function n3(){let e=await iu(),t=await au(),r=await lD();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=s3(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===be.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${be.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;qr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===be.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${be.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;qr.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");qr.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l}await e.streams.update(s.name,s)}}}a(n3,"updateLocalStreams");function s3(e){let{config:t}=e,r=!1;if(t.name===be.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===be.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gt.get(Pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(s3,"updateStreamLimits")});var cd=T((p_e,AD)=>{"use strict";var ta=E_(),ra=UC(),i3=Y(),o3=require("uuid").v4,m_e=require("clone"),od=gs(),na=M(),a3=require("util"),si=wn(),{handleHDBError:ur,hdb_errors:c3}=Z(),{HDB_ERROR_MSGS:id,HTTP_STATUS_CODES:lr}=c3,{SchemaEventMsg:ad}=Cn(),TD=Nt(),{getDatabases:u3}=(Ae(),ee(qe)),{transformReq:sa}=J();AD.exports={createSchema:l3,createSchemaStructure:gD,createTable:_3,createTableStructure:RD,createAttribute:m3,dropSchema:d3,dropTable:f3,dropAttribute:E3,getBackup:p3};async function l3(e){let t=await gD(e);return od.signalSchemaChange(new ad(process.pid,e.operation,e.schema)),t}a(l3,"createSchema");async function gD(e){let t=ta.schema_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);if(sa(e),!await ra.checkSchemaExists(e.schema))throw ur(new Error,id.SCHEMA_EXISTS_ERR(e.schema),lr.BAD_REQUEST,na.LOG_LEVELS.ERROR,id.SCHEMA_EXISTS_ERR(e.schema),!0);return await si.createSchema(e),`database '${e.schema}' successfully created`}a(gD,"createSchemaStructure");async function _3(e){return sa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await RD(e)}a(_3,"createTable");async function RD(e){let t=ta.create_table_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);if(ta.validateTableResidence(e.residence),!await ra.checkSchemaTableExists(e.schema,e.table))throw ur(new Error,id.TABLE_EXISTS_ERR(e.schema,e.table),lr.BAD_REQUEST,na.LOG_LEVELS.ERROR,id.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:o3(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await si.createTable(n,e);else throw ur(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",lr.BAD_REQUEST);else await si.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(RD,"createTableStructure");async function d3(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ta.schema_object(e),n=t??r;if(n)throw ur(n,n.message,lr.BAD_REQUEST,void 0,void 0,!0);sa(e);let s=await ra.checkSchemaExists(e.schema);if(s)throw ur(new Error,s,lr.NOT_FOUND,na.LOG_LEVELS.ERROR,s,!0);let i=await ra.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await si.dropSchema(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema)),await TD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(d3,"dropSchema");async function f3(e){let t=ta.table_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw ur(new Error,r,lr.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);return await si.dropTable(e),await TD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(f3,"dropTable");async function E3(e){let t=ta.attribute_object(e);if(t)throw ur(t,t.message,lr.BAD_REQUEST,void 0,void 0,!0);sa(e);let r=await ra.checkSchemaTableExists(e.schema,e.table);if(r)throw ur(new Error,r,lr.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw ur(new Error,"You cannot drop a hash attribute",lr.BAD_REQUEST,void 0,void 0,!0);if(na.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw ur(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,lr.BAD_REQUEST,void 0,void 0,!0);try{return await si.dropAttribute(e),h3(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw i3.error(`Got an error deleting attribute ${a3.inspect(e)}.`),n}}a(E3,"dropAttribute");function h3(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(h3,"dropAttributeFromGlobal");async function m3(e){sa(e);let t=u3()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw ur(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,lr.BAD_REQUEST,void 0,void 0,!0);return await si.createAttribute(e),od.signalSchemaChange(new ad(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(m3,"createAttribute");function p3(e){return si.getBackup(e)}a(p3,"getBackup")});var bD=T((T_e,OD)=>{"use strict";var{OPERATIONS_ENUM:S3}=M(),aS=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}};OD.exports=aS});var cS=T((A_e,CD)=>{"use strict";var T3=wn(),R_e=bD(),ud=J(),ld=M(),g3=j(),{handleHDBError:ND,hdb_errors:R3}=Z(),{HDB_ERROR_MSGS:yD,HTTP_STATUS_CODES:ID}=R3,A3=Object.values(ld.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),wD="To use this operation audit log must be enabled in harperdb-config.yaml";CD.exports=O3;async function O3(e){if(ud.isEmpty(e.schema))throw new Error(yD.SCHEMA_REQUIRED_ERR);if(ud.isEmpty(e.table))throw new Error(yD.TABLE_REQUIRED_ERR);if(!g3.get(ld.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ND(new Error,wD,ID.BAD_REQUEST,ld.LOG_LEVELS.ERROR,wD,!0);let t=ud.checkSchemaTableExist(e.schema,e.table);if(t)throw ND(new Error,t,ID.NOT_FOUND,ld.LOG_LEVELS.ERROR,t,!0);if(!ud.isEmpty(e.search_type)&&A3.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await T3.readAuditLog(e)}a(O3,"readAuditLog")});var LD=T((b_e,DD)=>{"use strict";var{OPERATIONS_ENUM:b3}=M(),uS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=b3.GET_BACKUP,this.schema=t,this.table=r}};DD.exports=uS});var PD=T((w_e,UD)=>{"use strict";var N3=wn(),y_e=LD(),lS=J(),y3=M(),I_e=j(),{handleHDBError:I3,hdb_errors:w3}=Z(),{HDB_ERROR_MSGS:MD,HTTP_STATUS_CODES:C3}=w3;UD.exports=D3;async function D3(e){if(lS.isEmpty(e.schema))throw new Error(MD.SCHEMA_REQUIRED_ERR);if(lS.isEmpty(e.table))throw new Error(MD.TABLE_REQUIRED_ERR);let t=lS.checkSchemaTableExist(e.schema,e.table);if(t)throw I3(new Error,t,C3.NOT_FOUND,y3.LOG_LEVELS.ERROR,t,!0);return await N3.getBackup(read_audit_log_object)}a(D3,"getBackup")});var qD=T((D_e,FD)=>{var ii=require("validate.js"),BD=tt(),ia=M(),{handleHDBError:L3,hdb_errors:M3}=Z(),{HDB_ERROR_MSGS:dt,HTTP_STATUS_CODES:U3}=M3,_S=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),P3={STRUCTURE_USER:"structure_user"},vD=Object.values(ia.ROLE_TYPES_ENUM),v3="attribute_permissions",B3="attribute_name",{PERMS_CRUD_ENUM:oa}=ia,H3=[v3,...Object.values(oa)],HD=[oa.READ,oa.INSERT,oa.UPDATE],x3=[B3,...HD];function F3(e){let t=_S();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,xD(e,t)}a(F3,"addRoleValidation");function q3(e){let t=_S();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,xD(e,t)}a(q3,"alterRoleValidation");function G3(e){let t=_S();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,BD.validateObject(e,t)}a(G3,"dropRoleValidation");var k3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function xD(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)k3.includes(n[o])||s.push(n[o]);s.length>0&&pt(dt.INVALID_ROLE_JSON_KEYS(s),r);let i=BD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pt(o,r)}),e.permission){let o=V3(e);o&&pt(o,r),vD.forEach(c=>{e.permission[c]&&!ii.isBoolean(e.permission[c])&&pt(dt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(vD.indexOf(o)<0){if(o===P3.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(dt.SCHEMA_NOT_FOUND(d),r)}continue}pt(dt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pt(dt.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(dt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{H3.includes(l)||pt(dt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(oa).forEach(l=>{ii.isDefined(_[l])?ii.isBoolean(_[l])||pt(dt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):pt(dt.TABLE_PERM_MISSING(l),r,o,u)}),ii.isDefined(_.attribute_permissions)){if(!ii.isArray(_.attribute_permissions)){pt(dt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{pt(dt.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(S=>{!x3.includes(S)&&S!==oa.DELETE&&pt(dt.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!ii.isDefined(E.attribute_name)){pt(dt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){pt(dt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}HD.forEach(S=>{ii.isDefined(E[S])?ii.isBoolean(E[S])||pt(dt.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):pt(dt.ATTR_PERM_MISSING(S,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(dt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return $3(r)}a(xD,"customValidate");FD.exports={addRoleValidation:F3,alterRoleValidation:q3,dropRoleValidation:G3};function V3(e){let{operation:t,permission:r}=e;if(t===ia.OPERATIONS_ENUM.ADD_ROLE||t===ia.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 dt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ia.ROLE_TYPES_ENUM.SUPER_USER:ia.ROLE_TYPES_ENUM.CLUSTER_USER;return dt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(V3,"validateNoSUPerms");function $3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:dt.ROLE_PERMS_ERROR,...e};return L3(new Error,n,U3.BAD_REQUEST)}else return null}a($3,"generateRolePermResponse");function pt(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(pt,"addPermError")});var pS=T((M_e,$D)=>{"use strict";var GD=nn(),kD=rn(),Y3=ki(),fS=qD(),ES=gs(),K3=require("uuid").v4,W3=require("util"),_d=M(),Q3=J(),hS=kD.searchByValue,z3=kD.searchByHash,J3=W3.promisify(Y3.delete),X3=zn(),j3=jo(),{hdb_errors:Z3,handleHDBError:ro}=Z(),{HDB_ERROR_MSGS:VD,HTTP_STATUS_CODES:cu}=Z3,{UserEventMsg:mS}=Cn();$D.exports={addRole:eX,alterRole:tX,dropRole:rX,listRoles:nX};function dS(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(dS,"scrubRoleDetails");async function eX(e){let t=fS.addRoleValidation(e);if(t)throw t;e=dS(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 hS(r)||[])}catch(i){throw ro(i)}if(n&&n.length>0)throw ro(new Error,VD.ROLE_ALREADY_EXISTS(e.role),cu.CONFLICT,void 0,void 0,!0);e.id||(e.id=K3());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await GD.insert(s),ES.signalUserChange(new mS(process.pid)),e=dS(e),e}a(eX,"addRole");async function tX(e){let t=fS.alterRoleValidation(e);if(t)throw t;e=dS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await GD.update(r)}catch(s){throw ro(s)}if(n&&n?.message==="updated 0 of 1 records")throw ro(new Error,"Invalid role id",cu.BAD_REQUEST,void 0,void 0,!0);return await ES.signalUserChange(new mS(process.pid)),e}a(tX,"alterRole");async function rX(e){let t=fS.dropRoleValidation(e);if(t)throw ro(new Error,t,cu.BAD_REQUEST,void 0,void 0,!0);let r=new j3(_d.SYSTEM_SCHEMA_NAME,_d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await z3(r));if(n.length===0)throw ro(new Error,VD.ROLE_NOT_FOUND,cu.NOT_FOUND,void 0,void 0,!0);let s=new X3(_d.SYSTEM_SCHEMA_NAME,_d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await hS(s)),o=!1;if(Q3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw ro(new Error,`Cannot drop role ${n[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 J3(c),ES.signalUserChange(new mS(process.pid)),`${n[0].role} successfully deleted`}a(rX,"dropRole");async function nX(){return hS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(nX,"listRoles")});var QD=T((P_e,WD)=>{"use strict";var sX=j(),oi=require("joi"),iX=tt(),YD=require("moment"),oX=require("fs-extra"),SS=require("path"),aX=require("lodash"),uu=M(),{LOG_LEVELS:no}=M(),cX="YYYY-MM-DD hh:mm:ss",uX=SS.resolve(__dirname,"../logs");WD.exports=function(e){return iX.validateBySchema(e,lX)};var lX=oi.object({from:oi.custom(KD),until:oi.custom(KD),level:oi.valid(no.NOTIFY,no.FATAL,no.ERROR,no.WARN,no.INFO,no.DEBUG,no.TRACE),order:oi.valid("asc","desc"),limit:oi.number().min(1),start:oi.number().min(0),log_name:oi.custom(_X)});function KD(e,t){if(YD(e,YD.ISO_8601).format(cX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(KD,"validateDatetime");function _X(e,t){if(aX.invert(uu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=sX.get(uu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?uu.LOG_NAMES.HDB:e,i=s===uu.LOG_NAMES.INSTALL?SS.join(uX,uu.LOG_NAMES.INSTALL):SS.join(n,s);return oX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(_X,"validateReadLogPath")});var gS=T((B_e,JD)=>{"use strict";var dd=M(),dX=Y(),fX=j(),EX=QD(),TS=require("path"),zD=require("fs-extra"),{once:hX}=require("events"),{handleHDBError:mX,hdb_errors:pX}=Z(),{PACKAGE_ROOT:SX}=M(),TX=TS.join(SX,"logs"),gX=1e3,RX=200;JD.exports=AX;async function AX(e){let t=EX(e);if(t)throw mX(t,t.message,pX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=fX.get(dd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?dd.LOG_NAMES.HDB:e.log_name,s=n===dd.LOG_NAMES.INSTALL?TS.join(TX,dd.LOG_NAMES.INSTALL):TS.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?gX:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,S=0;f==="desc"&&!u&&!l&&(S=Math.max(zD.statSync(s).size-(h+5)*RX,0));let p=zD.createReadStream(s,{start:S});p.on("error",H=>{dX.error(H)});let g=0,A=[],b="",v;p.on("data",H=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=b+H;let z=0,W;for(;(W=P.exec(H))&&!p.destroyed;){v&&(v.message=H.slice(z,W.index),G(v));let[Q,se,pe]=W,oe=pe.split("] ["),Fe=oe[0],ce=oe[1];oe.splice(0,2),v={timestamp:se,thread:Fe,level:ce,tags:oe,message:""},z=W.index+Q.length}b=H.slice(z)}),p.on("end",H=>{p.destroyed||v&&(v.message=b.trim(),G(v))}),p.resume();function G(H){let P,z,W;switch(!0){case(i&&c&&_):P=new Date(H.timestamp),z=new Date(u),W=new Date(l),H.level===o&&P>=z&&P<=W&&g<E?g++:H.level===o&&P>=z&&P<=W&&(ai(H,f,A),g++,g===h&&p.destroy());break;case(i&&c):P=new Date(H.timestamp),z=new Date(u),H.level===o&&P>=z&&g<E?g++:H.level===o&&P>=z&&(ai(H,f,A),g++,g===h&&p.destroy());break;case(i&&_):P=new Date(H.timestamp),W=new Date(l),H.level===o&&P<=W&&g<E?g++:H.level===o&&P<=W&&(ai(H,f,A),g++,g===h&&p.destroy());break;case(c&&_):P=new Date(H.timestamp),z=new Date(u),W=new Date(l),P>=z&&P<=W&&g<E?g++:P>=z&&P<=W&&(ai(H,f,A),g++,g===h&&p.destroy());break;case i:H.level===o&&g<E?g++:H.level===o&&(ai(H,f,A),g++,g===h&&p.destroy());break;case c:P=new Date(H.timestamp),z=new Date(u),P>=z&&g<E?g++:P>=z&&g>=E&&(ai(H,f,A),g++,g===h&&p.destroy());break;case _:P=new Date(H.timestamp),W=new Date(l),P<=W&&g<E?g++:P<=W&&g>=E&&(ai(H,f,A),g++,g===h&&p.destroy());break;default:g<E?g++:(ai(H,f,A),g++,g===h&&p.destroy())}}return a(G,"onLogMessage"),await hX(p,"close"),A}a(AX,"readLog");function ai(e,t,r){t==="desc"?OX(e,r):t==="asc"?bX(e,r):r.push(e)}a(ai,"pushLineToResult");function OX(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(OX,"insertDescending");function bX(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(bX,"insertAscending")});var fd=T((G_e,eL)=>{"use strict";var RS=require("joi"),{string:lu,boolean:XD,date:NX}=RS.types(),yX=tt(),{validateSchemaExists:x_e,validateTableExists:F_e,validateSchemaName:q_e}=Yn(),IX=M(),wX=st(),jD=j();jD.initSync();var CX=lu.invalid(jD.get(IX.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(wX.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(),ZD={operation:lu.valid("add_node","update_node","set_node_replication"),node_name:CX,subscriptions:RS.array().items({table:lu.optional(),schema:lu.optional(),database:lu.optional(),subscribe:XD.required(),publish:XD.required().custom(LX),start_time:NX.iso()}).min(1).required()};function DX(e){return yX.validateBySchema(e,RS.object(ZD))}a(DX,"addUpdateNodeValidator");function LX(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(LX,"checkForFalsy");eL.exports={addUpdateNodeValidator:DX,validation_schema:ZD}});var rL=T((V_e,tL)=>{var MX=tt(),UX={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};tL.exports=function(e){return MX.validateObject(e,UX)}});var OS=T(($_e,nL)=>{"use strict";var PX=M().OPERATIONS_ENUM,AS=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=PX.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};nL.exports=AS});var iL=T((K_e,sL)=>{"use strict";var vX={OPERATION:"operation",REFRESH:"refresh"},bS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},NS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};sL.exports={JWTTokens:bS,TOKEN_TYPE_ENUM:vX,JWTRSAKeys:NS}});var fu=T((Q_e,uL)=>{"use strict";var du=require("jsonwebtoken"),yS=require("fs-extra"),IS=J(),cn=M(),{handleHDBError:_r,hdb_errors:BX}=Z(),{HTTP_STATUS_CODES:dr,AUTHENTICATION_ERROR_MSGS:fr}=BX,_u=Y(),oL=I_(),DS=sn(),HX=nn().update,xX=OS(),FX=gs(),{UserEventMsg:qX}=Cn(),ci=j();ci.initSync();var wS=require("path"),{JWTTokens:GX,JWTRSAKeys:kX,TOKEN_TYPE_ENUM:Ed}=iL(),VX=ci.get(cn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ci.get(cn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",$X=ci.get(cn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ci.get(cn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",hd="RS256",CS;uL.exports={createTokens:YX,validateOperationToken:WX,refreshOperationToken:KX,validateRefreshToken:cL};async function YX(e){if(IS.isEmpty(e)||typeof e!="object")throw _r(new Error,fr.INVALID_AUTH_OBJECT,dr.BAD_REQUEST,void 0,void 0,!0);if(IS.isEmpty(e.username))throw _r(new Error,fr.USERNAME_REQUIRED,dr.BAD_REQUEST,void 0,void 0,!0);if(IS.isEmpty(e.password))throw _r(new Error,fr.PASSWORD_REQUIRED,dr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await DS.findAndValidateUser(e.username,e.password),!t)throw _r(new Error,fr.INVALID_CREDENTIALS,dr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw _u.error(f),_r(new Error,fr.INVALID_CREDENTIALS,dr.UNAUTHORIZED,void 0,void 0,!0)}let r=await md(),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 aL(i,r.private_key,r.passphrase),c=await du.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:$X,algorithm:hd,subject:Ed.REFRESH}),u=oL.hash(c),_=new xX(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await HX(_)}catch(f){_u.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw _r(new Error,fr.REFRESH_TOKEN_SAVE_FAILED,dr.INTERNAL_SERVER_ERROR);return FX.signalUserChange(new qX(process.pid)),new GX(o,c)}a(YX,"createTokens");async function aL(e,t,r){return await du.sign(e,{key:t,passphrase:r},{expiresIn:VX,algorithm:hd,subject:Ed.OPERATION})}a(aL,"signOperationToken");async function md(){if(CS===void 0)try{let e=wS.join(ci.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=wS.join(ci.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=wS.join(ci.getHdbBasePath(),cn.LICENSE_KEY_DIR_NAME,cn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await yS.readFile(e)).toString(),s=(await yS.readFile(t)).toString(),i=(await yS.readFile(r)).toString();CS=new kX(i,s,n)}catch(e){throw _u.error(e),_r(new Error,fr.NO_ENCRYPTION_KEYS,dr.INTERNAL_SERVER_ERROR)}return CS}a(md,"getJWTRSAKeys");async function KX(e){if(!e)throw _r(new Error,fr.INVALID_BODY,dr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw _r(new Error,fr.REFRESH_TOKEN_REQUIRED,dr.BAD_REQUEST,void 0,void 0,!0);await cL(e.refresh_token);let t=await md(),r=await du.decode(e.refresh_token);return{operation_token:await aL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(KX,"refreshOperationToken");async function WX(e){try{let t=await md(),r=await du.verify(e,t.public_key,{algorithms:hd,subject:Ed.OPERATION});return await DS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw _u.warn(t),t.name&&t.name==="TokenExpiredError"?_r(new Error,fr.TOKEN_EXPIRED,dr.FORBIDDEN):_r(new Error,fr.INVALID_TOKEN,dr.UNAUTHORIZED)}}a(WX,"validateOperationToken");async function cL(e){let t;try{let r=await md(),n=await du.verify(e,r.public_key,{algorithms:hd,subject:Ed.REFRESH});t=await DS.findAndValidateUser(n.username,void 0,!1)}catch(r){throw _u.warn(r),r.name&&r.name==="TokenExpiredError"?_r(new Error,fr.TOKEN_EXPIRED,dr.FORBIDDEN):_r(new Error,fr.INVALID_TOKEN,dr.UNAUTHORIZED)}if(!oL.validate(t.refresh_token,e))throw _r(new Error,fr.INVALID_TOKEN,dr.UNAUTHORIZED);return t}a(cL,"validateRefreshToken")});var LS=T((X_e,dL)=>{"use strict";var QX=rL(),aa=require("passport"),zX=require("passport-local").Strategy,JX=require("passport-http").BasicStrategy,XX=require("util"),jX=sn(),_L=XX.callbackify(jX.findAndValidateUser),J_e=wr(),ZX=M(),lL=fu();aa.use(new zX(function(e,t,r){_L(e,t,r)}));aa.use(new JX(function(e,t,r){_L(e,t,r)}));aa.serializeUser(function(e,t){t(null,e)});aa.deserializeUser(function(e,t){t(null,e)});function ej(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":aa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===ZX.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?lL.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):lL.validateOperationToken(s).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(ej,"authorize");function tj(e,t){let r=QX(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(tj,"checkPermissions");dL.exports={authorize:ej,checkPermissions:tj}});var ca=T((Z_e,fL)=>{"use strict";var MS=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},US=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};fL.exports={Node:MS,NodeSubscription:US}});var hL=T((tde,EL)=>{"use strict";var rj=M().OPERATIONS_ENUM,PS=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=rj.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EL.exports=PS});var Eu=T((nde,mL)=>{"use strict";var vS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},BS=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)}};mL.exports={RemotePayloadObject:vS,RemotePayloadSubscription:BS}});var SL=T((ide,pL)=>{"use strict";var HS=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}};pL.exports=HS});var RL=T((lde,gL)=>{"use strict";var nj=SL(),ade=Et(),TL=We(),sj=Y(),{getSchemaPath:cde,getTransactionAuditStorePath:ude}=Je(),{getDatabases:ij}=(Ae(),ee(qe));gL.exports=oj;async function oj(e){let t=new nj;try{let r=ij()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await TL.environmentDataSize(schema_path,e.name),o=await TL.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){sj.warn(`unable to stat table dbi due to ${r}`)}return t}a(oj,"lmdbGetTableSize")});var OL=T((dde,AL)=>{"use strict";var xS=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}};AL.exports=xS});var ua=T((mde,IL)=>{"use strict";var aj=require("fs-extra"),cj=require("path"),Jt=require("systeminformation"),ui=Y(),uj=Nt(),FS=st(),Sd=M(),lj=RL(),yL=Hi(),{getThreadInfo:bL}=rt(),zS=j();zS.initSync();var _j=OL(),{openEnvironment:Ede}=We(),{getSchemaPath:hde}=Je(),{database:dj}=(Ae(),ee(qe)),pd;IL.exports={getHDBProcessInfo:VS,getNetworkInfo:YS,getDiskInfo:$S,getMemoryInfo:kS,getCPUInfo:GS,getTimeInfo:qS,getSystemInformation:KS,systemInformation:fj,getTableSize:WS,getMetrics:QS};function qS(){return Jt.time()}a(qS,"getTimeInfo");async function GS(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:S,raw_currentload_user:p,cpus:g,...A}=await Jt.currentLoad();return A.cpus=[],g.forEach(b=>{let{raw_load:v,raw_load_idle:G,raw_load_irq:H,raw_load_nice:P,raw_load_system:z,raw_load_user:W,...Q}=b;A.cpus.push(Q)}),l.current_load=A,l}catch(e){return ui.error(`error in getCPUInfo: ${e}`),{}}}a(GS,"getCPUInfo");async function kS(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Jt.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ui.error(`error in getMemoryInfo: ${e}`),{}}}a(kS,"getMemoryInfo");async function VS(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await aj.readFile(cj.join(zS.get(Sd.CONFIG_PARAMS.ROOTPATH),Sd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Sd.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(VS,"getHDBProcessInfo");async function $S(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return ui.error(`error in getDiskInfo: ${t}`),e}}a($S,"getDiskInfo");async function YS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.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 Jt.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(YS,"getNetworkInfo");async function KS(){if(pd!==void 0)return pd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,pd=e,pd}catch(t){return ui.error(`error in getSystemInformation: ${t}`),e}}a(KS,"getSystemInformation");async function WS(){let e=[],t=await yL.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await lj(n));return e}a(WS,"getTableSize");async function QS(){let e=await yL.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=dj({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(QS,"getMetrics");async function NL(){if(zS.get(Sd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await uj.getNATSReferences(),r=await t.streams.info(FS.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(FS.WORK_QUEUE_CONSUMER_NAMES.stream_name,FS.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(NL,"getNatsStreamInfo");async function fj(e){let t=new _j;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await KS(),t.time=qS(),t.cpu=await GS(),t.memory=await kS(),t.disk=await $S(),t.network=await YS(),t.harperdb_processes=await VS(),t.table_size=await WS(),t.metrics=await QS(),t.threads=await bL(),t.replication=await NL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await KS();break;case"time":t.time=qS();break;case"cpu":t.cpu=await GS();break;case"memory":t.memory=await kS();break;case"disk":t.disk=await $S();break;case"network":t.network=await YS();break;case"harperdb_processes":t.harperdb_processes=await VS();break;case"table_size":t.table_size=await WS();break;case"database_metrics":case"metrics":t.metrics=await QS();break;case"threads":t.threads=await bL();break;case"replication":t.replication=await NL();break;default:break}return t}a(fj,"systemInformation")});var gd=T((Sde,wL)=>{"use strict";wL.exports={version:Ej,printVersion:hj};var Td=Xc();function Ej(){if(Td)return Td.version}a(Ej,"version");function hj(){Td&&console.log(`HarperDB Version ${Td.version}`)}a(hj,"printVersion")});var Ns=T((Ade,ML)=>{"use strict";var mj=nn(),JS=J(),pj=require("util"),so=M(),CL=j();CL.initSync();var Sj=LS(),DL=rn(),{Node:gde,NodeSubscription:Rde}=ca(),Tj=jo(),gj=hL(),{RemotePayloadObject:Rj,RemotePayloadSubscription:Aj}=Eu(),{handleHDBError:Oj,hdb_errors:bj}=Z(),{HTTP_STATUS_CODES:Nj,HDB_ERROR_MSGS:yj}=bj,Ij=zn(),wj=ua(),Cj=gd(),{getDatabases:Dj}=(Ae(),ee(qe)),Lj=pj.promisify(Sj.authorize),Mj=DL.searchByHash,Uj=DL.searchByValue;ML.exports={authHeaderToUser:Pj,isEmpty:vj,getNodeRecord:Bj,upsertNodeRecord:Hj,buildNodePayloads:xj,checkClusteringEnabled:Fj,getAllNodeRecords:qj,getSystemInfo:Gj,reverseSubscription:LL};async function Pj(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Lj(t,null),e}a(Pj,"authHeaderToUser");function vj(e){return e==null}a(vj,"isEmpty");async function Bj(e){let t=new Tj(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Mj(t)}a(Bj,"getNodeRecord");async function Hj(e){let t=new gj(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return mj.upsert(t)}a(Hj,"upsertNodeRecord");function LL(e){if(JS.isEmpty(e.subscribe)||JS.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(LL,"reverseSubscription");function xj(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=JS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=LL(c),E=Dj()[u]?.[_],h=new Aj(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new Rj(r,t,s,n)}a(xj,"buildNodePayloads");function Fj(){if(!CL.get(so.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Oj(new Error,yj.CLUSTERING_NOT_ENABLED,Nj.BAD_REQUEST,void 0,void 0,!0)}a(Fj,"checkClusteringEnabled");async function qj(){let e=new Ij(so.SYSTEM_SCHEMA_NAME,so.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Uj(e))}a(qj,"getAllNodeRecords");async function Gj(){let e=await wj.getSystemInformation();return{hdb_version:Cj.version(),node_version:e.node_version,platform:e.platform}}a(Gj,"getSystemInfo")});var XS=T((bde,qL)=>{"use strict";var Rd=Nt(),UL=J(),PL=st(),vL=M(),Ad=Y(),BL=cd(),kj=pp(),{RemotePayloadObject:Vj}=Eu(),{handleHDBError:HL,hdb_errors:$j}=Z(),{HTTP_STATUS_CODES:xL}=$j,{NodeSubscription:FL}=ca();qL.exports=Yj;async function Yj(e,t){let r;try{r=await Rd.request(`${t}.${PL.REQUEST_SUFFIX}`,new Vj(vL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ad.trace("Response from remote describe all request:",r)}catch(o){Ad.error(`addNode received error from describe all request to remote node: ${o}`);let c=Rd.requestErrorHandler(o,"add_node",t);throw HL(new Error,c,xL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===PL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw HL(new Error,o,xL.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===vL.SYSTEM_SCHEMA_NAME){await Rd.createLocalTableStream(u,c);let h=new FL(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=UL.doesSchemaExist(u),l=n[u]!==void 0,d=c?UL.doesTableExist(u,c):!0,f=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!f){s.push(o);continue}if(!_&&l&&(Ad.trace(`addNode creating schema: ${u}`),await BL.createSchema({operation:"create_schema",schema:u})),!d&&f){Ad.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new kj(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await BL.createTable(h)}await Rd.createLocalTableStream(u,c);let E=new FL(u,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(Yj,"reviewSubscriptions")});var Nd=T((yde,VL)=>{"use strict";var{handleHDBError:Od,hdb_errors:Kj}=Z(),{HTTP_STATUS_CODES:bd}=Kj,{addUpdateNodeValidator:Wj}=fd(),hu=Y(),kL=M(),GL=st(),Qj=J(),jS=Nt(),mu=Ns(),zj=j(),Jj=XS(),{Node:Xj,NodeSubscription:jj}=ca(),{broadcast:Zj}=rt(),eZ="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",tZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",rZ=zj.get(kL.CONFIG_PARAMS.CLUSTERING_NODENAME);VL.exports=nZ;async function nZ(e,t=!1){hu.trace("addNode called with:",e),mu.checkClusteringEnabled();let r=Wj(e);if(r)throw Od(r,r.message,bd.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await mu.getNodeRecord(n);if(!Qj.isEmptyOrZeroLength(d))throw Od(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,bd.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Jj(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=eZ,o;let c=mu.buildNodePayloads(s,rZ,kL.OPERATIONS_ENUM.ADD_NODE,await mu.getSystemInfo());hu.trace("addNode sending remote payload:",c);let u;try{u=await jS.request(`${n}.${GL.REQUEST_SUFFIX}`,c)}catch(d){hu.error(`addNode received error from request: ${d}`);let f=jS.requestErrorHandler(d,"add_node",n);throw Od(new Error,f,bd.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===GL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Od(new Error,d,bd.INTERNAL_SERVER_ERROR,"error",d)}hu.trace(u);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];hu.trace("Add node updating work stream for node:",n,"subscriptions:",E),await jS.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new jj(E.schema,E.table,E.publish,E.subscribe))}let l=new Xj(n,_,u.system_info);return await mu.upsertNodeRecord(l),Zj({type:"nats_update"}),i.length>0?o.message=tZ:o.message=`Successfully added '${n}' to manifest`,o}a(nZ,"addNode")});var rT=T((Cde,KL)=>{"use strict";var{handleHDBError:ZS,hdb_errors:sZ}=Z(),{HTTP_STATUS_CODES:eT}=sZ,{addUpdateNodeValidator:iZ}=fd(),pu=Y(),YL=M(),$L=st(),wde=J(),tT=Nt(),Su=Ns(),oZ=j(),{cloneDeep:aZ}=require("lodash"),cZ=XS(),{Node:uZ,NodeSubscription:lZ}=ca(),{broadcast:_Z}=rt(),dZ="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",fZ="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",EZ=oZ.get(YL.CONFIG_PARAMS.CLUSTERING_NODENAME);KL.exports=hZ;async function hZ(e){pu.trace("updateNode called with:",e),Su.checkClusteringEnabled();let t=iZ(e);if(t)throw ZS(t,t.message,eT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Su.getNodeRecord(r);s.length>0&&(n=aZ(s));let{added:i,skipped:o}=await cZ(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=dZ,c;let u=Su.buildNodePayloads(i,EZ,YL.OPERATIONS_ENUM.UPDATE_NODE,await Su.getSystemInfo());pu.trace("updateNode sending remote payload:",u);let _;try{_=await tT.request(`${r}.${$L.REQUEST_SUFFIX}`,u)}catch(l){pu.error(`updateNode received error from request: ${l}`);let d=tT.requestErrorHandler(l,"update_node",r);throw ZS(new Error,d,eT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===$L.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw ZS(new Error,l,eT.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 tT.updateWorkStream(f,r),i[l].start_time===void 0&&delete i[l].start_time}return n||(n=[new uZ(r,[],_.system_info)]),await mZ(n[0],i,_.system_info),o.length>0?c.message=fZ:c.message=`Successfully updated '${r}'`,c}a(hZ,"updateNode");async function mZ(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 lZ(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Su.upsertNodeRecord(n),_Z({type:"nats_update"})}a(mZ,"updateNodeTable")});var XL=T((Lde,JL)=>{"use strict";var zL=require("joi"),{string:WL}=zL.types(),pZ=tt(),QL=M(),SZ=j(),TZ=st();JL.exports=gZ;function gZ(e){let t=WL.invalid(SZ.get(QL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(TZ.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=zL.object({operation:WL.valid(QL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return pZ.validateBySchema(e,r)}a(gZ,"removeNodeValidator")});var Id=T((Ude,nM)=>{"use strict";var{handleHDBError:jL,hdb_errors:RZ}=Z(),{HTTP_STATUS_CODES:ZL}=RZ,AZ=XL(),Tu=Y(),eM=Ns(),OZ=J(),yd=M(),tM=st(),rM=Nt(),bZ=j(),{RemotePayloadObject:NZ}=Eu(),{NodeSubscription:yZ}=ca(),IZ=Vc(),wZ=ki(),{broadcast:CZ}=rt(),DZ=bZ.get(yd.CONFIG_PARAMS.CLUSTERING_NODENAME);nM.exports=LZ;async function LZ(e){Tu.trace("removeNode called with:",e),eM.checkClusteringEnabled();let t=AZ(e);if(t)throw jL(t,t.message,ZL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await eM.getNodeRecord(r);if(OZ.isEmptyOrZeroLength(n))throw jL(new Error,`Node '${r}' was not found.`,ZL.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new NZ(yd.OPERATIONS_ENUM.REMOVE_NODE,DZ,[]),i,o=!1;try{i=await rM.request(`${r}.${tM.REQUEST_SUFFIX}`,s),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,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];Tu.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new yZ(l.schema,l.table,!1,!1);await rM.updateWorkStream(d,r)}let c=new IZ(yd.SYSTEM_SCHEMA_NAME,yd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await wZ.deleteRecord(c),CZ({type:"nats_update"}),i?.status===tM.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(LZ,"removeNode")});var oM=T((vde,iM)=>{"use strict";var sM=require("joi"),{string:MZ,array:UZ}=sM.types(),PZ=tt(),vZ=fd();iM.exports=BZ;function BZ(e){let t=sM.object({operation:MZ.valid("configure_cluster").required(),connections:UZ.items(vZ.validation_schema).required()});return PZ.validateBySchema(e,t)}a(BZ,"configureClusterValidator")});var nT=T((Hde,_M)=>{"use strict";var HZ=M(),wd=Y(),xZ=J(),FZ=Id(),qZ=Nd(),aM=Ns(),GZ=oM(),{handleHDBError:cM,hdb_errors:kZ}=Z(),{HTTP_STATUS_CODES:uM}=kZ,VZ="Configure cluster complete.",$Z="Failed to configure the cluster. Check the logs for more details.",YZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";_M.exports=KZ;async function KZ(e){wd.trace("configure cluster called with:",e),aM.checkClusteringEnabled();let t=GZ(e);if(t)throw cM(t,t.message,uM.BAD_REQUEST,void 0,void 0,!0);let r=await aM.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(lM(FZ,{operation:HZ.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);wd.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(lM(qZ,E,E.node_name))}let c=await Promise.allSettled(i);wd.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"&&(wd.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(xZ.isEmptyOrZeroLength(u))return{message:VZ,connections:_};if(l)return{message:YZ,failed_nodes:u,connections:_};throw cM(new Error,$Z,uM.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(KZ,"configureCluster");async function lM(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(lM,"functionWrapper")});var fM=T((Fde,dM)=>{"use strict";var Cd=require("joi"),WZ=tt(),{validateSchemaExists:QZ,validateTableExists:zZ,validateSchemaName:JZ}=Yn(),XZ=Cd.object({operation:Cd.string().valid("purge_stream"),schema:Cd.string().custom(QZ).custom(JZ).required(),table:Cd.string().custom(zZ).required()});function jZ(e){return WZ.validateBySchema(e,XZ)}a(jZ,"purgeStreamValidator");dM.exports=jZ});var sT=T((Gde,EM)=>{"use strict";var{handleHDBError:ZZ,hdb_errors:e5}=Z(),{HTTP_STATUS_CODES:t5}=e5,r5=fM(),n5=Nt(),s5=Ns();EM.exports=i5;async function i5(e){if(e.purge_ingest!==!0){let s=r5(e);if(s)throw ZZ(s,s.message,t5.BAD_REQUEST,void 0,void 0,!0)}s5.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await n5.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(i5,"purgeStream")});var aT=T((Vde,gM)=>{"use strict";var oT=Ns(),o5=Nt(),pM=j(),Dd=M(),io=st(),a5=J(),iT=Y(),{RemotePayloadObject:c5}=Eu(),{ErrorCode:hM}=require("nats"),mM=pM.get(Dd.CONFIG_PARAMS.CLUSTERING_ENABLED),SM=pM.get(Dd.CONFIG_PARAMS.CLUSTERING_NODENAME);gM.exports={clusterStatus:u5,buildNodeStatus:TM};async function u5(){let e={node_name:SM,is_enabled:mM,connections:[]};if(!mM)return e;let t=await oT.getAllNodeRecords();if(a5.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(TM(t[n],e.connections));return await Promise.allSettled(r),e}a(u5,"clusterStatus");async function TM(e,t){let r=e.name,n=new c5(Dd.OPERATIONS_ENUM.CLUSTER_STATUS,SM,void 0,await oT.getSystemInfo()),s,i,o=io.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await o5.request(io.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===io.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=io.CLUSTER_STATUS_STATUSES.CLOSED,iT.error(`Error getting node status from ${r} `,s))}catch(u){iT.warn(`Error getting node status from ${r}`,u),u.code===hM.NoResponders?o=io.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===hM.Timeout?o=io.CLUSTER_STATUS_STATUSES.TIMEOUT:o=io.CLUSTER_STATUS_STATUSES.CLOSED}let c=new l5(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 oT.upsertNodeRecord(u)}catch(u){iT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(TM,"buildNodeStatus");function l5(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(l5,"NodeStatusObject")});var uT=T((Yde,RM)=>{"use strict";var{handleHDBError:_5,hdb_errors:d5}=Z(),{HTTP_STATUS_CODES:f5}=d5,E5=Nt(),h5=Ns(),cT=J(),Ld=require("joi"),m5=tt(),p5=2e3,S5=Ld.object({timeout:Ld.number().min(1),connected_nodes:Ld.boolean(),routes:Ld.boolean()});RM.exports=T5;async function T5(e){h5.checkClusteringEnabled();let t=m5.validateBySchema(e,S5);if(t)throw _5(t,t.message,f5.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||cT.autoCastBoolean(n),o=s===void 0||cT.autoCastBoolean(s),c={nodes:[]},u=await E5.getServerList(r??p5),_={};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(S=>{h.connected_nodes.includes(S.name.slice(0,-4))||h.connected_nodes.push(S.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(S=>({host:S.split(":")[0],port:cT.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(T5,"clusterNetwork")});var NM=T((Wde,bM)=>{"use strict";var lT=require("joi"),AM=tt(),{route_constraints:OM}=fh();bM.exports={setRoutesValidator:g5,deleteRoutesValidator:R5};function g5(e){let t=lT.object({server:lT.valid("hub","leaf").required(),routes:OM.required()});return AM.validateBySchema(e,t)}a(g5,"setRoutesValidator");function R5(e){let t=lT.object({routes:OM.required()});return AM.validateBySchema(e,t)}a(R5,"deleteRoutesValidator")});var dT=T((zde,CM)=>{"use strict";var oo=Lr(),_T=J(),Md=M(),yM=NM(),{handleHDBError:IM,hdb_errors:A5}=Z(),{HTTP_STATUS_CODES:wM}=A5,O5="cluster routes successfully set",b5="cluster routes successfully deleted";CM.exports={setRoutes:N5,getRoutes:y5,deleteRoutes:I5};function N5(e){let t=yM.setRoutesValidator(e);if(t)throw IM(t,t.message,wM.BAD_REQUEST,void 0,void 0,!0);let r=oo.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=_T.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"?oo.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):oo.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:O5,set:o,skipped:i}}a(N5,"setRoutes");function y5(){let e=oo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(y5,"getRoutes");function I5(e){let t=yM.deleteRoutesValidator(e);if(t)throw IM(t,t.message,wM.BAD_REQUEST,void 0,void 0,!0);let r=oo.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 S=n[E];if(d.host===S.host&&d.port===S.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,S=s.length;h<S;h++){let p=s[h];if(d.host===p.host&&d.port===p.port){s.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=_T.isEmptyOrZeroLength(n)?null:n,oo.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=_T.isEmptyOrZeroLength(s)?null:s,oo.updateConfigValue(Md.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:b5,deleted:i,skipped:o}}a(I5,"deleteRoutes")});var LM=T((Xde,DM)=>{"use strict";var gu=require("alasql"),ao=require("recursive-iterator"),Pn=Y(),w5=J(),Ru=M(),fT=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,D5(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=>Ru.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=>!Ru.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][Ru.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=C5(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:_});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 C5(e){return e.filter(t=>t[Ru.PERMS_CRUD_ENUM.READ])}a(C5,"filterReadRestrictedAttrs");function D5(e,t,r,n,s){L5(e,t,r,n,s)}a(D5,"interpretAST");function Au(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(Au,"addSchemaTableToMap");function L5(e,t,r,n,s){if(!e){Pn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof gu.yy.Insert?v5(e,t,r):e instanceof gu.yy.Select?M5(e,t,r,n,s):e instanceof gu.yy.Update?U5(e,t,r):e instanceof gu.yy.Delete?P5(e,t,r):Pn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(L5,"getRecordAttributesAST");function M5(e,t,r,n,s){if(!e){Pn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(w5.isEmptyOrZeroLength(i)){Pn.error("No schema specified");return}e.from.forEach(c=>{Au(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Au(c.table,t,r,n,s)});let o=new ao(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{Pn.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 ao(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{Pn.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 ao(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{Pn.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 ao(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{Pn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(M5,"getSelectAttributes");function U5(e,t,r){if(!e){Pn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ao(e.columns),s=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ET(e.table.tableid,s,i.columnid,t,r)}a(U5,"getUpdateAttributes");function P5(e,t,r){if(!e){Pn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ao(e.where),s=e.table.databaseid;Au(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&ET(e.table.tableid,s,i.columnid,t,r)}a(P5,"getDeleteAttributes");function v5(e,t,r){if(!e){Pn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ao(e.columns),s=e.into.databaseid;Au(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&ET(e.into.tableid,s,i.columnid,t,r)}a(v5,"getInsertAttributes");function ET(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(ET,"pushAttribute");DM.exports=fT});var pT=T((Zde,vM)=>{var Ud=Vi(),MM=require("chalk"),Gr=Y(),UM=require("prompt"),{promisify:B5}=require("util"),hT=M(),H5=require("fs-extra"),x5=require("path"),F5=J(),q5=gd(),PM=j();PM.initSync();var G5=require("moment"),k5=B5(UM.get),V5=x5.join(PM.getHdbBasePath(),hT.LICENSE_KEY_DIR_NAME,hT.LICENSE_FILE_NAME,hT.LICENSE_FILE_NAME);vM.exports={getFingerprint:Y5,setLicense:$5,parseLicense:mT,register:K5,getRegistrationInfo:Q5};async function $5(e){if(e&&e.key&&e.company){try{Gr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await mT(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($5,"setLicense");async function Y5(){let e={};try{e=await Ud.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gr.error(r),Gr.error(t),new Error(r)}return e}a(Y5,"getFingerprint");async function mT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Gr.info("Validating license input...");let r=Ud.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 H5.writeFile(V5,JSON.stringify({license_key:e,company:t}))}catch(n){throw Gr.error("Failed to write License"),n}return"Registration successful."}a(mT,"parseLicense");async function K5(){let e=await W5();return mT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(K5,"register");async function W5(){let e=await Ud.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:MM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:MM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{UM.start()}catch(n){Gr.error(n)}let r;try{r=await k5(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(W5,"promptForRegistration");async function Q5(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ud.getLicense()}catch(r){throw Gr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(F5.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=q5.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=G5.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Q5,"getRegistrationInfo")});var HM=T((tfe,BM)=>{"use strict";var z5=st(),ST=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+z5.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"}};BM.exports=ST});var qM=T((nfe,FM)=>{"use strict";var xM=st(),TT=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+xM.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+xM.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"}};FM.exports=TT});var kM=T((ife,GM)=>{"use strict";var gT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};GM.exports=gT});var $M=T((afe,VM)=>{"use strict";var J5=st(),RT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+J5.SERVER_SUFFIX.ADMIN,this.password=r}};VM.exports=RT});var bT=T((ufe,WM)=>{"use strict";var la=require("path"),Bd=require("fs-extra"),X5=HM(),j5=qM(),Z5=kM(),e8=$M(),AT=sn(),da=J(),Er=Lr(),vd=M(),Ou=st(),{CONFIG_PARAMS:ft}=vd,bu=Y(),Nu=j(),YM=Ts(),OT=Nt(),_a="clustering",t8=1e4,KM=5;WM.exports={generateNatsConfig:n8,removeNatsConfig:s8,getHubConfigPath:r8};function r8(){let e=Nu.get(ft.ROOTPATH);return la.join(e,_a,Ou.NATS_CONFIG_FILES.HUB_SERVER)}a(r8,"getHubConfigPath");async function n8(e=!1,t=void 0){Nu.initSync();let r=Nu.get(ft.ROOTPATH),n=la.join(r,_a,Ou.PID_FILES.HUB),s=la.join(r,_a,Ou.PID_FILES.LEAF),i=Er.getConfigFromFile(ft.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=Er.getConfigFromFile(ft.CLUSTERING_TLS_CERTIFICATE),_=Er.getConfigFromFile(ft.CLUSTERING_TLS_PRIVATEKEY),l=Er.getConfigFromFile(ft.CLUSTERING_TLS_CERT_AUTH),d=Er.getConfigFromFile(ft.CLUSTERING_TLS_INSECURE),f=Er.getConfigFromFile(ft.CLUSTERING_TLS_VERIFY),E=Er.getConfigFromFile(ft.CLUSTERING_NODENAME),h=Er.getConfigFromFile(ft.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await OT.checkNATSServerInstalled()||Hd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await AT.listUsers(),p=Er.getConfigFromFile(ft.CLUSTERING_USER),g=await AT.getClusterUser();(da.isEmpty(g)||g.active!==!0)&&Hd(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Pd(ft.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Pd(ft.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Pd(ft.CLUSTERING_HUBSERVER_NETWORK_PORT),await Pd(ft.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],b=[];for(let[Q,se]of S.entries())se.role.role===vd.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(A.push(new e8(se.username,YM.decrypt(se.hash))),b.push(new Z5(se.username,YM.decrypt(se.hash))));let v=[],{hub_routes:G}=Er.getClusteringRoutes();if(!da.isEmptyOrZeroLength(G))for(let Q of G)v.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let H=new X5(Er.getConfigFromFile(ft.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,u,_,l,d,f,h,Er.getConfigFromFile(ft.CLUSTERING_HUBSERVER_CLUSTER_NAME),Er.getConfigFromFile(ft.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),v,A,b);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===vd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Bd.writeJson(o,H),bu.trace(`Hub server config written to ${o}`));let P=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new j5(Er.getConfigFromFile(ft.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[P],[z],A,b,u,_,l,d);l==null&&delete W.tls.ca_file,(t===void 0||t===vd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Bd.writeJson(c,W),bu.trace(`Leaf server config written to ${c}`))}a(n8,"generateNatsConfig");async function Pd(e){let t=Nu.get(e);return da.isEmpty(t)&&Hd(`port undefined for '${e}'`),await da.isPortTaken(t)&&Hd(`'${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(Pd,"isPortAvailable");function Hd(e){let t=`Error generating clustering config: ${e}`;bu.error(t),console.error(t),process.exit(1)}a(Hd,"generateNatsConfigError");async function s8(e){let{port:t,config_file:r}=OT.getServerConfig(e),{username:n,decrypt_hash:s}=await AT.getClusterUser(),i=0,o=2e3;for(;i<KM;){try{let _=await OT.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){bu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=KM)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(t8),u=la.join(Nu.get(ft.ROOTPATH),_a,r);await Bd.writeFile(u,c),await Bd.remove(u),bu.notify(e,"started.")}a(s8,"removeNatsConfig")});var Gd=T((_fe,eU)=>{"use strict";var i8=require("minimist"),{isMainThread:IT,parentPort:JM}=require("worker_threads"),it=M(),{PROCESS_DESCRIPTORS_VALIDATE:yu}=it,Zn=Y(),wT=J(),xd=bT(),fa=Nt(),NT=st(),XM=Lr(),es=DT(),QM=ua(),o8=rh(),{restartWorkers:Fd,onMessageByType:a8}=rt(),{handleHDBError:c8,hdb_errors:u8}=Z(),{HTTP_STATUS_CODES:l8}=u8,qd=j();qd.initSync();var Iu=`Restarting HarperDB. This may take up to ${it.RESTART_TIMEOUT_MS/1e3} seconds.`,_8="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",zM="Clustering is not enabled so cannot be restarted",d8="Invalid service",Ea,un;eU.exports={restart:jM,restartService:CT};IT&&a8(it.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?CT({service:e.workerType}):jM({operation:"restart"})});async function jM(e){un=Object.keys(e).length===0,Ea=await es.isServiceRegistered(it.HDB_PROC_DESCRIPTOR);let t=i8(process.argv);if(t.service){await CT(t);return}if(un&&!Ea){console.error(_8);return}if(un&&console.log(Iu),Ea){es.enterPM2Mode(),Zn.notify(Iu);let r=o8(Object.keys(it.CONFIG_PARAM_MAP),!0);return wT.isEmptyOrZeroLength(Object.keys(r))||XM.updateConfigValue(void 0,void 0,r,!0,!0),E8(),Iu}return IT?(Zn.notify(Iu),setTimeout(()=>{Fd()},50)):JM.postMessage({type:it.ITC_EVENT_TYPES.RESTART}),Iu}a(jM,"restart");async function CT(e){let{service:t}=e;if(it.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw c8(new Error,d8,l8.BAD_REQUEST,void 0,void 0,!0);if(Ea=await es.isServiceRegistered(it.HDB_PROC_DESCRIPTOR),!IT)return JM.postMessage({type:it.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case yu.clustering:if(!qd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=zM;break}un&&console.log("Restarting clustering"),Zn.notify("Restarting clustering"),await ZM();break;case yu.clustering_config:case yu["clustering config"]:if(!qd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=zM;break}un&&console.log("Restarting clustering_config"),Zn.notify("Restarting clustering_config"),await es.reloadClustering();break;case"custom_functions":case"custom functions":case yu.harperdb:case yu.http_workers:if(un&&!Ea){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}un&&console.log("Restarting http_workers"),Zn.notify("Restarting http_workers"),un?await es.restart(it.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Fd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Zn.error(r),un&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(CT,"restartService");async function f8(){await fa.publishToStream(`${NT.SUBJECT_PREFIXES.TXN}.${NT.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,NT.WORK_QUEUE_CONSUMER_NAMES.stream_name,fa.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(f8,"postDummyNatsMsg");async function E8(){await ZM(),await es.restart(it.HDB_PROC_DESCRIPTOR),await wT.async_set_timeout(2e3),qd.get(it.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await yT(),un&&(await fa.closeConnection(),process.exit(0))}a(E8,"restartPM2Mode");async function ZM(){if(!XM.getConfigFromFile(it.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await QM.getHDBProcessInfo()).clustering.length===0)Zn.trace("Clustering not running, restart will start clustering services"),await xd.generateNatsConfig(!0),await es.startClusteringProcesses(),await es.startClusteringThreads(),await yT(),un&&await fa.closeConnection();else{await f8(),await xd.generateNatsConfig(!0),Ea?(Zn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await es.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await es.restart(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await QM.getHDBProcessInfo()).clustering.forEach(s=>{Zn.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await wT.async_set_timeout(3e3),await yT(),await fa.updateLocalStreams(),un&&await fa.closeConnection(),Zn.trace("Restart clustering restarting ingest and reply service threads");let t=Fd(it.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Fd(it.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(ZM,"restartClustering");async function yT(){await xd.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xd.removeNatsConfig(it.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(yT,"removeNatsConfig")});var _U=T((Efe,lU)=>{"use strict";var ffe=require("lodash"),hr=M(),{handleHDBError:tU,hdb_errors:h8}=Z(),{HDB_ERROR_MSGS:m8,HTTP_STATUS_CODES:p8}=h8,LT=Y();lU.exports={getRolePermissions:T8};var co=Object.create(null),S8=a(e=>({key:e,perms:{}}),"perms_template_obj"),iU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),oU=a((e=!1,t=!1,r=!1,n=!1)=>({[hr.PERMS_CRUD_ENUM.READ]:e,[hr.PERMS_CRUD_ENUM.INSERT]:t,[hr.PERMS_CRUD_ENUM.UPDATE]:r,[hr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),MT=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...oU(t,r,n,s)}),"table_perms_template"),rU=a((e,t=oU())=>({attribute_name:e,describe:uU(t),[wu]:t[wu],[UT]:t[UT],[PT]:t[PT]}),"attr_perms_template"),nU=a((e,t=!1)=>({attribute_name:e,describe:t,[wu]:t}),"timestamp_attr_perms_template"),{READ:wu,INSERT:UT,UPDATE:PT}=hr.PERMS_CRUD_ENUM,aU=Object.values(hr.PERMS_CRUD_ENUM),cU=[wu,UT,PT];function T8(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[hr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(co[t]&&co[t].key===n)return co[t].perms;let s=g8(e,r);return co[t]?co[t].key=n:co[t]=S8(n),co[t].perms=s,s}catch(r){if(!e[hr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[hr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<hr.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 LT.error(n),LT.debug(r),tU(new Error,m8.OUTDATED_PERMS_TRANSLATION_ERROR,p8.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
+
${r.stack}`;throw LT.error(n),tU(new Error)}}}a(T8,"getRolePermissions");function g8(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[hr.SYSTEM_SCHEMA_NAME]=n[hr.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]=R8(t[i]);return}r[i]=iU(),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],_=A8(c,u);r[i].describe||aU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=MT()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=MT()})}),r}a(g8,"translateRolePermissions");function R8(e){let t=iU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=MT(!0,!0,!0,!0,!0)}),t}a(R8,"createStructureUserPermissions");function A8(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 hr.TIME_STAMP_NAMES.includes(d)&&(f=nU(d,l[wu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=rU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=uU(l),s.attribute_permissions.push(l),c||O8(l,u)}else if(_!==o){let l;hr.TIME_STAMP_NAMES.includes(_)?l=nU(_):l=rU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=sU(s),s}else return e.describe=sU(e),e}a(A8,"getTableAttrPerms");function sU(e){return aU.filter(t=>e[t]).length>0}a(sU,"getSchemaTableDescribePerm");function uU(e){return cU.filter(t=>e[t]).length>0}a(uU,"getAttributeDescribePerm");function O8(e,t){cU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(O8,"checkForHashPerms")});var dU={};Ke(dU,{Resources:()=>kd,keyArrayToString:()=>ha,resetResources:()=>b8,resources:()=>li});function b8(){return li=new kd}function ha(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var kd,li,Cu=Re(()=>{zi();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 Xe(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(b8,"resetResources");a(ha,"keyArrayToString")});var fU={};Ke(fU,{Headers:()=>_i});var _i,Vd=Re(()=>{_i=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 Du={};Ke(Du,{authentication:()=>RU,bypassAuth:()=>L8,login:()=>U8,logout:()=>P8,start:()=>M8});function L8(){gU=!0}async function RU(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?w8?I8:[]:y8?N8:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new _i([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return $d&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),$d&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if($d){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let S=s.indexOf(";",h),p=s.indexOf("=",h);u=s.slice(p+1,S===-1?s.length:S),_=await hU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,S)=>{let p=new Kd.AuthAuditLog(E,h,kt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=S,u&&(p.session_id=u),r.referer&&(p.referer=r.referer),r.origin&&(p.origin=r.origin),h===kt.AUTH_AUDIT_STATUS.SUCCESS?EU.notify(p):EU.error(p)},"authAuditLog"),d;if(n){if(d=uo.get(n),!d){let[E,h]=n.split(" "),S,p;try{switch(E){case"Basic":[S,p]=atob(h).split(":"),d=S||p?await ut.getUser(S,p,e):null;break;case"Bearer":try{d=await(0,Yd.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,Yd.validateRefreshToken)(h),c({status:-1})}catch{throw g}}break}}catch(g){return D8&&(uo.get(h)||(uo.set(h,h),l(S,kt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:di({error:g.message},e)})}uo.set(n,d),C8&&l(d.username,kt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,e):(gU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,pU.getSuperUser)());$d&&(e.session.update=function(E){if(!u){u=(0,SU.v4)();let S=`${(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",S):f?.headers?.set&&f.headers.set("Set-Cookie",S)}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,hU.put(E)},e.login=async function(E,h){e.user=await ut.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")&&li.loginPath?(f.status=302,f.headers.set("Location",li.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 _i);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(RU,{port:t||"all"}),mU||(mU=!0,setInterval(()=>{uo=new Map},ln.get(kt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),TU.user.addListener(()=>{uo=new Map}))}async function U8(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 P8(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var pU,Yd,SU,ln,kt,Kd,TU,EU,N8,y8,I8,w8,hU,$d,gU,C8,D8,uo,mU,Wd=Re(()=>{pU=B(sn());rr();Cu();Yd=B(fu());Ae();SU=require("uuid"),ln=B(j()),kt=B(M()),Kd=B(Y()),TU=B(Pc());Vd();ma();EU=(0,Kd.loggerWithTag)("auth-event");ln.initSync();N8=ln.get(kt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),y8=ln.get(kt.CONFIG_PARAMS.HTTP_CORS),I8=ln.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),w8=ln.get(kt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),hU=lt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),$d=ln.get(kt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,gU=ln.get(kt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,C8=ln.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,D8=ln.get(kt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,uo=new Map;ut.onInvalidatedUser(()=>{uo=new Map});a(L8,"bypassAuth");a(RU,"authentication");a(M8,"start");a(U8,"login");a(P8,"logout")});var wU=T((Nfe,IU)=>{"use strict";var Ne=require("joi"),AU=require("fs-extra"),OU=require("path"),Is=tt(),bU=j(),NU=M(),yU=Y(),{hdb_errors:v8}=Z(),{HDB_ERROR_MSGS:Xt}=v8,ys=/^[a-zA-Z0-9-_]+$/;IU.exports={getDropCustomFunctionValidator:H8,setCustomFunctionValidator:x8,addComponentValidator:k8,dropCustomFunctionProjectValidator:V8,packageComponentValidator:$8,deployComponentValidator:Y8,setComponentFileValidator:F8,getComponentFileValidator:G8,dropComponentFileValidator:q8};function Qd(e,t,r){try{let n=bU.get(NU.CONFIG_PARAMS.COMPONENTSROOT),s=OU.join(n,t);return AU.existsSync(s)?e?t:r.message(Xt.PROJECT_EXISTS):e?r.message(Xt.NO_PROJECT):t}catch(n){return yU.error(n),r.message(Xt.VALIDATION_ERR)}}a(Qd,"checkProjectExists");function Lu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Lu,"checkFilePath");function B8(e,t,r,n){try{let s=bU.get(NU.CONFIG_PARAMS.COMPONENTSROOT),i=OU.join(s,e,t,r+".js");return AU.existsSync(i)?r:n.message(Xt.NO_FILE)}catch(s){return yU.error(s),n.message(Xt.VALIDATION_ERR)}}a(B8,"checkFileExists");function H8(e){let t=Ne.object({project:Ne.string().pattern(ys).custom(Qd.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().pattern(ys).custom(B8.bind(null,e.project,e.type)).custom(Lu).required().messages({"string.pattern.base":Xt.BAD_FILE_NAME})});return Is.validateBySchema(e,t)}a(H8,"getDropCustomFunctionValidator");function x8(e){let t=Ne.object({project:Ne.string().pattern(ys).custom(Qd.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:Ne.string().valid("helpers","routes").required(),file:Ne.string().custom(Lu).required(),function_content:Ne.string().required()});return Is.validateBySchema(e,t)}a(x8,"setCustomFunctionValidator");function F8(e){let t=Ne.object({project:Ne.string().pattern(ys).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:Ne.string().custom(Lu).required(),payload:Ne.string().allow("").optional(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Is.validateBySchema(e,t)}a(F8,"setComponentFileValidator");function q8(e){let t=Ne.object({project:Ne.string().pattern(ys).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:Ne.string().custom(Lu).optional()});return Is.validateBySchema(e,t)}a(q8,"dropComponentFileValidator");function G8(e){let t=Ne.object({project:Ne.string().required(),file:Ne.string().custom(Lu).required(),encoding:Ne.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Is.validateBySchema(e,t)}a(G8,"getComponentFileValidator");function k8(e){let t=Ne.object({project:Ne.string().pattern(ys).custom(Qd.bind(null,!1)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return Is.validateBySchema(e,t)}a(k8,"addComponentValidator");function V8(e){let t=Ne.object({project:Ne.string().pattern(ys).custom(Qd.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return Is.validateBySchema(e,t)}a(V8,"dropCustomFunctionProjectValidator");function $8(e){let t=Ne.object({project:Ne.string().pattern(ys).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),skip_node_modules:Ne.boolean()});return Is.validateBySchema(e,t)}a($8,"packageComponentValidator");function Y8(e){let t=Ne.object({project:Ne.string().pattern(ys).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),payload:Ne.string().optional().messages({"string.pattern.base":Xt.BAD_PACKAGE}),package:Ne.string().optional()});return Is.validateBySchema(e,t)}a(Y8,"deployComponentValidator")});var jd=T((Ife,vU)=>{"use strict";var zd=require("joi"),Jd=require("path"),CU=require("fs-extra"),{exec:K8}=require("child_process"),W8=require("util"),DU=W8.promisify(K8),Mu=M(),{handleHDBError:pa,hdb_errors:Q8}=Z(),{HTTP_STATUS_CODES:Sa}=Q8,Uu=j(),z8=tt(),Ta=Y();Uu.initSync();var vT=Uu.get(Mu.CONFIG_PARAMS.COMPONENTSROOT),LU="npm install --omit=dev --json",J8=`${LU} --dry-run`;vU.exports={installModules:e6,auditModules:t6,installAllRootModules:X8,uninstallRootModule:j8,linkHarperdb:Z8};async function X8(e=!1){await Xd(),await Pu(e?"npm install --ignore-scripts":"npm install",Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(X8,"installAllRootModules");async function j8(e){await Pu(`npm uninstall ${e}`,Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(j8,"uninstallRootModule");async function Z8(){await Xd(),await Pu(`npm link ${Mu.PACKAGE_ROOT}`,Uu.get(Mu.CONFIG_PARAMS.ROOTPATH))}a(Z8,"linkHarperdb");async function Pu(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await DU(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
12
12
|
`,""))}return n&&!n.includes("Debugger listening")&&Ta.error("Error running NPM command:",e,n),Ta.trace(r,n),r?.replace(`
|
|
13
|
-
`,"")}a(
|
|
13
|
+
`,"")}a(Pu,"runCommand");async function e6(e){Ta.info(`starting installModules for request: ${e}`);let t=PU(e);if(t)throw pa(t,t.message,Sa.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?J8:LU;await Xd(),await UU(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 _=Jd.join(vT,u),l,d=null;try{let{stdout:f,stderr:E}=await DU(s,{cwd:_});l=f?f.replace(`
|
|
14
14
|
`,""):null,d=E?E.replace(`
|
|
15
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=
|
|
16
|
-
`);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(bU,"parseNPMStdErr");async function H8(e){Ta.info(`starting auditModules for request: ${e}`);let t=yU(e);if(t)throw pa(t,t.message,Sa.BAD_REQUEST);let{projects:r}=e;await Jd(),await NU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=zd.join(LT,o);n[o]={npm_output:null,npm_error:null};try{let u=await vu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=bU(u.stderr)}}return Ta.info(`finished auditModules with response ${n}`),n}a(H8,"auditModules");async function Jd(){try{return await vu("npm -v"),!0}catch{throw pa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Sa.BAD_REQUEST,void 0,void 0,!0)}}a(Jd,"checkNPMInstalled");async function NU(e){if(!Array.isArray(e)||e.length===0)throw pa(new Error,"projects argument must be an array with at least 1 element",Sa.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=zd.join(LT,i.toString());if(!await RU.pathExists(o)){t.push(i);continue}let u=zd.join(o,"package.json");await RU.pathExists(u)||r.push(i)}if(t.length>0)throw pa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Sa.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw pa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Sa.BAD_REQUEST,void 0,void 0,!0)}a(NU,"checkProjectPaths");function yU(e){let t=Qd.object({projects:Qd.array().min(1).items(Qd.string()).required(),dry_run:Qd.boolean().default(!1)});return D8.validateBySchema(e,t)}a(yU,"modulesValidator")});var MT=T((ife,MU)=>{"use strict";var ga=require("fs-extra"),DT=require("path"),jd=V(),wU=J(),Zd=M(),DU=j(),x8=Lr();MU.exports=F8;async function F8(){let e=q8(),t=DU.get(Zd.CONFIG_PARAMS.ROOTPATH),r=DT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Zd.PACKAGE_ROOT}},s=DT.join(t,"node_modules");await ga.ensureDir(s);let i,o=!0,c=!1;try{i=await ga.readJson(r)}catch(u){if(wU.isEmptyOrZeroLength(e))return;if(u.code!==Zd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!wU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await CU(_);n.dependencies[u]=l+_}if(!o){jd.notify("Installing components"),await LU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await CU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(jd.notify("Removing component",u),c=!0);c&&(jd.notify("Updating components."),await LU(r,n,i))}a(F8,"installComponents");function q8(){let e=x8.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(q8,"getComponentsConfig");async function CU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":DT.extname(e)||await ga.pathExists(e)?"file:":"github:"}a(CU,"getPkgPrefix");async function LU(e,t,r){jd.trace("npm installing components package.json",t),await ga.writeFile(e,JSON.stringify(t,null," "));try{await Xd().installAllRootModules(DU.get(Zd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await ga.writeFile(e,JSON.stringify(r,null," ")):await ga.unlink(e),n}}a(LU,"installPackages")});var vT=T((cfe,BU)=>{"use strict";var Fe=require("fs-extra"),UT=require("fast-glob"),pe=require("path"),PU=require("tar-fs"),afe=require("uuid").v4,PT=require("normalize-path"),rs=gU(),wt=V(),Ye=M(),Tt=j(),Bu=Lr(),G8=J(),{PACKAGE_ROOT:k8}=M(),{handleHDBError:Ht,hdb_errors:V8}=Z(),{basename:$8}=require("path"),Y8=MT(),vU=j(),K8=M(),{Readable:W8}=require("stream"),{isMainThread:Q8}=require("worker_threads"),{HDB_ERROR_MSGS:_o,HTTP_STATUS_CODES:xt}=V8,z8=pe.join(k8,"application-template"),UU=pe.join(Tt.get(Ye.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function J8(){wt.trace("getting custom api status");let e={};try{e={port:Tt.get(Ye.CONFIG_PARAMS.HTTP_PORT),directory:Tt.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(J8,"customFunctionsStatus");function X8(){wt.trace("getting custom api endpoints");let e={},t=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT);try{UT.sync(PT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:UT.sync(PT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:UT.sync(PT(`${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(X8,"getCustomFunctions");function j8(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=rs.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=pe.join(r,n,s,i+".js");try{return Fe.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ht(new Error,_o.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(j8,"getCustomFunction");function Z8(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=rs.setCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("setting custom function file content");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Fe.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(Z8,"setCustomFunction");function e6(e){e.project&&(e.project=pe.parse(e.project).name),e.file&&(e.file=pe.parse(e.file).name);let t=rs.getDropCustomFunctionValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function file");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Fe.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(e6,"dropCustomFunction");function t6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.addComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("adding component");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=pe.join(r,n);return Fe.mkdirSync(s,{recursive:!0}),Fe.copySync(z8,s),`Successfully added project: ${n}`}catch(s){throw Ht(new Error,_o.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,wt.ERR,s)}}a(t6,"addComponent");function r6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.dropCustomFunctionProjectValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);wt.trace("dropping custom function project");let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Tt.get(Ye.CONFIG_PARAMS.APPS);if(!G8.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 Bu.updateConfigValue(Ye.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=pe.join(r,n);return Fe.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(r6,"dropCustomFunctionProject");async function n6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.packageComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;wt.trace("packaging component",n);let s;try{s=await Fe.realpath(pe.join(r,n))}catch(u){if(u.code!==Ye.NODE_ERROR_CODES.ENOENT)throw u;try{s=await Fe.realpath(pe.join(Tt.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 Fe.ensureDir(UU);let i=pe.join(UU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(pe.join(s,"node_modules"))}),PU.pack(s,o).pipe(Fe.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Fe.readFileSync(i,{encoding:"base64"});return await Fe.remove(i),{project:n,payload:c}}a(n6,"packageComponent");async function s6(e){e.project&&(e.project=pe.parse(e.project).name);let t=rs.deployComponentValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=Tt.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 Fe.ensureDir(o);let f=W8.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(PU.extract(o,{finish:h})).on("error",p)});let E=await Fe.readdir(o);E.length===1&&E[0]==="package"&&(await Fe.copy(pe.join(o,"package"),o),await Fe.remove(pe.join(o,"package")))}if(await Bu.addConfig(n,{package:i}),!s){await Y8();let f=vU.get(K8.CONFIG_PARAMS.ROOTPATH);o=pe.join(f,"node_modules",n)}if(Q8)return;let c=new Map;c.isWorker=!0;let u=(tf(),ee(ef)),_;u.setErrorReporter(f=>_=f);let l=$8(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(s6,"deployComponent");async function i6(){let e=Bu.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 Fe.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 Fe.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(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),{name:Tt.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(Tt.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(tf(),ee(ef)).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(i6,"getComponents");async function o6(e){let t=rs.getComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let n=Bu.getConfigObj()[e.project]||e.project==="harperdb"?pe.join(vU.get(Ye.CONFIG_PARAMS.ROOTPATH),"node_modules"):Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Fe.stat(pe.join(n,e.project,e.file));return{message:await Fe.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(o6,"getComponentFile");async function a6(e){let t=rs.setComponentFileValidator(e);if(t)throw Ht(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=pe.join(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Fe.ensureFile(n),await Fe.outputFile(n,e.payload,r)):await Fe.ensureDir(n),"Successfully set component: "+e.file}a(a6,"setComponentFile");async function c6(e){let t=rs.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(Tt.get(Ye.CONFIG_PARAMS.COMPONENTSROOT),r);return await Fe.pathExists(n)&&await Fe.remove(n),Bu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(c6,"dropComponent");BU.exports={customFunctionsStatus:J8,getCustomFunctions:X8,getCustomFunction:j8,setCustomFunction:Z8,dropCustomFunction:e6,addComponent:t6,dropCustomFunctionProject:r6,packageComponent:n6,deployComponent:s6,getComponents:i6,getComponentFile:o6,setComponentFile:a6,dropComponent:c6}});var BT=T((lfe,xU)=>{"use strict";var ns=require("joi"),HU=et();xU.exports={readTransactionLogValidator:u6,deleteTransactionLogsBeforeValidator:l6};function u6(e){let t=ns.object({schema:ns.string().required(),table:ns.string().required(),from:ns.date().timestamp(),to:ns.date().timestamp(),limit:ns.number().min(1)});return HU.validateBySchema(e,t)}a(u6,"readTransactionLogValidator");function l6(e){let t=ns.object({schema:ns.string().required(),table:ns.string().required(),timestamp:ns.date().timestamp().required()});return HU.validateBySchema(e,t)}a(l6,"deleteTransactionLogsBeforeValidator")});var nf=T((dfe,VU)=>{"use strict";var HT=M(),rf=It(),FU=J(),qU=j(),GU=gs(),{handleHDBError:Ra,hdb_errors:_6}=Z(),{HTTP_STATUS_CODES:Aa}=_6,{readTransactionLogValidator:d6,deleteTransactionLogsBeforeValidator:f6}=BT(),kU="This operation relies on clustering and cannot run with it disable.",E6="Logs successfully deleted from transaction log.",h6="All logs successfully deleted from transaction log.";VU.exports={readTransactionLog:m6,deleteTransactionLogsBefore:p6};async function*m6(e){let t=d6(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST,void 0,void 0,!0);if(!qU.get(HT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ra(new Error,kU,Aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=FU.checkSchemaTableExist(r,n);if(s)throw Ra(new Error,s,Aa.NOT_FOUND,void 0,void 0,!0);let i=GU.createNatsTableStreamName(r,n),o=await rf.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===HT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(m6,"readTransactionLog");async function p6(e){let t=f6(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST,void 0,void 0,!0);if(!qU.get(HT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ra(new Error,kU,Aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=FU.checkSchemaTableExist(r,n);if(i)throw Ra(new Error,i,Aa.NOT_FOUND,void 0,void 0,!0);let o=GU.createNatsTableStreamName(r,n),{jsm:c}=await rf.getNATSReferences(),u=await rf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=E6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=h6):d=(await rf.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(p6,"deleteTransactionLogsBefore")});var YU=T((Efe,$U)=>{"use strict";var xT=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}};$U.exports=xT});var WU=T((mfe,KU)=>{"use strict";var FT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};KU.exports=FT});var GT=T((Sfe,zU)=>{"use strict";var QU=YU(),S6=WU(),{HDB_ERROR_MSGS:T6}=Ir(),qT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=T6.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 QU(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new S6(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 QU(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}};zU.exports=qT});var cf=T((gfe,_P)=>{"use strict";var kT=tn(),sf=en(),ln=cd(),Fu=xi(),VT=Vi(),g6=rS(),R6=yL(),qu=rn(),of=_S(),Ct=V(),A6=ES(),O6=bd(),b6=XS(),N6=yd(),y6=jS(),I6=ZS(),w6=rT(),C6=sT(),$T=aT(),Cs=J(),L6=OM(),YT=dT(),jU=qd(),un=M(),ZU=nU(),D6=ua(),eP=Eu(),tP=(Kd(),ee(Du)),rP=Lr(),Gr=vT(),M6=require("alasql"),nP=nf(),sP=Xd(),iP=GT(),{handleHDBError:pr,hdb_errors:oP}=Z(),{HDB_ERROR_MSGS:Vt,HTTP_STATUS_CODES:Hu}=oP,q=new Map,aP="delete",fi="insert",Ls="read",fo="update",xu="describe",JU=Fu.describeSchema.name,XU=Fu.describeTable.name,cP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},U6="catchup",P6="handleGetJob",v6="handleGetJobsByStartDate",af={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},B6=[ln.createTable.name,ln.createAttribute.name,ln.dropTable.name,ln.dropAttribute.name],uP={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}};q.set(kT.insert.name,new $(!1,[fi]));q.set(kT.update.name,new $(!1,[fo]));q.set(kT.upsert.name,new $(!1,[fi,fo]));q.set(sf.searchByConditions.name,new $(!1,[Ls]));q.set(sf.searchByHash.name,new $(!1,[Ls]));q.set(sf.searchByValue.name,new $(!1,[Ls]));q.set(sf.search.name,new $(!1,[Ls]));q.set(ln.createSchema.name,new $(!0,[]));q.set(ln.createTable.name,new $(!0,[]));q.set(ln.createAttribute.name,new $(!1,[fi]));q.set(ln.dropSchema.name,new $(!0,[]));q.set(ln.dropTable.name,new $(!0,[]));q.set(ln.dropAttribute.name,new $(!0,[]));q.set(Fu.describeSchema.name,new $(!1,[Ls]));q.set(Fu.describeTable.name,new $(!1,[Ls]));q.set(VT.deleteRecord.name,new $(!1,[aP]));q.set(qu.addUser.name,new $(!0,[]));q.set(qu.alterUser.name,new $(!0,[]));q.set(qu.dropUser.name,new $(!0,[]));q.set(qu.listUsersExternal.name,new $(!0,[]));q.set(of.listRoles.name,new $(!0,[]));q.set(of.addRole.name,new $(!0,[]));q.set(of.alterRole.name,new $(!0,[]));q.set(of.dropRole.name,new $(!0,[]));q.set(A6.name,new $(!0,[]));q.set(O6.name,new $(!0,[]));q.set(b6.name,new $(!0,[]));q.set(N6.name,new $(!0,[]));q.set(y6.name,new $(!0,[]));q.set(I6.name,new $(!0,[]));q.set($T.setRoutes.name,new $(!0,[]));q.set($T.getRoutes.name,new $(!0,[]));q.set($T.deleteRoutes.name,new $(!0,[]));q.set(rP.setConfiguration.name,new $(!0,[]));q.set(w6.clusterStatus.name,new $(!0,[]));q.set(C6.name,new $(!0,[]));q.set(YT.getFingerprint.name,new $(!0,[]));q.set(YT.setLicense.name,new $(!0,[]));q.set(VT.deleteFilesBefore.name,new $(!0,[]));q.set(VT.deleteAuditLogsBefore.name,new $(!0,[]));q.set(jU.restart.name,new $(!0,[]));q.set(jU.restartService.name,new $(!0,[]));q.set(g6.name,new $(!0,[]));q.set(R6.name,new $(!0,[Ls]));q.set(D6.systemInformation.name,new $(!0,[]));q.set(rP.getConfiguration.name,new $(!0,[]));q.set(nP.readTransactionLog.name,new $(!0,[]));q.set(nP.deleteTransactionLogsBefore.name,new $(!0,[]));q.set(sP.installModules.name,new $(!0,[]));q.set(sP.auditModules.name,new $(!0,[]));q.set(eP.createTokens.name,new $(!1,[]));q.set(eP.refreshOperationToken.name,new $(!1,[]));q.set(tP.login.name,new $(!1,[]));q.set(tP.logout.name,new $(!1,[]));q.set(Gr.customFunctionsStatus.name,new $(!0,[]));q.set(Gr.getCustomFunctions.name,new $(!0,[]));q.set(Gr.getComponents.name,new $(!0,[]));q.set(Gr.getComponentFile.name,new $(!0,[]));q.set(Gr.setComponentFile.name,new $(!0,[]));q.set(Gr.dropComponent.name,new $(!0,[]));q.set(Gr.getCustomFunction.name,new $(!0,[]));q.set(Gr.setCustomFunction.name,new $(!0,[]));q.set(Gr.dropCustomFunction.name,new $(!0,[]));q.set(Gr.addComponent.name,new $(!0,[]));q.set(Gr.dropCustomFunctionProject.name,new $(!0,[]));q.set(Gr.packageComponent.name,new $(!0,[]));q.set(Gr.deployComponent.name,new $(!0,[]));q.set(YT.getRegistrationInfo.name,new $(!1,[]));q.set(qu.userInfo.name,new $(!1,[]));q.set(Fu.describeAll.name,new $(!1,[]));q.set(P6,new $(!1,[]));q.set(v6,new $(!0,[]));q.set(U6,new $(!0,[]));q.set(af.CSV_DATA_LOAD,new $(!1,[fi,fo]));q.set(af.CSV_URL_LOAD,new $(!1,[fi,fo]));q.set(af.CSV_FILE_LOAD,new $(!1,[fi,fo]));q.set(af.IMPORT_FROM_S3,new $(!1,[fi,fo]));q.set(uP.EXPORT_TO_S3,new $(!0,[]));q.set(uP.EXPORT_LOCAL,new $(!0,[]));q.set(un.VALID_SQL_OPS_ENUM.DELETE,new $(!1,[aP]));q.set(un.VALID_SQL_OPS_ENUM.SELECT,new $(!1,[Ls]));q.set(un.VALID_SQL_OPS_ENUM.INSERT,new $(!1,[fi]));q.set(un.VALID_SQL_OPS_ENUM.UPDATE,new $(!1,[fo]));_P.exports={verifyPerms:x6,verifyPermsAst:H6,verifyBulkLoadAttributePerms:q6};function H6(e,t,r){if(Cs.isEmptyOrZeroLength(e))throw Ct.info("verify_perms_ast has an empty user parameter"),pr(new Error);if(Cs.isEmptyOrZeroLength(t))throw Ct.info("verify_perms_ast has an empty user parameter"),pr(new Error);if(Cs.isEmptyOrZeroLength(r))throw Ct.info("verify_perms_ast has a null operation parameter"),pr(new Error);try{let n=new iP,s=new L6(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."),pr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&cP[r])throw pr(new Error,Vt.DROP_SYSTEM,Hu.FORBIDDEN);if(c&&!u)return null;let _=ZU.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof M6.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=lP(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=WT(t.role.permission,f,d[E]);KT(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw pr(n)}}a(H6,"verifyPermsAst");function x6(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ct.info("null required parameter in verifyPerms"),pr(new Error,Vt.DEFAULT_INVALID_REQUEST,Hu.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 iP;if(Cs.isEmptyOrZeroLength(e.hdb_user.role)||Cs.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&&cP[r])throw pr(new Error,Vt.DROP_SYSTEM,Hu.FORBIDDEN);if(u&&!l||_===!0&&(r===ln.createSchema.name||r===ln.dropSchema.name))return null;if(B6.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=ZU.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===JU||r===XU){if(s===un.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Vt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===JU&&(!d[s]||!d[s][xu]))return c.handleInvalidItem(Vt.SCHEMA_NOT_FOUND(s));if(r===XU&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][xu]))return c.handleInvalidItem(Vt.TABLE_NOT_FOUND(s,i))}}let f=lP(e.hdb_user,r,o,c,n);if(f)return f;if(q.get(r)&&q.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=F6(e),h=WT(e.hdb_user.role.permission,s,i);return KT(E,h,r,i,s,c,n),c.getPermsResponse()}a(x6,"verifyPerms");function lP(e,t,r,n,s){if(Cs.arrayHasEmptyValues([e,t,r]))throw Ct.info("hasPermissions has an invalid parameter"),pr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||q.get(t).requires_su))return null;if(!q.get(t))throw Ct.info(`operation ${t} not found.`),pr(new Error,Vt.OP_NOT_FOUND(t),Hu.BAD_REQUEST);if(q.get(t)&&q.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][xu]===!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[xu]===!1)n.addInvalidItem(Vt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=q.get(t).perms;!Cs.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),pr(oP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(lP,"hasPermissions");function KT(e,t,r,n,s,i,o){if(!e||!t)throw Ct.info("no attributes specified in checkAttributePerms."),pr(new Error);let c=q.get(r).perms;if(!c||c==="")throw Ct.info(`no permissions found for ${r} in checkAttributePerms().`),pr(new Error);if(Cs.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[xu]===!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!==Ls)throw pr(new Error,Vt.SYSTEM_TIMESTAMP_PERMS_ERR,Hu.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(KT,"checkAttributePerms");function F6(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(F6,"getRecordAttributes");function WT(e,t,r){let n=new Map;if(Cs.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(WT,"getAttributePermissions");function q6(e,t,r,n,s,i,o){let c=new Set(i),u=WT(e,n,s);KT(c,u,t,s,n,o,r)}a(q6,"verifyBulkLoadAttributePerms")});var lf=T((Afe,mP)=>{"use strict";mP.exports={evaluateSQL:Z6,processAST:hP,convertSQLToAST:EP,checkASTPermissions:fP};var G6=tn(),dP=require("util"),k6=dP.callbackify(G6.insert),V6=en().search,$6=SC().update,Y6=dP.callbackify($6),K6=gC().convertDelete,Ei=require("alasql"),W6=cf(),uf=V(),Q6=z_(),z6=J(),Gu=M(),{hdb_errors:J6,handleHDBError:QT}=Z(),{HTTP_STATUS_CODES:zT}=J6;Q6(Ei);var X6=403,j6="There was a problem performing this insert. Please check the logs and try again.",JT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Z6(e,t){let r=e.parsed_sql_object;if(!r){r=EP(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ei.yy.Insert?n=s.into.databaseid:s instanceof Ei.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ei.yy.Update||s instanceof Ei.yy.Delete?n=s.table.databaseid:uf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ei.yy.Select)&&z6.isEmptyOrZeroLength(n))return t("No schema specified",null)}hP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Z6,"evaluateSQL");function fP(e,t){let r;try{r=W6.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(fP,"checkASTPermissions");function EP(e){let t=new JT;if(!e)throw QT(new Error,"The 'sql' parameter is missing from the request body",zT.BAD_REQUEST);try{let r=e.trim(),n=Ei.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
17
|
-
`);throw n[1]?QT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,zT.BAD_REQUEST):QT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",zT.BAD_REQUEST)}return t}a(EP,"convertSQLToAST");function hP(e,t,r){try{let n=e9;if(!e.bypass_auth&&!t.permissions_checked){let i=fP(e,t);if(i&&i.length>0)return r(X6,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Gu.VALID_SQL_OPS_ENUM.SELECT:n=V6,s=t.ast.statements[0];break;case Gu.VALID_SQL_OPS_ENUM.INSERT:n=t9;break;case Gu.VALID_SQL_OPS_ENUM.UPDATE:n=Y6;break;case Gu.VALID_SQL_OPS_ENUM.DELETE:n=K6;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(hP,"processAST");function e9(e,t){uf.info(e),t("unknown sql statement")}a(e9,"nullFunction");function t9({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=r9(i,e.values)}catch(o){return r(o)}k6(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){uf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(t9,"convertInsert");function r9(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]]=Ei.compile(`SELECT ${s.toString()} AS [${Gu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw uf.error(r),new Error(j6)}}a(r9,"createDataObjects")});var XT=T((bfe,SP)=>{"use strict";var{S3:n9,GetObjectCommand:s9}=require("@aws-sdk/client-s3");SP.exports={getFileStreamFromS3:i9,getS3AuthObj:pP};async function i9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await pP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new s9(r))).Body}a(i9,"getFileStreamFromS3");function pP(e,t,r){return new n9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(pP,"getS3AuthObj")});var _f=T((yfe,IP)=>{"use strict";var ZT=en(),o9=lf(),a9=XT(),{AsyncParser:c9,Transform:u9}=require("json2csv"),Vu=require("stream"),kr=J(),jT=require("fs-extra"),l9=require("path"),_n=V(),{promisify:RP}=require("util"),ku=J(),{handleHDBError:gt,hdb_errors:_9}=Z(),{HDB_ERROR_MSGS:Sr,HTTP_STATUS_CODES:Rt}=_9,{streamAsJSON:d9}=(Nh(),ee(ZO)),{Upload:f9}=require("@aws-sdk/lib-storage"),TP=["search_by_value","search_by_hash","sql","search_by_conditions"],gP=["json","csv"],AP="json",OP="csv",E9="Successfully exported JSON locally.",h9="Successfully exported CSV locally.",m9=1e3,p9=ZT.searchByHash,S9=ZT.searchByValue,T9=RP(o9.evaluateSQL),g9=RP(Vu.finished);IP.exports={export_to_s3:b9,export_local:R9,toCsvStream:bP};async function R9(e){_n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=NP(e);if(!kr.isEmpty(t))throw _n.error(t),gt(new Error,t,Rt.BAD_REQUEST,void 0,void 0,!0);if(kr.isEmpty(e.path))throw _n.error(Sr.MISSING_VALUE("path")),gt(new Error,Sr.MISSING_VALUE("path"),Rt.BAD_REQUEST,void 0,void 0,!0);let r=(kr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(l9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=kr.buildFolderPath(e.path,r);await A9(e.path);let s=await yP(e);return await O9(n,e.format,s)}a(R9,"export_local");async function A9(e){if(_n.trace("in confirmPath"),kr.isEmptyOrZeroLength(e))throw gt(new Error,`Invalid path: ${e}`,Rt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await jT.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),gt(new Error,n,Rt.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),gt(new Error,r,Rt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(A9,"confirmPath");async function O9(e,t,r){if(_n.trace("in saveToLocal"),ku.isEmptyOrZeroLength(e))throw gt(new Error,Sr.INVALID_VALUE("file_path"),Rt.BAD_REQUEST,void 0,void 0,!0);if(ku.isEmptyOrZeroLength(t))throw gt(new Error,Sr.INVALID_VALUE("Source format"),Rt.BAD_REQUEST,void 0,void 0,!0);if(ku.isEmpty(r))throw gt(new Error,Sr.NOT_FOUND("Data"),Rt.BAD_REQUEST,void 0,void 0,!0);if(t===AP){let n=jT.createWriteStream(e);return d9(r).pipe(n),await g9(n),{message:E9,path:e}}else if(t===OP){let n=jT.createWriteStream(e),s=Vu.Readable.from(r),i={},o={objectMode:!0};return await new c9(i,o).fromInput(s).toOutput(n).promise(!1),{message:h9,path:e}}throw gt(new Error,Sr.INVALID_VALUE("format"),Rt.BAD_REQUEST)}a(O9,"saveToLocal");async function b9(e){if(!e.s3||Object.keys(e.s3).length===0)throw gt(new Error,Sr.MISSING_VALUE("S3 object"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw gt(new Error,Sr.MISSING_VALUE("aws_access_key_id"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw gt(new Error,Sr.MISSING_VALUE("aws_secret_access_key"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.bucket))throw gt(new Error,Sr.MISSING_VALUE("bucket"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.key))throw gt(new Error,Sr.MISSING_VALUE("key"),Rt.BAD_REQUEST);if(kr.isEmptyOrZeroLength(e.s3.region))throw gt(new Error,Sr.MISSING_VALUE("region"),Rt.BAD_REQUEST);let t=NP(e);if(!kr.isEmpty(t))throw gt(new Error,t,Rt.BAD_REQUEST);_n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await yP(e)}catch(u){throw _n.error(u),u}let n,s=await a9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Vu.PassThrough;if(e.format===OP){i=e.s3.key+".csv";let u=bP(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===AP){i=e.s3.key+".json";let u=new Vu.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%m9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw gt(new Error,Sr.INVALID_VALUE("format"),Rt.BAD_REQUEST);return new f9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(b9,"export_to_s3");function bP(e){let t=Vu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},n={objectMode:!0},s=new u9(r,n);return t.pipe(s)}a(bP,"toCsvStream");function NP(e){if(_n.trace("in exportCoreValidation"),kr.isEmpty(e.format))return"format missing";if(gP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gP.join(", ")}`;let t=e.search_operation.operation;if(kr.isEmpty(t))return"search_operation.operation missing";if(TP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${TP.join(", ")}`}a(NP,"exportCoreValidation");async function yP(e){_n.trace("in getRecords");let t,r;if(ku.isEmpty(e.search_operation)||ku.isEmptyOrZeroLength(e.search_operation.operation))throw gt(new Error,Sr.INVALID_VALUE("Search operation"),Rt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=S9;break;case"search_by_hash":t=p9;break;case"search_by_conditions":t=ZT.searchByConditions;break;case"sql":t=T9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,_n.error(r),gt(new Error,r,Rt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(yP,"getRecords")});var PP={};Ve(PP,{contentTypes:()=>sg,findBestSerializer:()=>ff,getDeserializer:()=>ho,registerContentHandlers:()=>ig,serialize:()=>Ef,serializeMessage:()=>di});function N9(e){try{return e?.[0]===123?ng(e):e}catch{return e}}function ig(e){e.register(I9,{serializers:[{regex:/^application\/json$/,serializer:hc},{regex:/^application\/cbor$/,serializer:function(t){return new Eo.EncoderStream(Yu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?df.Readable.from((0,ss.encodeIter)(t,Yu)):(0,ss.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,eg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ss.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 ff(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 Ef(e,t,r){let n=CP&&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=ff(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,Ds.createBrotliCompress)({params:{[Ds.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ds.constants.BROTLI_MODE_TEXT:Ds.constants.BROTLI_MODE_GENERIC,[Ds.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e)}return n&&s?.length>CP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ds.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function di(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return $u(e);let r=t.serialize;if(r)return r(e);let n=ff(t);return r=t.serialize=n.serializer.serialize,r(e)}function w9(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||LP(e,n);return o=>w9(o).then(i)}return e&&$t.get(e)?.deserialize||LP(e,n)}function LP(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 ng(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function C9(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 eg,ss,Eo,Ds,df,DP,tg,rg,MP,$u,ng,Yu,$t,sg,wP,UP,y9,I9,CP,ma=Ae(()=>{Nh();eg=v(_f()),ss=require("msgpackr"),Eo=require("cbor-x"),Ds=require("zlib"),df=require("stream");nr();DP=require("../../index"),tg=v(j()),rg=v(M()),MP=tg.default.get(rg.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,$u=MP?Mi:JSON.stringify,ng=MP?bh:JSON.parse,Yu={useRecords:!1,useToJSON:!0},$t=new Map,sg=$t;lt.contentTypes=sg;(0,DP._assignPackageExport)("contentTypes",sg);$t.set("application/json",{serializeStream:hc,serialize:$u,deserialize:ng,q:.8});wP=new Eo.Encoder(Yu);$t.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Eo.EncoderStream(Yu).end(e)},serialize:wP.encode,deserialize:wP.decode,q:1});$t.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?df.Readable.from((0,ss.encodeIter)(e,Yu)):(0,ss.pack)(e)},serialize:ss.pack,deserialize:ss.unpack,q:.9});$t.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,eg.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 df.Readable.from(C9(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
|
|
15
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=MU(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 Ta.info(`finished installModules with response ${i}`),i}a(e6,"installModules");function MU(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(MU,"parseNPMStdErr");async function t6(e){Ta.info(`starting auditModules for request: ${e}`);let t=PU(e);if(t)throw pa(t,t.message,Sa.BAD_REQUEST);let{projects:r}=e;await Xd(),await UU(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Jd.join(vT,o);n[o]={npm_output:null,npm_error:null};try{let u=await Pu("npm audit --json",c);n[o].npm_output=JSON.parse(u)}catch(u){n[o].npm_error=MU(u.stderr)}}return Ta.info(`finished auditModules with response ${n}`),n}a(t6,"auditModules");async function Xd(){try{return await Pu("npm -v"),!0}catch{throw pa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Sa.BAD_REQUEST,void 0,void 0,!0)}}a(Xd,"checkNPMInstalled");async function UU(e){if(!Array.isArray(e)||e.length===0)throw pa(new Error,"projects argument must be an array with at least 1 element",Sa.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=Jd.join(vT,i.toString());if(!await CU.pathExists(o)){t.push(i);continue}let u=Jd.join(o,"package.json");await CU.pathExists(u)||r.push(i)}if(t.length>0)throw pa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Sa.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw pa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Sa.BAD_REQUEST,void 0,void 0,!0)}a(UU,"checkProjectPaths");function PU(e){let t=zd.object({projects:zd.array().min(1).items(zd.string()).required(),dry_run:zd.boolean().default(!1)});return z8.validateBySchema(e,t)}a(PU,"modulesValidator")});var HT=T((Cfe,qU)=>{"use strict";var ga=require("fs-extra"),BT=require("path"),Zd=Y(),BU=J(),ef=M(),FU=j(),r6=Lr();qU.exports=n6;async function n6(){let e=s6(),t=FU.get(ef.CONFIG_PARAMS.ROOTPATH),r=BT.join(t,"package.json"),n={dependencies:{harperdb:"file:"+ef.PACKAGE_ROOT}},s=BT.join(t,"node_modules");await ga.ensureDir(s);let i,o=!0,c=!1;try{i=await ga.readJson(r)}catch(u){if(BU.isEmptyOrZeroLength(e))return;if(u.code!==ef.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!BU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await HU(_);n.dependencies[u]=l+_}if(!o){Zd.notify("Installing components"),await xU(r,n,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await HU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)n.dependencies[u]===void 0&&(Zd.notify("Removing component",u),c=!0);c&&(Zd.notify("Updating components."),await xU(r,n,i))}a(n6,"installComponents");function s6(){let e=r6.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 HU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":BT.extname(e)||await ga.pathExists(e)?"file:":"github:"}a(HU,"getPkgPrefix");async function xU(e,t,r){Zd.trace("npm installing components package.json",t),await ga.writeFile(e,JSON.stringify(t,null," "));try{await jd().installAllRootModules(FU.get(ef.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await ga.writeFile(e,JSON.stringify(r,null," ")):await ga.unlink(e),n}}a(xU,"installPackages")});var qT=T((Mfe,$U)=>{"use strict";var Ge=require("fs-extra"),xT=require("fast-glob"),Te=require("path"),kU=require("tar-fs"),Lfe=require("uuid").v4,FT=require("normalize-path"),ts=wU(),yt=Y(),Qe=M(),St=j(),vu=Lr(),i6=J(),{PACKAGE_ROOT:o6}=M(),{handleHDBError:Bt,hdb_errors:a6}=Z(),{basename:c6}=require("path"),u6=HT(),VU=j(),l6=M(),{Readable:_6}=require("stream"),{isMainThread:d6}=require("worker_threads"),{HDB_ERROR_MSGS:lo,HTTP_STATUS_CODES:Ht}=a6,f6=Te.join(o6,"application-template"),GU=Te.join(St.get(Qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function E6(){yt.trace("getting custom api status");let e={};try{e={port:St.get(Qe.CONFIG_PARAMS.HTTP_PORT),directory:St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Bt(new Error,lo.FUNCTION_STATUS,Ht.INTERNAL_SERVER_ERROR,yt.ERR,t)}return e}a(E6,"customFunctionsStatus");function h6(){yt.trace("getting custom api endpoints");let e={},t=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT);try{xT.sync(FT(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:xT.sync(FT(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:xT.sync(FT(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Bt(new Error,lo.GET_FUNCTIONS,Ht.INTERNAL_SERVER_ERROR,yt.ERR,r)}return e}a(h6,"getCustomFunctions");function m6(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=ts.getDropCustomFunctionValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);yt.trace("getting custom api endpoint file content");let r=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Te.join(r,n,s,i+".js");try{return Ge.readFileSync(o,{encoding:"utf8"})}catch(c){throw Bt(new Error,lo.GET_FUNCTION,Ht.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(m6,"getCustomFunction");function p6(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=ts.setCustomFunctionValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);yt.trace("setting custom function file content");let r=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ge.outputFileSync(Te.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Bt(new Error,lo.SET_FUNCTION,Ht.INTERNAL_SERVER_ERROR,yt.ERR,c)}}a(p6,"setCustomFunction");function S6(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=ts.getDropCustomFunctionValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);yt.trace("dropping custom function file");let r=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ge.unlinkSync(Te.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Bt(new Error,lo.DROP_FUNCTION,Ht.INTERNAL_SERVER_ERROR,yt.ERR,o)}}a(S6,"dropCustomFunction");function T6(e){e.project&&(e.project=Te.parse(e.project).name);let t=ts.addComponentValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);yt.trace("adding component");let r=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Te.join(r,n);return Ge.mkdirSync(s,{recursive:!0}),Ge.copySync(f6,s),`Successfully added project: ${n}`}catch(s){throw Bt(new Error,lo.ADD_FUNCTION,Ht.INTERNAL_SERVER_ERROR,yt.ERR,s)}}a(T6,"addComponent");function g6(e){e.project&&(e.project=Te.parse(e.project).name);let t=ts.dropCustomFunctionProjectValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);yt.trace("dropping custom function project");let r=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=St.get(Qe.CONFIG_PARAMS.APPS);if(!i6.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 vu.updateConfigValue(Qe.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Te.join(r,n);return Ge.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Bt(new Error,lo.DROP_FUNCTION_PROJECT,Ht.INTERNAL_SERVER_ERROR,yt.ERR,i)}}a(g6,"dropCustomFunctionProject");async function R6(e){e.project&&(e.project=Te.parse(e.project).name);let t=ts.packageComponentValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let r=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;yt.trace("packaging component",n);let s;try{s=await Ge.realpath(Te.join(r,n))}catch(u){if(u.code!==Qe.NODE_ERROR_CODES.ENOENT)throw u;try{s=await Ge.realpath(Te.join(St.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ge.ensureDir(GU);let i=Te.join(GU,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Te.join(s,"node_modules"))}),kU.pack(s,o).pipe(Ge.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ge.readFileSync(i,{encoding:"base64"});return await Ge.remove(i),{project:n,payload:c}}a(R6,"packageComponent");async function A6(e){e.project&&(e.project=Te.parse(e.project).name);let t=ts.deployComponentValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let r=St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(yt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Te.join(r,n),i="file:"+o,await Ge.ensureDir(o);let f=_6.from(Buffer.from(s,"base64"));await new Promise((h,S)=>{f.pipe(kU.extract(o,{finish:h})).on("error",S)});let E=await Ge.readdir(o);E.length===1&&E[0]==="package"&&(await Ge.copy(Te.join(o,"package"),o),await Ge.remove(Te.join(o,"package")))}if(await vu.addConfig(n,{package:i}),!s){await u6();let f=VU.get(l6.CONFIG_PARAMS.ROOTPATH);o=Te.join(f,"node_modules",n)}if(d6)return;let c=new Map;c.isWorker=!0;let u=(rf(),ee(tf)),_;u.setErrorReporter(f=>_=f);let l=c6(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: ${n}`}a(A6,"deployComponent");async function O6(){let e=vu.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 Ge.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=Te.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ge.stat(d),E={name:Te.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"),n=await r(St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),{name:St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT).split(Te.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Te.join(St.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(rf(),ee(tf)).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(O6,"getComponents");async function b6(e){let t=ts.getComponentFileValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let n=vu.getConfigObj()[e.project]||e.project==="harperdb"?Te.join(VU.get(Qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ge.stat(Te.join(n,e.project,e.file));return{message:await Ge.readFile(Te.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Te.join(e.project,e.file)}'`):i}}a(b6,"getComponentFile");async function N6(e){let t=ts.setComponentFileValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Te.join(St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ge.ensureFile(n),await Ge.outputFile(n,e.payload,r)):await Ge.ensureDir(n),"Successfully set component: "+e.file}a(N6,"setComponentFile");async function y6(e){let t=ts.dropComponentFileValidator(e);if(t)throw Bt(t,t.message,Ht.BAD_REQUEST);let r=e.file?Te.join(e.project,e.file):e.project,n=Te.join(St.get(Qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ge.pathExists(n)&&await Ge.remove(n),vu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(y6,"dropComponent");$U.exports={customFunctionsStatus:E6,getCustomFunctions:h6,getCustomFunction:m6,setCustomFunction:p6,dropCustomFunction:S6,addComponent:T6,dropCustomFunctionProject:g6,packageComponent:R6,deployComponent:A6,getComponents:O6,getComponentFile:b6,setComponentFile:N6,dropComponent:y6}});var GT=T((Pfe,KU)=>{"use strict";var rs=require("joi"),YU=tt();KU.exports={readTransactionLogValidator:I6,deleteTransactionLogsBeforeValidator:w6};function I6(e){let t=rs.object({schema:rs.string().required(),table:rs.string().required(),from:rs.date().timestamp(),to:rs.date().timestamp(),limit:rs.number().min(1)});return YU.validateBySchema(e,t)}a(I6,"readTransactionLogValidator");function w6(e){let t=rs.object({schema:rs.string().required(),table:rs.string().required(),timestamp:rs.date().timestamp().required()});return YU.validateBySchema(e,t)}a(w6,"deleteTransactionLogsBeforeValidator")});var sf=T((Bfe,XU)=>{"use strict";var kT=M(),nf=Nt(),WU=J(),QU=j(),zU=Ts(),{handleHDBError:Ra,hdb_errors:C6}=Z(),{HTTP_STATUS_CODES:Aa}=C6,{readTransactionLogValidator:D6,deleteTransactionLogsBeforeValidator:L6}=GT(),JU="This operation relies on clustering and cannot run with it disable.",M6="Logs successfully deleted from transaction log.",U6="All logs successfully deleted from transaction log.";XU.exports={readTransactionLog:P6,deleteTransactionLogsBefore:v6};async function*P6(e){let t=D6(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST,void 0,void 0,!0);if(!QU.get(kT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ra(new Error,JU,Aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=WU.checkSchemaTableExist(r,n);if(s)throw Ra(new Error,s,Aa.NOT_FOUND,void 0,void 0,!0);let i=zU.createNatsTableStreamName(r,n),o=await nf.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===kT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(P6,"readTransactionLog");async function v6(e){let t=L6(e);if(t)throw Ra(t,t.message,Aa.BAD_REQUEST,void 0,void 0,!0);if(!QU.get(kT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ra(new Error,JU,Aa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=WU.checkSchemaTableExist(r,n);if(i)throw Ra(new Error,i,Aa.NOT_FOUND,void 0,void 0,!0);let o=zU.createNatsTableStreamName(r,n),{jsm:c}=await nf.getNATSReferences(),u=await nf.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let l=M6,d,f=new Date(u.state.last_ts).getTime();return s>f?(d=u.state.last_seq+1,l=U6):d=(await nf.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(v6,"deleteTransactionLogsBefore")});var ZU=T((xfe,jU)=>{"use strict";var VT=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}};jU.exports=VT});var tP=T((qfe,eP)=>{"use strict";var $T=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};eP.exports=$T});var KT=T((kfe,nP)=>{"use strict";var rP=ZU(),B6=tP(),{HDB_ERROR_MSGS:H6}=wr(),YT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=H6.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 rP(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let u=new B6(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 rP(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}};nP.exports=YT});var uf=T(($fe,TP)=>{"use strict";var WT=nn(),of=rn(),dn=cd(),xu=Hi(),QT=ki(),x6=cS(),F6=PD(),Fu=sn(),af=pS(),It=Y(),q6=gS(),G6=Nd(),k6=rT(),V6=Id(),$6=nT(),Y6=sT(),K6=aT(),W6=uT(),zT=dT(),ws=J(),Q6=LM(),JT=pT(),oP=Gd(),_n=M(),aP=_U(),z6=ua(),cP=fu(),uP=(Wd(),ee(Du)),lP=Lr(),kr=qT(),J6=require("alasql"),_P=sf(),dP=jd(),fP=KT(),{handleHDBError:mr,hdb_errors:EP}=Z(),{HDB_ERROR_MSGS:Vt,HTTP_STATUS_CODES:Bu}=EP,q=new Map,hP="delete",fi="insert",Cs="read",_o="update",Hu="describe",sP=xu.describeSchema.name,iP=xu.describeTable.name,mP={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},X6="catchup",j6="handleGetJob",Z6="handleGetJobsByStartDate",cf={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},e9=[dn.createTable.name,dn.createAttribute.name,dn.dropTable.name,dn.dropAttribute.name],pP={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}};q.set(WT.insert.name,new K(!1,[fi]));q.set(WT.update.name,new K(!1,[_o]));q.set(WT.upsert.name,new K(!1,[fi,_o]));q.set(of.searchByConditions.name,new K(!1,[Cs]));q.set(of.searchByHash.name,new K(!1,[Cs]));q.set(of.searchByValue.name,new K(!1,[Cs]));q.set(of.search.name,new K(!1,[Cs]));q.set(dn.createSchema.name,new K(!0,[]));q.set(dn.createTable.name,new K(!0,[]));q.set(dn.createAttribute.name,new K(!1,[fi]));q.set(dn.dropSchema.name,new K(!0,[]));q.set(dn.dropTable.name,new K(!0,[]));q.set(dn.dropAttribute.name,new K(!0,[]));q.set(xu.describeSchema.name,new K(!1,[Cs]));q.set(xu.describeTable.name,new K(!1,[Cs]));q.set(QT.deleteRecord.name,new K(!1,[hP]));q.set(Fu.addUser.name,new K(!0,[]));q.set(Fu.alterUser.name,new K(!0,[]));q.set(Fu.dropUser.name,new K(!0,[]));q.set(Fu.listUsersExternal.name,new K(!0,[]));q.set(af.listRoles.name,new K(!0,[]));q.set(af.addRole.name,new K(!0,[]));q.set(af.alterRole.name,new K(!0,[]));q.set(af.dropRole.name,new K(!0,[]));q.set(q6.name,new K(!0,[]));q.set(G6.name,new K(!0,[]));q.set(k6.name,new K(!0,[]));q.set(V6.name,new K(!0,[]));q.set($6.name,new K(!0,[]));q.set(Y6.name,new K(!0,[]));q.set(zT.setRoutes.name,new K(!0,[]));q.set(zT.getRoutes.name,new K(!0,[]));q.set(zT.deleteRoutes.name,new K(!0,[]));q.set(lP.setConfiguration.name,new K(!0,[]));q.set(K6.clusterStatus.name,new K(!0,[]));q.set(W6.name,new K(!0,[]));q.set(JT.getFingerprint.name,new K(!0,[]));q.set(JT.setLicense.name,new K(!0,[]));q.set(QT.deleteFilesBefore.name,new K(!0,[]));q.set(QT.deleteAuditLogsBefore.name,new K(!0,[]));q.set(oP.restart.name,new K(!0,[]));q.set(oP.restartService.name,new K(!0,[]));q.set(x6.name,new K(!0,[]));q.set(F6.name,new K(!0,[Cs]));q.set(z6.systemInformation.name,new K(!0,[]));q.set(lP.getConfiguration.name,new K(!0,[]));q.set(_P.readTransactionLog.name,new K(!0,[]));q.set(_P.deleteTransactionLogsBefore.name,new K(!0,[]));q.set(dP.installModules.name,new K(!0,[]));q.set(dP.auditModules.name,new K(!0,[]));q.set(cP.createTokens.name,new K(!1,[]));q.set(cP.refreshOperationToken.name,new K(!1,[]));q.set(uP.login.name,new K(!1,[]));q.set(uP.logout.name,new K(!1,[]));q.set(kr.customFunctionsStatus.name,new K(!0,[]));q.set(kr.getCustomFunctions.name,new K(!0,[]));q.set(kr.getComponents.name,new K(!0,[]));q.set(kr.getComponentFile.name,new K(!0,[]));q.set(kr.setComponentFile.name,new K(!0,[]));q.set(kr.dropComponent.name,new K(!0,[]));q.set(kr.getCustomFunction.name,new K(!0,[]));q.set(kr.setCustomFunction.name,new K(!0,[]));q.set(kr.dropCustomFunction.name,new K(!0,[]));q.set(kr.addComponent.name,new K(!0,[]));q.set(kr.dropCustomFunctionProject.name,new K(!0,[]));q.set(kr.packageComponent.name,new K(!0,[]));q.set(kr.deployComponent.name,new K(!0,[]));q.set(JT.getRegistrationInfo.name,new K(!1,[]));q.set(Fu.userInfo.name,new K(!1,[]));q.set(xu.describeAll.name,new K(!1,[]));q.set(j6,new K(!1,[]));q.set(Z6,new K(!0,[]));q.set(X6,new K(!0,[]));q.set(cf.CSV_DATA_LOAD,new K(!1,[fi,_o]));q.set(cf.CSV_URL_LOAD,new K(!1,[fi,_o]));q.set(cf.CSV_FILE_LOAD,new K(!1,[fi,_o]));q.set(cf.IMPORT_FROM_S3,new K(!1,[fi,_o]));q.set(pP.EXPORT_TO_S3,new K(!0,[]));q.set(pP.EXPORT_LOCAL,new K(!0,[]));q.set(_n.VALID_SQL_OPS_ENUM.DELETE,new K(!1,[hP]));q.set(_n.VALID_SQL_OPS_ENUM.SELECT,new K(!1,[Cs]));q.set(_n.VALID_SQL_OPS_ENUM.INSERT,new K(!1,[fi]));q.set(_n.VALID_SQL_OPS_ENUM.UPDATE,new K(!1,[_o]));TP.exports={verifyPerms:r9,verifyPermsAst:t9,verifyBulkLoadAttributePerms:s9};function t9(e,t,r){if(ws.isEmptyOrZeroLength(e))throw It.info("verify_perms_ast has an empty user parameter"),mr(new Error);if(ws.isEmptyOrZeroLength(t))throw It.info("verify_perms_ast has an empty user parameter"),mr(new Error);if(ws.isEmptyOrZeroLength(r))throw It.info("verify_perms_ast has a null operation parameter"),mr(new Error);try{let n=new fP,s=new Q6(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw It.info("No schemas defined in verifyPermsAst(), will not continue."),mr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&mP[r])throw mr(new Error,Vt.DROP_SYSTEM,Bu.FORBIDDEN);if(c&&!u)return null;let _=aP.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof J6.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=SP(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]),S=jT(t.role.permission,f,d[E]);XT(h,S,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw mr(n)}}a(t9,"verifyPermsAst");function r9(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw It.info("null required parameter in verifyPerms"),mr(new Error,Vt.DEFAULT_INVALID_REQUEST,Bu.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 fP;if(ws.isEmptyOrZeroLength(e.hdb_user.role)||ws.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(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(_n.SYSTEM_SCHEMA_NAME)||s===_n.SYSTEM_SCHEMA_NAME;if(l&&mP[r])throw mr(new Error,Vt.DROP_SYSTEM,Bu.FORBIDDEN);if(u&&!l||_===!0&&(r===dn.createSchema.name||r===dn.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===sP||r===iP){if(s===_n.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Vt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===sP&&(!d[s]||!d[s][Hu]))return c.handleInvalidItem(Vt.SCHEMA_NOT_FOUND(s));if(r===iP&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][Hu]))return c.handleInvalidItem(Vt.TABLE_NOT_FOUND(s,i))}}let f=SP(e.hdb_user,r,o,c,n);if(f)return f;if(q.get(r)&&q.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&_n.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],p=d[s].tables[i];p[_n.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(A=>A[_n.PERMS_CRUD_ENUM.READ]).forEach(A=>{S.push(A.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=S)}let E=n9(e),h=jT(e.hdb_user.role.permission,s,i);return XT(E,h,r,i,s,c,n),c.getPermsResponse()}a(r9,"verifyPerms");function SP(e,t,r,n,s){if(ws.arrayHasEmptyValues([e,t,r]))throw It.info("hasPermissions has an invalid parameter"),mr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||q.get(t).requires_su))return null;if(!q.get(t))throw It.info(`operation ${t} not found.`),mr(new Error,Vt.OP_NOT_FOUND(t),Bu.BAD_REQUEST);if(q.get(t)&&q.get(t).requires_su)return It.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][Hu]===!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[Hu]===!1)n.addInvalidItem(Vt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=q.get(t).perms;!ws.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let S=E[h],p=d[S];(p==null||p===!1)&&(It.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(S))}f.length>0&&n.addUnauthorizedTable(u,l,f)}catch(f){let E=Vt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw It.error(E),It.error(f),mr(EP.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(SP,"hasPermissions");function XT(e,t,r,n,s,i,o){if(!e||!t)throw It.info("no attributes specified in checkAttributePerms."),mr(new Error);let c=q.get(r).perms;if(!c||c==="")throw It.info(`no permissions found for ${r} in checkAttributePerms().`),mr(new Error);if(ws.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[Hu]===!1){i.addInvalidItem(Vt.ATTR_NOT_FOUND(s,n,l),s,n);continue}if(c)for(let f of c){if(_n.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Cs)throw mr(new Error,Vt.SYSTEM_TIMESTAMP_PERMS_ERR,Bu.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(XT,"checkAttributePerms");function n9(e){let t=new Set;try{if(e.action)return t;if(e.operation===_n.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){It.info(r)}return t}a(n9,"getRecordAttributes");function jT(e,t,r){let n=new Map;if(ws.isEmpty(e))return It.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{It.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(jT,"getAttributePermissions");function s9(e,t,r,n,s,i,o){let c=new Set(i),u=jT(e,n,s);XT(c,u,t,s,n,o,r)}a(s9,"verifyBulkLoadAttributePerms")});var _f=T((Kfe,bP)=>{"use strict";bP.exports={evaluateSQL:p9,processAST:OP,convertSQLToAST:AP,checkASTPermissions:RP};var i9=nn(),gP=require("util"),o9=gP.callbackify(i9.insert),a9=rn().search,c9=yC().update,u9=gP.callbackify(c9),l9=wC().convertDelete,Ei=require("alasql"),_9=uf(),lf=Y(),d9=z_(),f9=J(),qu=M(),{hdb_errors:E9,handleHDBError:ZT}=Z(),{HTTP_STATUS_CODES:eg}=E9;d9(Ei);var h9=403,m9="There was a problem performing this insert. Please check the logs and try again.",tg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function p9(e,t){let r=e.parsed_sql_object;if(!r){r=AP(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ei.yy.Insert?n=s.into.databaseid:s instanceof Ei.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ei.yy.Update||s instanceof Ei.yy.Delete?n=s.table.databaseid:lf.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ei.yy.Select)&&f9.isEmptyOrZeroLength(n))return t("No schema specified",null)}OP(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(p9,"evaluateSQL");function RP(e,t){let r;try{r=_9.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(RP,"checkASTPermissions");function AP(e){let t=new tg;if(!e)throw ZT(new Error,"The 'sql' parameter is missing from the request body",eg.BAD_REQUEST);try{let r=e.trim(),n=Ei.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
|
|
17
|
+
`);throw n[1]?ZT(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,eg.BAD_REQUEST):ZT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",eg.BAD_REQUEST)}return t}a(AP,"convertSQLToAST");function OP(e,t,r){try{let n=S9;if(!e.bypass_auth&&!t.permissions_checked){let i=RP(e,t);if(i&&i.length>0)return r(h9,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case qu.VALID_SQL_OPS_ENUM.SELECT:n=a9,s=t.ast.statements[0];break;case qu.VALID_SQL_OPS_ENUM.INSERT:n=T9;break;case qu.VALID_SQL_OPS_ENUM.UPDATE:n=u9;break;case qu.VALID_SQL_OPS_ENUM.DELETE:n=l9;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(OP,"processAST");function S9(e,t){lf.info(e),t("unknown sql statement")}a(S9,"nullFunction");function T9({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=g9(i,e.values)}catch(o){return r(o)}o9(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){lf.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(T9,"convertInsert");function g9(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]]=Ei.compile(`SELECT ${s.toString()} AS [${qu.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw lf.error(r),new Error(m9)}}a(g9,"createDataObjects")});var rg=T((Qfe,yP)=>{"use strict";var{S3:R9,GetObjectCommand:A9}=require("@aws-sdk/client-s3");yP.exports={getFileStreamFromS3:O9,getS3AuthObj:NP};async function O9(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await NP(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new A9(r))).Body}a(O9,"getFileStreamFromS3");function NP(e,t,r){return new R9({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(NP,"getS3AuthObj")});var df=T((Jfe,vP)=>{"use strict";var sg=rn(),b9=_f(),N9=rg(),{AsyncParser:y9,Transform:I9}=require("json2csv"),ku=require("stream"),Vr=J(),ng=require("fs-extra"),w9=require("path"),fn=Y(),{promisify:CP}=require("util"),Gu=J(),{handleHDBError:Tt,hdb_errors:C9}=Z(),{HDB_ERROR_MSGS:pr,HTTP_STATUS_CODES:gt}=C9,{streamAsJSON:D9}=(Ch(),ee(cb)),{Upload:L9}=require("@aws-sdk/lib-storage"),IP=["search_by_value","search_by_hash","sql","search_by_conditions"],wP=["json","csv"],DP="json",LP="csv",M9="Successfully exported JSON locally.",U9="Successfully exported CSV locally.",P9=1e3,v9=sg.searchByHash,B9=sg.searchByValue,H9=CP(b9.evaluateSQL),x9=CP(ku.finished);vP.exports={export_to_s3:k9,export_local:F9,toCsvStream:MP};async function F9(e){fn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=UP(e);if(!Vr.isEmpty(t))throw fn.error(t),Tt(new Error,t,gt.BAD_REQUEST,void 0,void 0,!0);if(Vr.isEmpty(e.path))throw fn.error(pr.MISSING_VALUE("path")),Tt(new Error,pr.MISSING_VALUE("path"),gt.BAD_REQUEST,void 0,void 0,!0);let r=(Vr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(w9.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Vr.buildFolderPath(e.path,r);await q9(e.path);let s=await PP(e);return await G9(n,e.format,s)}a(F9,"export_local");async function q9(e){if(fn.trace("in confirmPath"),Vr.isEmptyOrZeroLength(e))throw Tt(new Error,`Invalid path: ${e}`,gt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ng.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,fn.error(n),Tt(new Error,n,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 fn.error(r),Tt(new Error,r,gt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(q9,"confirmPath");async function G9(e,t,r){if(fn.trace("in saveToLocal"),Gu.isEmptyOrZeroLength(e))throw Tt(new Error,pr.INVALID_VALUE("file_path"),gt.BAD_REQUEST,void 0,void 0,!0);if(Gu.isEmptyOrZeroLength(t))throw Tt(new Error,pr.INVALID_VALUE("Source format"),gt.BAD_REQUEST,void 0,void 0,!0);if(Gu.isEmpty(r))throw Tt(new Error,pr.NOT_FOUND("Data"),gt.BAD_REQUEST,void 0,void 0,!0);if(t===DP){let n=ng.createWriteStream(e);return D9(r).pipe(n),await x9(n),{message:M9,path:e}}else if(t===LP){let n=ng.createWriteStream(e),s=ku.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(l=>({label:l,value:l})));let c={objectMode:!0};return await new y9(i,c).fromInput(s).toOutput(n).promise(!1),{message:U9,path:e}}throw Tt(new Error,pr.INVALID_VALUE("format"),gt.BAD_REQUEST)}a(G9,"saveToLocal");async function k9(e){if(!e.s3||Object.keys(e.s3).length===0)throw Tt(new Error,pr.MISSING_VALUE("S3 object"),gt.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Tt(new Error,pr.MISSING_VALUE("aws_access_key_id"),gt.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Tt(new Error,pr.MISSING_VALUE("aws_secret_access_key"),gt.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.bucket))throw Tt(new Error,pr.MISSING_VALUE("bucket"),gt.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.key))throw Tt(new Error,pr.MISSING_VALUE("key"),gt.BAD_REQUEST);if(Vr.isEmptyOrZeroLength(e.s3.region))throw Tt(new Error,pr.MISSING_VALUE("region"),gt.BAD_REQUEST);let t=UP(e);if(!Vr.isEmpty(t))throw Tt(new Error,t,gt.BAD_REQUEST);fn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await PP(e)}catch(u){throw fn.error(u),u}let n,s=await N9.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ku.PassThrough;if(e.format===LP){i=e.s3.key+".csv";let u=MP(r,r.getColumns?.());u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===DP){i=e.s3.key+".json";let u=new ku.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%P9===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw Tt(new Error,pr.INVALID_VALUE("format"),gt.BAD_REQUEST);return new L9({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(k9,"export_to_s3");function MP(e,t){let r=ku.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new I9(n,s);return r.pipe(i)}a(MP,"toCsvStream");function UP(e){if(fn.trace("in exportCoreValidation"),Vr.isEmpty(e.format))return"format missing";if(wP.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${wP.join(", ")}`;let t=e.search_operation.operation;if(Vr.isEmpty(t))return"search_operation.operation missing";if(IP.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${IP.join(", ")}`}a(UP,"exportCoreValidation");async function PP(e){fn.trace("in getRecords");let t,r;if(Gu.isEmpty(e.search_operation)||Gu.isEmptyOrZeroLength(e.search_operation.operation))throw Tt(new Error,pr.INVALID_VALUE("Search operation"),gt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=B9;break;case"search_by_hash":t=v9;break;case"search_by_conditions":t=sg.searchByConditions;break;case"sql":t=H9;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,fn.error(r),Tt(new Error,r,gt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(PP,"getRecords")});var VP={};Ke(VP,{contentTypes:()=>ug,findBestSerializer:()=>Ef,getDeserializer:()=>Eo,registerContentHandlers:()=>lg,serialize:()=>hf,serializeMessage:()=>di});function V9(e){try{return e?.[0]===123?cg(e):e}catch{return e}}function lg(e){e.register(Y9,{serializers:[{regex:/^application\/json$/,serializer:hc},{regex:/^application\/cbor$/,serializer:function(t){return new fo.EncoderStream($u).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?ff.Readable.from((0,ns.encodeIter)(t,$u)):(0,ns.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,ig.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ns.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,fo.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Ef(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 S=h.indexOf("=");f[h.substring(0,S)]=h.substring(S+1)}d=+f.q;let E=xt.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(xt.keys()).join(", "))}};n=xt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function hf(e,t,r){let n=HP&&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=Ef(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Ds.createBrotliCompress)({params:{[Ds.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ds.constants.BROTLI_MODE_TEXT:Ds.constants.BROTLI_MODE_GENERIC,[Ds.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>HP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ds.brotliCompress)(s,(c,u)=>{c?o(c):i(u)}))):s}function di(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Vu(e);let r=t.serialize;if(r)return r(e);let n=Ef(t);return r=t.serialize=n.serializer.serialize,r(e)}function K9(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 Eo(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=xt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=xt.get(e)?.deserialize||xP(e,n);return o=>K9(o).then(i)}return e&&xt.get(e)?.deserialize||xP(e,n)}function xP(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 cg(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function W9(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 ig,ns,fo,Ds,ff,FP,og,ag,qP,GP,Vu,cg,$u,xt,ug,BP,kP,$9,Y9,HP,ma=Re(()=>{Ch();ig=B(df()),ns=require("msgpackr"),fo=require("cbor-x"),Ds=require("zlib"),ff=require("stream");rr();FP=require("../../index"),og=B(j()),ag=B(M()),qP=B(require("yaml")),GP=og.default.get(ag.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Vu=GP?Li:JSON.stringify,cg=GP?wh:JSON.parse,$u={useRecords:!1,useToJSON:!0},xt=new Map,ug=xt;ut.contentTypes=ug;(0,FP._assignPackageExport)("contentTypes",ug);xt.set("application/json",{serializeStream:hc,serialize:Vu,deserialize:cg,q:.8});BP=new fo.Encoder($u);xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new fo.EncoderStream($u).end(e)},serialize:BP.encode,deserialize:BP.decode,q:1});xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?ff.Readable.from((0,ns.encodeIter)(e,$u)):(0,ns.pack)(e)},serialize:ns.pack,deserialize:ns.unpack,q:.9});xt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,ig.toCsvStream)(e,e?.getColumns?.())},q:.1});xt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});xt.set("text/yaml",{serialize(e){return qP.stringify(e,{aliasDuplicateObjects:!1})},q:.7});xt.set("text/event-stream",{serializeStream:function(e){return ff.Readable.from(W9(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=Vu(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: ${
|
|
22
|
+
`}else return typeof e=="object"?`data: ${Vu(e)}
|
|
23
23
|
|
|
24
24
|
`:`data: ${e}
|
|
25
25
|
|
|
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()}});UP={type:"application/json",serializeStream:hc,serialize:$u,deserialize:N9,q:.8};$t.set("*/*",UP);$t.set("",UP);a(N9,"tryJSONParse");a(ig,"registerContentHandlers");y9=require("fastify-plugin"),I9=y9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=ff(n.raw);s.type(c),s.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(ff,"findBestSerializer");CP=tg.default.get(rg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Ef,"serialize");a(di,"serializeMessage");a(w9,"streamToBuffer");a(ho,"getDeserializer");a(LP,"deserializerUnknownType");a(C9,"transformIterable")});function Qu(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=Ms(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=Qu({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 F=!!Ms(w.attributes,I.relationship.to)?.elements;K=U9(K,I,w.primaryStore,F,B)}if(I.relationship.from){let F=a(P=>Qu({attribute:I.relationship.from,value:P},t,r,n,s,B),"searchEntry");I.elements?(i[o[0]]=B,K=P9(K,I,w.primaryStore,B,F)):K=K.flatMap(F)}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(BP[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]=os.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:og.SKIP)}catch(F){K(F)}})))}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?og.SKIP:I);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function Ms(e,t){if(Array.isArray(t))if(t.length>1){let r=Ms(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ms(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 U9(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=mi(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 P9(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(mi(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(mi(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=Ms(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()),BP[s]||s){case ze.SEARCH_TYPES.EQUALS:case void 0:return is(i,c=>c===o);case ze.SEARCH_TYPES.CONTAINS:return is(i,c=>c?.toString().includes(o));case ze.SEARCH_TYPES.ENDS_WITH:case ze.SEARCH_TYPES._ENDS_WITH:return is(i,c=>c?.toString().endsWith(o));case ze.SEARCH_TYPES.STARTS_WITH:case ze.SEARCH_TYPES._STARTS_WITH:return is(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()),is(i,c=>(0,os.compareKeys)(c,o[0])>=0&&(0,os.compareKeys)(c,o[1])<=0);case"gt":case ze.SEARCH_TYPES.GREATER_THAN:case ze.SEARCH_TYPES._GREATER_THAN:return is(i,c=>(0,os.compareKeys)(c,o)>0);case"ge":case ze.SEARCH_TYPES.GREATER_THAN_EQUAL:case ze.SEARCH_TYPES._GREATER_THAN_EQUAL:return is(i,c=>(0,os.compareKeys)(c,o)>=0);case ze.SEARCH_TYPES.LESS_THAN:case"lt":case ze.SEARCH_TYPES._LESS_THAN:return is(i,c=>(0,os.compareKeys)(c,o)<0);case"le":case ze.SEARCH_TYPES.LESS_THAN_EQUAL:case ze.SEARCH_TYPES._LESS_THAN_EQUAL:return is(i,c=>(0,os.compareKeys)(c,o)<=0);case"ne":return is(i,c=>(0,os.compareKeys)(c,o)!==0);default:throw new mo.ClientError(`Unknown query comparator "${s}"`)}}function is(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 ag(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=Ms(e.attributes,n[0]),i=s.definition?.tableClass||s.elements.definition?.tableClass,o=ag(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=vP:t.estimated_count=1/0:r===ze.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=vP:r===ze.SEARCH_TYPES.BETWEEN?t.estimated_count=D9:t.estimated_count=L9;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function hf(e){if(e)if(hi=e,Oa.lastIndex=0,v9.test(e))try{let t=Ku(new ba,"");if(Tr!==hi.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 ${Tr} in '${hi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Ku(e,t){let r=Oa,n,s,i,o,c;for(;n=r.exec(hi);){Tr=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=Wu(u)}break;case"!=":case"<":case"<=":case">":case">=":if(i=M9[_],!u)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Wu(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(Wu(u)),s=void 0;break;case"(":Oa.lastIndex=Tr;let d=Ku(u?[]:new ba,")");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=HP(d);break;default:throw new SyntaxError(`unknown query function call ${u}`)}hi[Tr]===","?r.lastIndex=++Tr: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");Oa.lastIndex=Tr,l=Ku([],"}"),l.name=u,e.push(l),hi[Tr]===","?r.lastIndex=++Tr:o=!0;break;case"[":Oa.lastIndex=Tr,u?(l=Ku(new ba,"]"),l.name=u):l=Ku(e.conditions?new ba:[],"]"),e.conditions?(e.conditions.push(l),s=null):e.push(l),hi[Tr]===","?r.lastIndex=++Tr: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(Wu(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?B9:Oa,r.lastIndex=Tr),Tr===hi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Wu(e){return e.indexOf(".")>-1?e.split(".").map(Wu):decodeURIComponent(e)}function HP(e){let t=xP(e[0]);return e.length>1&&(t.next=HP(e.slice(1))),t}function xP(e){if(Array.isArray(e)){let t=xP(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 mi(e){return Array.isArray(e)?e.join("\0"):e}var mo,ze,os,og,L9,D9,vP,M9,BP,v9,Oa,B9,Tr,hi,ba,mf=Ae(()=>{mo=v(Z()),ze=v(ht()),os=require("ordered-binary"),og=require("lmdb"),L9=1e8,D9=15e6,vP=1e7,M9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(Qu,"searchByIndex");a(Ms,"findAttribute");a(U9,"joinTo");a(P9,"joinFrom");BP={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(is,"attributeComparator");a(ag,"estimateCondition");v9=/[()[\]|!<>.]|(=\w+=)/,Oa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,B9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(hf,"parseQuery");a(Ku,"parseBlock");a(Wu,"decodeProperty");a(HP,"toSortObject");a(xP,"toSortEntry");ba=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(mi,"flattenKey")});var pf={};Ve(pf,{start:()=>F9});async function x9(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hf(e);let s=new _i;try{e.responseHeaders=s;let i=e.url.slice(1),o=ug.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 Xu.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 Xu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Xu.ServerError(`Method ${n} is not recognized`,501)}}),d=200,f;if(l==null)d=n==="GET"||n==="HEAD"?404:204,cg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){H9[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),cg.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=Ef(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=Ef(i.contentType?i:i.toString(),e,o),o}}function F9(e){cg=e,!FP&&(FP=!0,ug=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return x9(t,r)}),e.server.ws(async(t,r,n)=>{Ju++;let s=new Nn;qP||(qP=!0,tu(l=>{Ju>0&&l.push({metric:"ws-connections",connections:Ju,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",()=>{Ju--,nn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=ug.getMatch(u);if(nn(!!_,"connection","ws","connect"),!_)t.send(di(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,xr(h=>({count:h.count,total:Ju}),"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=di(E.value,r);t.send(h),xr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var po,Xu,Yt,H9,cg,FP,ug,qP,Ju,GP=Ae(()=>{ma();Ns();po=v(V()),Xu=v(Z());mf();fc();Ji();kd();Yt=new Uint8Array(8),H9=new Float64Array(Yt.buffer,0,1),cg={};a(x9,"http");Ju=0;a(F9,"start")});var lg=T((Gfe,kP)=>{var{recordAction:Sf,recordActionBinary:q9}=(Ns(),ee(ru)),G9=require("fastify-plugin"),k9=200;kP.exports=G9(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),Sf(o,"duration",_,d,l),q9(s.raw.statusCode<400,"success",_,d,l);let f=k9;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Sf(performance.now()-c,"transfer",_,d,l),Sf(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Sf(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var Eg=T((kfe,WP)=>{var Of=require("clone"),bf=et(),V9=J(),Rf=M(),$9=V(),Tf=require("fs"),_g=require("joi"),{string:Af}=_g.types(),{hdb_errors:Y9,handleHDBError:ju}=Z(),{HDB_ERROR_MSGS:K9,HTTP_STATUS_CODES:gf}=Y9,{common_validators:Na}=Kn(),VP=1e9,$P=" is required",W9=["insert","update","upsert"],dg={database:{presence:!1,format:Na.schema_format,length:Na.schema_length},schema:{presence:!1,format:Na.schema_format,length:Na.schema_length},table:{presence:!0,format:Na.schema_format,length:Na.schema_length},action:{inclusion:{within:W9,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Q9={schema:Af.required(),table:Af.required(),action:Af.valid("insert","update","upsert")},{AWS_ACCESS_KEY:z9,AWS_SECRET:J9,AWS_BUCKET:X9,AWS_FILE_KEY:j9,REGION:Z9}=Rf.S3_BUCKET_AUTH_KEYS,e7={s3:{presence:!0},[`s3.${z9}`]:{presence:!0,type:"String"},[`s3.${J9}`]:{presence:!0,type:"String"},[`s3.${X9}`]:{presence:!0,type:"String"},[`s3.${j9}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Z9}`]:{presence:!0,type:"String"}},YP=Of(dg);YP.data.presence={message:$P};var KP=Of(dg);KP.file_path.presence={message:$P};var t7=Object.assign(Of(dg),e7),fg=Of(Q9);fg.csv_url=Af.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();fg.passthrough_headers=_g.object();function r7(e){let t=bf.validateObject(e,YP);return Nf(e,t)}a(r7,"dataObject");function n7(e){let t=bf.validateBySchema(e,_g.object(fg));return Nf(e,t)}a(n7,"urlObject");function s7(e){let t=bf.validateObject(e,KP);return Nf(e,t)}a(s7,"fileObject");function i7(e){let t=bf.validateObject(e,t7);return Nf(e,t)}a(i7,"s3FileObject");function Nf(e,t){if(!t){let r=V9.checkGlobalSchemaTable(e.schema,e.table);if(r)return ju(new Error,r,gf.BAD_REQUEST);if(e.operation===Rf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Tf.accessSync(e.file_path,Tf.constants.R_OK|Tf.constants.F_OK)}catch(n){return n.code===Rf.NODE_ERROR_CODES.ENOENT?ju(n,`No such file or directory ${n.path}`,gf.BAD_REQUEST):n.code===Rf.NODE_ERROR_CODES.EACCES?ju(n,`Permission denied ${n.path}`,gf.BAD_REQUEST):ju(n)}try{let n=Tf.statSync(e.file_path).size;if(n>VP)return ju(new Error,K9.MAX_FILE_SIZE_ERR(n,VP),gf.BAD_REQUEST)}catch(n){$9.error(n),console.error(n)}}}return t}a(Nf,"postValidateChecks");WP.exports={dataObject:r7,urlObject:n7,fileObject:s7,s3FileObject:i7}});var hg=T(($fe,QP)=>{"use strict";var Zu=V(),yf=M();async function o7(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===yf.OPERATIONS_ENUM.INSERT||t.operation===yf.OPERATIONS_ENUM.UPDATE||t.operation===yf.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===yf.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Zu.info(i.message),i):i.http_resp_msg?(Zu.error(`Error calling operation: ${e.name}`),Zu.error(i.http_resp_msg),i):(Zu.error(`Error calling operation: ${e.name}`),Zu.error(i),i)}}a(o7,"callOperationFunctionAsAwait");QP.exports={callOperationFunctionAsAwait:o7}});var JP=T((Kfe,zP)=>{"use strict";var mg=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}},pg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};zP.exports={BulkLoadFileObject:mg,BulkLoadDataObject:pg}});var jP=T((Qfe,XP)=>{"use strict";var Sg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};XP.exports=Sg});var bg=T((eEe,hv)=>{"use strict";var If=tn(),Cf=Eg(),a7=require("needle"),Bn=M(),Jfe=nt(),ya=J(),{handleHDBError:it,hdb_errors:av}=Z(),{HTTP_STATUS_CODES:Kt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:To}=av,Ia=V(),Tg=require("papaparse");ya.promisifyPapaParse();var Hn=require("fs-extra"),c7=require("path"),{chain:ZP}=require("stream-chain"),ev=require("stream-json/streamers/StreamArray"),tv=require("stream-json/utils/Batch"),rv=require("stream-chain/utils/comp"),{finished:nv}=require("stream"),u7=j(),cv=hg(),l7=XT(),{BulkLoadFileObject:Rg,BulkLoadDataObject:_7}=JP(),Ag=GT(),{verifyBulkLoadAttributePerms:uv}=cf(),Xfe=jP(),jfe=It(),Zfe=gs(),{databases:d7}=(ge(),ee(xe)),{coerceType:f7}=(Lf(),ee(Ng)),sv="No records parsed from csv file.",So=`${u7.get("HDB_ROOT")}/tmp`,{schema_regex:E7}=Kn(),iv=1024*1024*2,ov=5e3,h7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};hv.exports={csvDataLoad:m7,csvURLLoad:p7,csvFileLoad:S7,importFromS3:T7};async function m7(e,t){let r=Cf.dataObject(e);if(r)throw it(r,r.message,Kt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=dv(e.schema,e.table),i=Tg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:gg.bind(null,s),dynamicTyping:!1}),o=new Ag;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&uv(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 _7(e.action,e.schema,e.table,i.data);return n=await cv.callOperationFunctionAsAwait(fv,u,null),n.message===sv?sv:Ev(n.records,n.number_written)}catch(s){throw go(s)}}a(m7,"csvDataLoad");async function p7(e){let t=Cf.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 g7(e,r)}catch(s){throw Ia.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),it(s,To(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Rg(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 Og(s);return await wf(n),i}catch(s){throw await wf(n),go(s)}}a(p7,"csvURLLoad");async function S7(e){let t=Cf.fileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r=new Rg(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 Og(r)}catch(n){throw go(n)}}a(S7,"csvFileLoad");async function T7(e){let t=Cf.s3FileObject(e);if(t)throw it(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=c7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${So}/${s}`;let i=new Rg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await R7(s,e);let o=await Og(i);return await wf(r),o}catch(n){throw await wf(r),go(n)}}a(T7,"importFromS3");async function g7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await a7("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)}O7(r,e.csv_url),await A7(t,r.raw)}a(g7,"downloadCSVFile");async function R7(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 l7.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(){Ia.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ia.error(Lt.S3_DOWNLOAD_ERR+" - "+r),it(r,To(Lt.S3_DOWNLOAD_ERR))}}a(R7,"downloadFileFromS3");async function A7(e,t){try{await Hn.mkdirp(So),await Hn.writeFile(`${So}/${e}`,t)}catch(r){throw Ia.error(Lt.WRITE_TEMP_FILE_ERR),it(r,To(Lt.DEFAULT_BULK_LOAD_ERR))}}a(A7,"writeFileToTempFolder");async function wf(e){if(e)try{await Hn.access(e),await Hn.unlink(e)}catch{Ia.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(wf,"deleteTempFile");function O7(e,t){if(e.statusCode!==av.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(!h7[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(O7,"validateURLResponse");async function Og(e){try{let t;switch(e.file_type){case Bn.VALID_S3_FILE_TYPES.CSV:t=await b7(e);break;case Bn.VALID_S3_FILE_TYPES.JSON:t=await N7(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 Ev(t.records,t.number_written)}catch(t){throw go(t)}}a(Og,"fileLoad");async function lv(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 If.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&uv(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(lv,"validateChunk");async function _v(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;ya.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!ya.isEmpty(c)&&!ya.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 cv.callOperationFunctionAsAwait(fv,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(_v,"insertChunk");async function b7(e){let t={records:0,number_written:0},r=dv(e.schema,e.table);try{let n=new Ag,s=Hn.createReadStream(e.file_path,{highWaterMark:iv});s.setEncoding("utf8"),await Tg.parsePromise(s,lv.bind(null,e,n),gg.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:iv}),s.setEncoding("utf8"),await Tg.parsePromise(s,_v.bind(null,e,t),gg.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(b7,"callPapaParse");function dv(e,t){let r=d7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>f7(i,s));return n}a(dv,"createTransformMap");function gg(e,t,r){let n=e.get(r);return n?n(t):ya.autoCast(t)}a(gg,"typeFunction");async function N7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Ag,s=ZP([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),ev.withParser(),c=>c.value,new tv({batchSize:ov}),rv(async c=>{await lv(e,n,r,c)})]);await new Promise((c,u)=>{nv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw it(new Error,i,Kt.BAD_REQUEST);let o=ZP([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),ev.withParser(),c=>c.value,new tv({batchSize:ov}),rv(async c=>{await _v(e,t,r,c)})]);return await new Promise((c,u)=>{nv(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(N7,"insertJson");async function fv(e){let t={};try{e.data&&e.data.length>0&&y7(e.data[0])?t=await I7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ia.info(t.message))}catch(r){throw go(r)}return t}a(fv,"callBulkFileLoad");function y7(e){let t=Object.keys(e);for(let r of t)if(!E7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(y7,"validateColumnNames");async function I7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=If.insert;break;case"update":i=If.update;break;case"upsert":i=If.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=ya.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw go(o)}}a(I7,"bulkFileLoad");function Ev(e,t){return`successfully loaded ${t} of ${e} records`}a(Ev,"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 pv=T((rEe,mv)=>{"use strict";var yg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};mv.exports=yg});var gv=T((sEe,Tv)=>{"use strict";var w7=M(),Sv=require("moment"),C7=require("uuid").v4,Ig=class{static{a(this,"JobObject")}constructor(){this.id=C7(),this.type=void 0,this.start_datetime=Sv().valueOf(),this.created_datetime=Sv().valueOf(),this.end_datetime=void 0,this.status=w7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Tv.exports=Ig});var wg=T((oEe,yv)=>{"use strict";var L7=require("uuid").v4,Ov=tn(),bv=en(),D7=Jn(),M7=jo(),U7=pv(),ot=M(),P7=gv(),v7=pS(),dn=V(),B7=wc(),wa=J(),{promisify:H7}=require("util"),Ro=require("moment"),x7=lf(),Df=Eg(),Rv=Sm(),{deleteTransactionLogsBeforeValidator:F7}=BT(),{handleHDBError:q7,hdb_errors:G7}=Z(),{HTTP_STATUS_CODES:k7}=G7,Av=bv.searchByValue,V7=bv.searchByHash,$7=Ov.insert,Y7=H7(x7.evaluateSQL),K7=Ov.update;yv.exports={addJob:z7,updateJob:X7,handleGetJob:W7,handleGetJobsByStartDate:Q7,getJobById:Nv};async function W7(e){try{let t=await Nv(e.id);return wa.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(W7,"handleGetJob");async function Q7(e){try{let t=await J7(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(Q7,"handleGetJobsByStartDate");async function z7(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wa.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=Df.fileObject(e);break;case ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=Df.urlObject(e);break;case ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Df.dataObject(e);break;case ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Df.s3FileObject(e);break;case ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Rv(e,"date");break;case ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Rv(e,"timestamp");break;case ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=F7(e);break;default:break}if(n)throw q7(n,n.message,k7.BAD_REQUEST,void 0,void 0,!0);let s=new P7;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 D7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Av(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=L7();try{o=await Av(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 B7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await $7(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(z7,"addJob");async function J7(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 U7(n,e.hdb_user);try{return await Y7(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(J7,"getJobsInDateRange");async function Nv(e){if(wa.isEmptyOrZeroLength(e))return wa.errorizeMessage("Invalid job ID specified.");let t=new M7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await V7(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return dn.error(n),wa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Nv,"getJobById");async function X7(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wa.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 v7(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await K7(t),r}a(X7,"updateJob")});var Mv=T((cEe,Dv)=>{"use strict";var Iv=J(),gr=M(),j7=require("moment"),Mf=bg(),Uf=V(),wv=wg(),Cv=_f(),Lv=Vi(),Z7=tt(),eee=nf(),Cg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function tee(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(Iv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Iv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gr.JOB_TYPE_ENUM.csv_file_load:await Us(e,Mf.csvFileLoad);break;case gr.JOB_TYPE_ENUM.csv_url_load:await Us(e,Mf.csvURLLoad);break;case gr.JOB_TYPE_ENUM.csv_data_load:await Us(e,Mf.csvDataLoad);break;case gr.JOB_TYPE_ENUM.import_from_s3:await Us(e,Mf.importFromS3);break;case gr.JOB_TYPE_ENUM.empty_trash:break;case gr.JOB_TYPE_ENUM.export_local:await Us(e,Cv.export_local);break;case gr.JOB_TYPE_ENUM.export_to_s3:await Us(e,Cv.export_to_s3);break;case gr.JOB_TYPE_ENUM.delete_files_before:case gr.JOB_TYPE_ENUM.delete_records_before:await Us(e,Lv.deleteFilesBefore);break;case gr.JOB_TYPE_ENUM.delete_audit_logs_before:await Us(e,Lv.deleteAuditLogsBefore);break;case gr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Us(e,eee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(tee,"parseMessage");async function Us(e,t){try{e.job.status=gr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=j7().valueOf(),await wv.updateJob(e.job),await ree(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):Uf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Uf.error(n),e.job.message=n,e.job.status=gr.JOB_STATUS_ENUM.ERROR;try{await wv.updateJob(e.job)}catch(s){throw Uf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Us,"runJob");async function ree(e){Uf.trace("launching job thread:",e),Z7.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[gr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(ree,"launchJobThread");Dv.exports={parseMessage:tee,RunnerMessage:Cg}});var Pv=T((lEe,Uv)=>{"use strict";var Lg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Uv.exports=Lg});var Xv=T((dEe,Bg)=>{"use strict";var Hf=en(),Ug=lf(),Pf=bg(),Ps=cd(),vf=xi(),tl=Vi(),nee=rS(),el=rn(),Bf=_S(),Wt=vT(),Dt=V(),see=ES(),iee=bd(),vv=XS(),oee=yd(),aee=jS(),cee=ZS(),uee=rT(),lee=sT(),Dg=aT(),Bv=_f(),_ee=cf(),Pg=wg(),H=M(),{hdb_errors:nl,handleHDBError:rl}=Z(),{HTTP_STATUS_CODES:Hv}=nl,Mg=dT(),xv=qd(),Wv=require("util"),Ca=tn(),dee=Xs(),fee=ua(),Fv=Mv(),qv=Eu(),Gv=(Kd(),ee(Du)),kv=Lr(),Vv=nf(),$v=Xd(),{setServerUtilities:Eee}=(Lf(),ee(Ng)),{CONTEXT:hee}=(yn(),ee(ap)),{_assignPackageExport:mee}=require("../../index"),{transformReq:pee}=J(),{server:See}=(nr(),ee(Ci)),Tee=hg(),Yv=Hf.searchByHash,gee=Hf.searchByValue,Ree=Wv.promisify(Hf.search),Aee=Wv.promisify(Ug.evaluateSQL),Oee={[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=Pv();async function Qv(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 Tee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Oee[e.body.operation]&&dee.setSchemaDataToGlobal(n=>{n&&Dt.error(n)}),r}a(Qv,"processLocalTransaction");var Kv=Nee();Bg.exports={chooseOperation:zv,getOperationFunction:Jv,operation:vg,processLocalTransaction:Qv};Eee(Bg.exports);See.operation=vg;function zv(e){let t;try{t=Jv(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=Ug.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Ug.checkASTPermissions(e,i);if(o)throw Dt.error(`${Hv.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),rl(new Error,o,nl.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=_ee.verifyPerms(i,s);if(o)throw Dt.error(`${Hv.FORBIDDEN} from operation ${e.operation}`),Dt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),rl(new Error,o,nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw rl(s,"There was an error when trying to choose an operation path")}return r}a(zv,"chooseOperation");function Jv(e){if(Dt.trace(`getOperationFunction with operation: ${e.operation}`),Kv.has(e.operation))return Kv.get(e.operation);throw rl(new Error,nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Jv,"getOperationFunction");mee("operation",vg);function vg(e,t){e.hdb_user=this[hee]?.user,e.bypass_auth=!t;let r=zv(e);return Qv({body:e},r)}a(vg,"operation");async function bee(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 Ca.insert(i);break;case H.OPERATIONS_ENUM.UPDATE:o=await Ca.update(i);break;case H.OPERATIONS_ENUM.UPSERT:o=await Ca.upsert(i);break;case H.OPERATIONS_ENUM.DELETE:o=await tl.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(bee,"catchup");async function as(e){pee(e);let t,r;try{r=await Pg.addJob(e),t=r.createdJob,Dt.info("addJob result",r);let n=new Fv.RunnerMessage(t,e);return await Fv.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),rl(n,s)}}a(as,"executeJob");function Nee(){let e=new Map;return e.set(H.OPERATIONS_ENUM.INSERT,new G(Ca.insert)),e.set(H.OPERATIONS_ENUM.UPDATE,new G(Ca.update)),e.set(H.OPERATIONS_ENUM.UPSERT,new G(Ca.upsert)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new G(Hf.searchByConditions)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_HASH,new G(Yv)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_ID,new G(Yv)),e.set(H.OPERATIONS_ENUM.SEARCH_BY_VALUE,new G(gee)),e.set(H.OPERATIONS_ENUM.SEARCH,new G(Ree)),e.set(H.OPERATIONS_ENUM.SQL,new G(Aee)),e.set(H.OPERATIONS_ENUM.CSV_DATA_LOAD,new G(as,Pf.csvDataLoad)),e.set(H.OPERATIONS_ENUM.CSV_FILE_LOAD,new G(as,Pf.csvFileLoad)),e.set(H.OPERATIONS_ENUM.CSV_URL_LOAD,new G(as,Pf.csvURLLoad)),e.set(H.OPERATIONS_ENUM.IMPORT_FROM_S3,new G(as,Pf.importFromS3)),e.set(H.OPERATIONS_ENUM.CREATE_SCHEMA,new G(Ps.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_DATABASE,new G(Ps.createSchema)),e.set(H.OPERATIONS_ENUM.CREATE_TABLE,new G(Ps.createTable)),e.set(H.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new G(Ps.createAttribute)),e.set(H.OPERATIONS_ENUM.DROP_SCHEMA,new G(Ps.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_DATABASE,new G(Ps.dropSchema)),e.set(H.OPERATIONS_ENUM.DROP_TABLE,new G(Ps.dropTable)),e.set(H.OPERATIONS_ENUM.DROP_ATTRIBUTE,new G(Ps.dropAttribute)),e.set(H.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new G(vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_DATABASE,new G(vf.describeSchema)),e.set(H.OPERATIONS_ENUM.DESCRIBE_TABLE,new G(vf.describeTable)),e.set(H.OPERATIONS_ENUM.DESCRIBE_ALL,new G(vf.describeAll)),e.set(H.OPERATIONS_ENUM.DELETE,new G(tl.deleteRecord)),e.set(H.OPERATIONS_ENUM.ADD_USER,new G(el.addUser)),e.set(H.OPERATIONS_ENUM.ALTER_USER,new G(el.alterUser)),e.set(H.OPERATIONS_ENUM.DROP_USER,new G(el.dropUser)),e.set(H.OPERATIONS_ENUM.LIST_USERS,new G(el.listUsersExternal)),e.set(H.OPERATIONS_ENUM.LIST_ROLES,new G(Bf.listRoles)),e.set(H.OPERATIONS_ENUM.ADD_ROLE,new G(Bf.addRole)),e.set(H.OPERATIONS_ENUM.ALTER_ROLE,new G(Bf.alterRole)),e.set(H.OPERATIONS_ENUM.DROP_ROLE,new G(Bf.dropRole)),e.set(H.OPERATIONS_ENUM.USER_INFO,new G(el.userInfo)),e.set(H.OPERATIONS_ENUM.READ_LOG,new G(see)),e.set(H.OPERATIONS_ENUM.ADD_NODE,new G(iee)),e.set(H.OPERATIONS_ENUM.UPDATE_NODE,new G(vv)),e.set(H.OPERATIONS_ENUM.SET_NODE_REPLICATION,new G(vv)),e.set(H.OPERATIONS_ENUM.REMOVE_NODE,new G(oee)),e.set(H.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new G(aee)),e.set(H.OPERATIONS_ENUM.PURGE_STREAM,new G(cee)),e.set(H.OPERATIONS_ENUM.SET_CONFIGURATION,new G(kv.setConfiguration)),e.set(H.OPERATIONS_ENUM.CLUSTER_STATUS,new G(uee.clusterStatus)),e.set(H.OPERATIONS_ENUM.CLUSTER_NETWORK,new G(lee)),e.set(H.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new G(Dg.setRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new G(Dg.getRoutes)),e.set(H.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new G(Dg.deleteRoutes)),e.set(H.OPERATIONS_ENUM.EXPORT_TO_S3,new G(as,Bv.export_to_s3)),e.set(H.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new G(as,tl.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new G(as,tl.deleteFilesBefore)),e.set(H.OPERATIONS_ENUM.EXPORT_LOCAL,new G(as,Bv.export_local)),e.set(H.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new G(Pg.handleGetJobsByStartDate)),e.set(H.OPERATIONS_ENUM.GET_JOB,new G(Pg.handleGetJob)),e.set(H.OPERATIONS_ENUM.GET_FINGERPRINT,new G(Mg.getFingerprint)),e.set(H.OPERATIONS_ENUM.SET_LICENSE,new G(Mg.setLicense)),e.set(H.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new G(Mg.getRegistrationInfo)),e.set(H.OPERATIONS_ENUM.RESTART,new G(xv.restart)),e.set(H.OPERATIONS_ENUM.RESTART_SERVICE,new G(xv.restartService)),e.set(H.OPERATIONS_ENUM.CATCHUP,new G(bee)),e.set(H.OPERATIONS_ENUM.SYSTEM_INFORMATION,new G(fee.systemInformation)),e.set(H.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new G(as,tl.deleteAuditLogsBefore)),e.set(H.OPERATIONS_ENUM.READ_AUDIT_LOG,new G(nee)),e.set(H.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new G(qv.createTokens)),e.set(H.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new G(qv.refreshOperationToken)),e.set(H.OPERATIONS_ENUM.LOGIN,new G(Gv.login)),e.set(H.OPERATIONS_ENUM.LOGOUT,new G(Gv.logout)),e.set(H.OPERATIONS_ENUM.GET_CONFIGURATION,new G(kv.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(Vv.readTransactionLog)),e.set(H.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new G(as,Vv.deleteTransactionLogsBefore)),e.set(H.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new G($v.installModules)),e.set(H.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new G($v.auditModules)),e.set(H.OPERATIONS_ENUM.GET_BACKUP,new G(Ps.getBackup)),e}a(Nee,"initializeOperationFunctionMap")});var Ff=T((EEe,e0)=>{"use strict";var Hg=M(),yee=J(),sl=V(),{handleHDBError:xg,hdb_errors:xf}=Z(),{isMainThread:Iee}=require("worker_threads"),{Readable:wee}=require("stream"),jv=require("os"),Cee=require("util"),Lee=NS(),Dee=Cee.promisify(Lee.authorize),Zv=Xv(),{createGzip:Mee,constants:Uee}=require("zlib");function Pee(e){let t=`Found an uncaught exception with message: ${e.message}. ${jv.EOL}Stack: ${e.stack} ${jv.EOL}Terminating ${Iee?"HDB":"thread"}.`;console.error(t),sl.fatal(t),process.exit(1)}a(Pee,"handleServerUncaughtException");function vee(e,t,r){if(sl[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:xf.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(vee,"serverErrorHandler");function Bee(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=xg(new Error,"Invalid JSON.",xf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(yee.isEmpty(e.body.operation)){let n=xg(new Error,"Request body must include an 'operation' property.",xf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Bee,"reqBodyValidationHandler");function Hee(e,t,r){let n;e.body.operation!==Hg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Hg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Hg.OPERATIONS_ENUM.LOGOUT?Dee(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{sl.warn(s),sl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(xg(s,i,xf.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(Hee,"authHandler");async function xee(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Zv.chooseOperation(e.body);let s=await Zv.processLocalTransaction(e,n);if(s instanceof wee&&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(Mee({level:Uee.Z_BEST_SPEED})))}return s}catch(s){throw sl.error(s),s}}a(xee,"handlePostRequest");e0.exports={authHandler:Hee,handlePostRequest:xee,handleServerUncaughtException:Pee,serverErrorHandler:vee,reqBodyValidationHandler:Bee}});var s0=T((mEe,n0)=>{"use strict";var Fee=require("fastify-plugin"),{handlePostRequest:t0,authHandler:qee,reqBodyValidationHandler:Gee}=Ff();async function kee(e){e.decorate("hdbCore",{preValidation:[Gee,qee],request:t=>r0(t0(t,response)),requestWithoutAuthentication:(t,r)=>r0(t0(t,r,!0))})}a(kee,"hdbCore");async function r0(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(r0,"convertAsyncIterators");n0.exports=Fee(kee)});var a0=T((TEe,o0)=>{"use strict";var SEe=require("fs"),Fg=j();Fg.initSync();var{CONFIG_PARAMS:i0}=M(),Vee=1024*1024*1024;function $ee(e){let t=Fg.get(i0.HTTP_TIMEOUT),r=Fg.get(i0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Vee,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a($ee,"getServerOptions");o0.exports=$ee});var l0=T((REe,u0)=>{"use strict";var qg=j();qg.initSync();var{CONFIG_PARAMS:c0}=M();function Yee(){let e=qg.get(c0.HTTP_CORSACCESSLIST),t=qg.get(c0.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(Yee,"getCORSOptions");u0.exports=Yee});var f0=T((OEe,d0)=>{"use strict";var _0=j();_0.initSync();var Kee=M();function Wee(){return _0.get(Kee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Wee,"getHeaderTimeoutConfig");d0.exports=Wee});var kg={};Ve(kg,{customFunctionsServer:()=>Jee,ready:()=>w0,start:()=>zee});function zee(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){vs||(vs=I0(t),lt.http((await vs).server));let o=await vs,c=(0,Gg.dirname)(s),u=(0,Gg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!E0.has(c)){E0.add(c);try{o.register(jee(c,u))}catch(_){if(_.message==="Root plugin has already booted")qe.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:w0}}async function Jee(){try{qe.info("In Custom Functions Fastify server"+process.cwd()),qe.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),qe.debug(`Custom Functions server process ${process.pid} starting up.`),await Xee();let e=g0.get(R0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=vs=await I0(e)}catch(r){throw qe.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw qe.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){qe.error(`Custom Functions ${process.pid} Error: ${e}`),qe.error(e),process.exit(1)}}async function Xee(){try{qe.info("Custom Functions starting configuration."),await A0.setUsersToGlobal(),qe.info("Custom Functions completed configuration.")}catch(e){qe.error(e)}}function jee(e,t){return async function(r){try{qe.info("Custom Functions starting buildRoutes"),qe.trace("Loading fastify routes folder "+e),(0,h0.existsSync)(e)&&r.register(T0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:qe.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?qe.error(s.message):s&&qe.error(s),o()})}catch(n){qe.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function I0(e){qe.info("Custom Functions starting buildServer.");let t=(0,O0.default)(e),r=(0,m0.default)(t);r.server.headersTimeout=(0,N0.default)(),r.setErrorHandler(y0.serverErrorHandler);let n=(0,b0.default)();return n&&r.register(p0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(S0.default),await r.register(Qee),await r.after(),ig(r),qe.info("Custom Functions completed buildServer."),r}function w0(){if(vs)return vs.then?vs.then(e=>e.ready()):vs.ready()}var Gg,h0,m0,p0,S0,T0,g0,R0,qe,Qee,A0,O0,b0,N0,y0,vs,E0,C0=Ae(()=>{Gg=require("path"),h0=require("fs"),m0=v(require("fastify")),p0=v(require("@fastify/cors")),S0=v(lg()),T0=v(require("@fastify/autoload")),g0=v(j()),R0=v(M()),qe=v(V()),Qee=v(s0()),A0=v(rn()),O0=v(a0()),b0=v(l0()),N0=v(f0()),y0=v(Ff());ma();nr();E0=new Set;a(zee,"start");a(Jee,"customFunctionsServer");a(Xee,"setUp");a(jee,"buildRouteFolder");a(I0,"buildServer");a(w0,"ready")});var Vg={};Ve(Vg,{start:()=>Zee});function Zee(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,P0.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){D0||(D0=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=L0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,M0.default)(s,(0,U0.realpathSync)(o))}}return i(s)},{runFirst:!0})),L0.set(r,n)}}}var M0,U0,P0,L0,D0,v0=Ae(()=>{M0=v(require("send")),U0=require("fs"),P0=v(require("serve-static")),L0=new Map;a(Zee,"start")});function rte(e,t=1,r){if($g++,(0,Ao.startWorker)("server/threads/threadServer.js",{name:kf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===kf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});tte.push(s),await s,La.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Gf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=La.indexOf(n);o>-1&&La.splice(o,1)}if(a(i,"removeWorker"),Da){let o=Da;Da=[];for(let c of o)F0[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Yg?Yg=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ao.shutdownWorkers)(),$g=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function q0(e=0,t){if(typeof e=="string")try{(0,Vf.existsSync)(e)&&(0,Vf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=nte:r=ste(t):r=Wg;let n=(0,Ma.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=F0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Yg=!0,r(o,(c,u)=>{if(!c){if(B0){let l=o._socket||new Ma.Socket({handle:o,writable:!0,readable:!0});B0.deliverSocket(l,e,u),l.resume()}else $g>0?(Da.length===0&&setTimeout(()=>{Da.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,Da.push(o)):(console.log("start up a dynamic thread to handle request"),rte(0));xr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ma.Socket({handle:o,writable:!0,readable:!0});cte(l,c,e)}xr(!0,"socket-routed")})};let s=jc();Kg.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 Wg(e,t){let r,n=0;for(let s of La){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=qf)return qf=i,t(r);n=i}qf=0,t(r)}function nte(e,t){let r={};e.getpeername(r);let n=r.address,s=Ua.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);Wg(e,o=>{Ua.set(n,{worker:o,lastUsed:i}),t(o)})}function ste(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ma.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ua.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);Wg(n,d=>{Ua.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function ote(){qf=0;for(let e of La)e.expectedIdle=e.recentELU.idle+ite,e.requests=1;La.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function cte(e,t,r){let n=ate++;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(),Gf.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")),Gf.delete(n)),s.event=="destroy"&&(e.destroy(),Gf.delete(n))})}var Ao,Ma,kf,Kg,Vf,x0,ete,La,Da,F0,B0,$g,tte,Yg,qf,H0,Ua,ite,Gf,ate,G0=Ae(()=>{Ao=v(tt()),Ma=require("net"),kf=v(M()),Kg=v(V()),Vf=require("fs");Ns();x0=require("worker_threads"),ete=v($i()),La=[],Da=[],F0=[],$g=0,tte=[];x0.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(rte,"startHTTPWorker");a(q0,"startSocketServer");qf=0;a(Wg,"findMostIdleWorker");H0=36e5,Ua=new Map;a(nte,"findByRemoteAddressAffinity");a(ste,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ua)r.lastUsed+H0<e&&Ua.delete(t)},H0).unref();ite=1e3;a(ote,"updateWorkerIdleness");(0,Ao.setMonitorListener)(ote);Gf=new Map,ate=1;a(cte,"proxySocket")});var Xg={};Ve(Xg,{Request:()=>Qg,createReuseportFd:()=>$f});var k0,Qg,zg,Jg,$f,Yf=Ae(()=>{k0=require("os"),Qg=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 Jg(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 zg(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},zg=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},Jg=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,k0.platform)()!="win32"&&($f=require("node-unix-socket").createReuseportFd)});var K0=T((xEe,Y0)=>{"use strict";var ute=require("cluster"),Oo=j();Oo.initSync();var $0=M(),UEe=require("util"),Bs=V(),PEe=require("fs"),lte=require("fastify"),vEe=jc(),_te=require("@fastify/cors"),dte=require("@fastify/compress"),fte=require("@fastify/static"),Ete=lg(),hte=require("path"),{PACKAGE_ROOT:mte}=M(),pte=Xs(),Ste=J(),Tte=rn(),gte=$i(),{server:Rte}=(nr(),ee(Ci)),{node_request_key:BEe}=(Yf(),ee(Xg)),{authHandler:Ate,handlePostRequest:Ote,serverErrorHandler:bte,reqBodyValidationHandler:Nte}=Ff(),HEe=require("net"),{registerContentHandlers:yte}=(ma(),ee(PP)),Ite=6e4,wte=1024*1024*1024,Cte="TRUE",{CONFIG_PARAMS:il}=$0,Pa;Y0.exports={hdbServer:V0,start:V0};async function V0(e){try{Bs.info("In Fastify server"+process.cwd()),Bs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=ute.isMaster,await Lte();let t=e.securePort>0;Pa=Dte(t),await Pa.ready(),e||(e={}),e.isOperationsServer=!0;try{Rte.http(Pa.server,e),Pa.server.closeIdleConnections||await Pa.listen({port:0,host:"::"})}catch(r){throw Pa.close(),Bs.error(r),Bs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bs.fatal(t),process.exit(1)}}a(V0,"operationsServer");async function Lte(){Bs.trace("Configuring HarperDB process."),pte.setSchemaDataToGlobal(),await Tte.setUsersToGlobal(),await gte.getLicense()}a(Lte,"setUp");function Dte(e){Bs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Mte(e),r=lte(t);r.server.headersTimeout=Pte(),r.setErrorHandler(bte);let n=Ute();n&&r.register(_te,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Ete),r.register(dte),r.register(fte,{root:hte.join(mte,"studio/build-local")}),yte(r);let s=Oo.get($0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Ste.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Nte,Ate],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Ote(i,o)}),r.get("/health",()=>"HarperDB is running."),Bs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Dte,"buildServer");function Mte(e){let t=Oo.get(il.OPERATIONSAPI_NETWORK_TIMEOUT),r=Oo.get(il.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:wte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Mte,"getServerOptions");function Ute(){let e=Oo.get(il.OPERATIONSAPI_NETWORK_CORS),t=Oo.get(il.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Cte)&&(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(Ute,"getCORSOpts");function Pte(){return Oo.get(il.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ite}a(Pte,"getHeaderTimeoutConfig")});var rB=T((VEe,tB)=>{"use strict";var{decode:vte}=require("msgpackr"),{isMainThread:qEe,parentPort:Bte,threadId:GEe}=require("worker_threads"),Zg=It(),Hs=nt(),Hte=M(),pi=V(),W0=j(),z0=M();tt();var xte=gs(),{recordAction:Fte,recordActionBinary:qte}=(Ns(),ee(ru)),{publishToStream:Gte}=Zg,{ConsumerEvents:kte}=require("nats"),kEe={durable:Hs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Hs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Vte,$te,Yte,J0,X0;tB.exports={initialize:eR,workQueueListener:eB,setSubscription:Kte,setIgnoreOrigin:Qte,getDatabaseSubscriptions:Wte};async function eR(){X0=!0,pi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Zg.getNATSReferences();Vte=e,$te=e.info.server_name,Yte=t,J0=r}a(eR,"initialize");var Wf=new Map;function Kte(e,t,r){let n=Wf.get(e);n||Wf.set(e,n=new Map),n.set(t,r),X0||eR().then(eB)}a(Kte,"setSubscription");function Wte(){return Wf}a(Wte,"getDatabaseSubscriptions");var j0;function Qte(e){j0=e}a(Qte,"setIgnoreOrigin");var Z0=100,Q0=new Array(Z0),Kf=0;async function eB(){let e=await J0.consumers.get(Hs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Hs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Bte?.on("message",async n=>{let{type:s}=n;s===z0.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===kte.HeartbeatsMissed){let s=n.data;pi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(pi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await Q0[Kf],Q0[Kf]=zte(n).catch(s=>{pi.error(s)}),++Kf>=Z0&&(Kf=0)}catch(n){pi.error("Error consuming clustering ingest, restarting consumer",n)}Zg.clearClientCache(),await eR()}}a(eB,"workQueueListener");async function zte(e){let t=vte(e.data);Fte(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=W0.get(Hte.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Hs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Hs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Hs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!j0),qte(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Hs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;pi.trace("processing message:",o,c,_,(l?"records: "+l.map(w=>w?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),pi.trace(`messageProcessor nats msg id: ${e.headers.get(Hs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Wf.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:jg(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:jg(o),value:B,expiresAt:E,id:d?.[K],table:_}));for(;u;)w.push({type:jg(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})}W0.get(z0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Gte(e.subject.split(".").slice(0,-1).join("."),xte.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){pi.error(o)}e.ack()}a(zte,"messageProcessor");function jg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jg,"convertOperation")});var oR={};Ve(oR,{disableNATS:()=>Xte,publishToStream:()=>jf,setNATSReplicator:()=>tR,setPublishToStream:()=>jte,setSubscription:()=>iR,start:()=>Jte});function Jte(){zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ere()}function Xte(e=!0){aB=e}function jte(e,t){jf=e,iR=t}function ere(){if(aB||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];tR(s,r,i)}}aR((r,n)=>{tR(r.tableName,r.databaseName,r),n&&uB(r)}),!nB&&(nB=!0)}function tR(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 Ft{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Le],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){uB(i)}static subscribe(){let i=new Nn;return iR(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 n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new Qf(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=cB;return i}a(n,"getNATSTransaction")}function uB(e){let t=zf.default.get(Jf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);jf(`${nR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,sR.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var sB,nR,sR,iB,oB,zf,Jf,Xf,aB,jf,iR,Zte,cB,nB,Qf,rR,lB=Ae(()=>{ge();yn();sB=v(It()),nR=v(nt()),sR=v(gs());fc();iB=v(rB()),oB=v(Dr()),zf=v(j()),Jf=v(M()),Xf=v(V());a(Jte,"start");a(Xte,"disableNATS");jf=sB.publishToStream,iR=iB.setSubscription;a(jte,"setPublishToStream");Zte=2;a(ere,"assignReplicationSource");a(tR,"setNATSReplicator");a(uB,"publishSchema");Qf=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=zf.default.get(Jf.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||(Xf.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(jf(`${nR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,sR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw Xf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},rR=class extends Qf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,oB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};cB=new rR});var bB=T(No=>{"use strict";var{isMainThread:tre,parentPort:cl,threadId:ol}=require("worker_threads"),{Socket:rre,createServer:nre}=require("net"),{createServer:sre,IncomingMessage:ire}=require("http"),{createServer:ore}=require("https"),{readFileSync:va,unlinkSync:_B,existsSync:are}=require("fs"),xn=V(),Ge=j(),Rr=M(),{server:tE}=(nr(),ee(Ci)),{WebSocketServer:cre}=require("ws"),{createServer:ure}=require("tls"),{getTicketKeys:lre,restartNumber:_re,getWorkerIndex:dB}=tt(),{Headers:pB}=(kd(),ee(iU)),{recordAction:al,recordActionBinary:dre}=(Ns(),ee(ru)),{Request:SB,createReuseportFd:fB}=(Yf(),ee(Xg)),{checkMemoryLimit:fre}=$i(),TB=require("tls"),EB=TB.createSecureContext;TB.createSecureContext=function(e){if(!e.cert||!e.key)return EB(e);let t={...e};delete t.key,delete t.cert;let r=EB(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){_re<=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:JEe,CONFIG_PARAMS:Ere}=Rr;Ge.initSync();var hre=Ge.get(Ere.HTTP_SESSIONAFFINITY),cs={};No.registerServer=dR;No.httpServer=fR;No.deliverSocket=_R;No.startServers=gB;No.when_components_loaded=null;tE.http=fR;tE.request=Tre;tE.socket=gre;tE.ws=Rre;var cR=[],Zf=[],mre,bo={},eE={},pre=[],uR=[];function gB(){return No.when_components_loaded=ER().loadRootComponents(!0).then(()=>{cl?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)_R(n,r,s);else if(t.requestId)Sre(t);else if(t.type===Rr.ITC_EVENT_TYPES.SHUTDOWN){xn.trace("received shutdown request",ol);for(let i in cs){let o=cs[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),xn.info("Closed all http connections",i,ol)},4e3).unref()),o.close?.(()=>{if(Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&dB()==0)try{_B(Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,ol),o.cantCleanupProperly||xn.warn("Had to forcefully exit the thread",ol),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(fB&&!hre)for(let t in cs){let r=cs[t];if(isNaN(t)&&dB()==0){are(t)&&_B(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=fB(+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,ol)}).on("error",i)}))}Promise.all(e).then(()=>{cl?.postMessage({type:Rr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(gB,"startServers");tre||gB();function _R(e,t,r){let n=e?.read?e:new rre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=cs[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=cs[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(_R,"deliverSocket");var hB=new Map;function Sre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=hB.get(s),r){case"connection":i=_R(void 0,t),hB.set(s,i),i.write=(c,u,_)=>(cl.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(cl.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),cl.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(Sre,"proxyRequest");function dR(e,t,r=!0){!+t&&t!==Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT),10));let n=cs[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",mB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else cs[t]=e;e.on("unhandled",mB)}a(dR,"registerServer");function RB(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(Rr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.HTTP_PORT),secure:Ge.get(Rr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ge.get(Rr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ge.get(Rr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(RB,"getPorts");function fR(e,t){for(let{port:r,secure:n}of RB(t))AB(r,n,t?.isOperationsServer),typeof e=="function"?uR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,dR(e,r,!1)),eE[r]=lR(uR,r),mre=lR(pre,r)}a(fR,"httpServer");function AB(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:va(c),ciphers:Ge.get("tls_ciphers"),cert:va(u),ca:_&&va(_),requestCert:!!i,ticketKeys:lre()})}let o=fre();bo[e]=(t?ore:sre)(s,async(c,u)=>{try{let l=performance.now(),d=new SB(c,u);r&&(d.isOperationsServer=!0);let f=await eE[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=OB(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 pB;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(al(p,"duration",I,w,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),dre(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",()=>{al(performance.now()-h,"transfer",I,w),al(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&&al(performance.now()-c._parent.startTime,"tls-handshake",e),al(c.isSessionReused(),"tls-reused",e)}),bo[e].isSecure=!0),dR(bo[e],e)}return bo[e]}a(AB,"getHTTPServer");function lR(e,t){let r=OB;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(lR,"makeCallbackChain");function OB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new pB}}a(OB,"unhandled");function Tre(e,t){fR(e,{requestOnly:!0,...t})}a(Tre,"onRequest");function gre(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=ure({ciphers:Ge.get("tls_ciphers"),key:va(n),cert:va(s),ca:i&&va(i),requestCert:!!t.mtls},e),cs[t.securePort]=r}return t.port&&(r=nre(e),cs[t.port]=r),r}a(gre,"onSocket");Object.defineProperty(ire.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 Rre(e,t){for(let{port:r,secure:n}of RB(t)){Zf[r]||(Zf[r]=new cre({server:AB(r,n)}),Zf[r].on("connection",async(i,o)=>{try{let c=new SB(o);c.isWebSocket=!0;let u=eE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<cR.length;l++){let d=cR[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)}}),Zf[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";cR.push({listener:e,protocol:s}),eE[r]=lR(uR,r)}}a(Rre,"onWebSocket");function mB(e,t){t.writeHead(404),t.end(`Not found
|
|
27
|
-
`)}a(mB,"defaultNotFound")});async function wB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await hR.getResource(e,{});s=new SR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await hR.get(e);i&&i.delete()}s=new nE(e,t)}return n&&(n.id=e,n.user={username:t?.username},ul.put(n)),s}function mR(){return rE++,rE>65500&&(rE=1),rE}function pR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=li.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 NB,yo,yB,IB,hR,ul,rE,nE,SR,CB=Ae(()=>{ge();Lu();NB=v(Dr()),yo=v(V());Ji();yB=v(tt()),IB=v(bB());nr();hR=_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"}]}}]}),ul=_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,yB.getWorkerIndex)()===0&&(async()=>{await IB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of ul.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await lt.getUser(r.user.username)),Qe(r,()=>{try{pR(r,t)}finally{ul.delete(e.id,r)}})}})();a(wB,"getSession");rE=1;a(mR,"getNextMessageId");nE=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=li.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 F=0;F<I.length;F++)if(I[F].indexOf("+")>-1)if(I[F]==="+")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(F=>{let P=F.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=mR());let B=I.id;Array.isArray(B)&&(B=ha(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=mR();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,pR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Qe(r,async()=>{if(!t){let n=await ul.get(this.sessionId,r);n?.doesExist()&&await pR(n,n.data,r)}await ul.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(pR,"publish");SR=class extends nE{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=mR(),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,NB.getNextMonotonicTime)()),(0,yo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hR.put(this.sessionRecord)),t.qos}}});var TR={};Ve(TR,{bypassAuth:()=>Are,start:()=>Ore});function Are(){PB=!0}function Ore({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}=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||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,Ar.error)(E)}else return(0,Ar.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!l&&PB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,UB.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:s,mtls:u})),c}function MB(e,t,r,n,s){DB||(DB=!0,tu(d=>{sE>0&&d.push({metric:"mqtt-connections",connections:sE,byThread:!0})}));let i;sE++;let o,c={protocolVersion:4},u=(0,oE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){sE--,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,iE.get)(us.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&LB.notify({username:n.username,status:us.AUTH_AUDIT_STATUS.SUCCESS,type:us.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iE.get)(us.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&LB.error({username:n.username,status:us.AUTH_AUDIT_STATUS.FAILURE,type:us.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=wB({user:n,...d}),o=await o}catch(w){return(0,Ar.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,F)=>{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:F.qos},Q)}catch(P){(0,Ar.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,Ar.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,Ar.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,Ar.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,oE.generate)(h,c);t(S),xr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return di(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var oE,UB,iE,us,Ar,LB,PB,DB,sE,vB=Ae(()=>{oE=require("mqtt-packet");CB();UB=v(rn());ma();Ns();nr();iE=v(j()),us=v(M()),Ar=v(V()),LB=(0,Ar.loggerWithTag)("auth-event"),PB=(0,iE.get)(us.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Are,"bypassAuth");a(Ore,"start");sE=0;a(MB,"onSocket")});var ef={};Ve(ef,{component_errors:()=>Ha,loadComponent:()=>aE,loadComponentDirectories:()=>$B,setErrorReporter:()=>Ire});function $B(e,t){t&&(RR=t),e&&(AR=e);let r=[];if((0,Fn.existsSync)(gR)){let s=(0,Fn.readdirSync)(gR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,At.join)(gR,o);r.push(aE(c,RR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(aE(n,RR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{VB=!0})}function Ire(e){_l=e}async function aE(e,t,r,n,s,i){if(!HB.has(e)){HB.set(e,!0),s&&(AR=s);try{let o;n&&(Ha=new Map);let c=(0,At.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Fn.existsSync)(c)?o=n?(0,kB.getConfigObj)():(0,xB.parseDocument)((0,Fn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=OR;let u=[],_=n;for(let l in o){let d=o[l];if(Ha.set(n?l:(0,At.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,w;for(;!(0,Fn.existsSync)(w=(0,At.join)(I,"node_modules",l));)if(I=(0,At.dirname)(I),I.length<(0,GB.getHdbBasePath)().length){w=null;break}if(w)f=await aE(w,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=yre[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(Ba.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&&!BB.includes(I)){let w=bR.get(NR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);w&&ll.default.warn("Session affinity is not recommended and may cause memory leaks"),(w||!$f)&&(BB.push(I),q0(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),AR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,qB.handleHDBError)("Can not reference parent directories");let I=(0,At.join)(e,d.files).replace(/\\/g,"/"),w=I.indexOf("/*");if(w>-1&&d.files!==OR[l]?.files&&!(0,Fn.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,At.basename)(e),K=d.path||"/";K=K.startsWith("/")?K:K.startsWith("./")?"/"+B+K.slice(2):K==="."?"/"+B:"/"+B+"/"+K;let F,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,At.join)(e,z)}else(Q=I.indexOf("/*"))>-1&&(P=I.slice(0,Q+1),F=(0,At.relative)(e,P));let Y=!1;if(Ba.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,FB.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:re,dirent:Ie}=z;_=!0;let ne=(0,At.relative)(e,re).replace(/\\/g,"/");if(F)if(ne.startsWith(F))ne=ne.slice(F.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 Nre(re);Ba.isMainThread&&await f.setupFile?.(de,ct,re,t),t.isWorker&&await f.handleFile?.(de,ct,re,t)}else Ba.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}`,_l?.(de),((0,xa.getWorkerIndex)()===0?console:ll.default).error(de),t.set(d.path||"/",new dl(de)),Ha.set(n?l:(0,At.basename)(e),de.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,At.basename)(e)}' due to: ${h.message}`,_l?.(h),((0,xa.getWorkerIndex)()===0?console:ll.default).error(h),t.set(d.path||"/",new dl(h),null,!0),Ha.set(n?l:(0,At.basename)(e),h.message)}}if(Ba.isMainThread&&!VB&&i&&(0,xa.watchDir)(e,async()=>$B()),o.extensionModule)return await jl((0,At.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;_l?.(new Error(l)),((0,xa.getWorkerIndex)()===0?console:ll.default).error(l),Ha.set((0,At.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,_l?.(o),t.set("",new dl(o))}}}var Fn,At,Ba,xB,bR,NR,FB,xa,ll,qB,GB,bre,kB,Nre,gR,AR,VB,RR,Ha,yre,OR,BB,HB,_l,dl,tf=Ae(()=>{Fn=require("fs"),At=require("path"),Ba=require("worker_threads"),xB=require("yaml"),bR=v(j()),NR=v(M());GO();YO();KO();GP();C0();v0();FB=v(require("fast-glob")),xa=v(tt()),ll=v(V());Sh();nr();qB=v(Z());yn();ge();G0();GB=v(j()),bre=v(K0());Kd();lB();vB();kB=v(Lr());Yf();({readFile:Nre}=Fn.promises),gR=bR.get(NR.CONFIG_PARAMS.COMPONENTSROOT),AR=new Map,Ha=new Map;a($B,"loadComponentDirectories");yre={REST:pf,rest:pf,graphqlSchema:ph,jsResource:gh,fastifyRoutes:kg,login:Ah,static:Vg,operationsApi:bre,customFunctions:{},http:{},clustering:oR,authentication:Du,mqtt:TR},OR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(OR,"static",{value:{files:"web/**"}});BB=[],HB=new Map;a(Ire,"setErrorReporter");a(aE,"loadComponent");dl=class extends Ft{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 ER=T((Ahe,KB)=>{var{isMainThread:YB}=require("worker_threads"),{getTables:wre}=(ge(),ee(xe)),{loadComponentDirectories:Cre,loadComponent:Lre}=(tf(),ee(ef)),{resetResources:Dre}=(Lu(),ee(sU)),Mre=MT(),Ure=Lr(),{dirname:Pre}=require("path"),{getConnection:vre}=It(),Bre=j(),Hre=M(),yR=new Map;async function xre(e=!1){!YB&&Bre.get(Hre.CONFIG_PARAMS.CLUSTERING_ENABLED)&&vre();try{YB&&await Mre()}catch(n){console.error(n)}let t=Dre();wre(),t.isWorker=e,await Lre(Pre(Ure.getConfigFilePath()),t,"hdb",!0,yR),await Cre(yR,t);let r=[];for(let[n]of yR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(xre,"loadRootComponents");KB.exports.loadRootComponents=xre});var tt=T((bhe,Ti)=>{"use strict";var{Worker:Fre,MessageChannel:qre,parentPort:ls,isMainThread:DR,threadId:Gre,workerData:xs}=require("worker_threads"),{PACKAGE_ROOT:kre}=M(),{join:JB,isAbsolute:Vre,extname:$re}=require("path"),{server:XB}=(nr(),ee(Ci)),{watch:Yre,readdir:Kre}=require("fs/promises"),{totalmem:WB}=require("os"),fl=M(),jB=j(),Fs=V(),{randomBytes:Wre}=require("crypto"),{_assignPackageExport:Qre}=require("../../index"),zre=M(),QB=1024*1024,Si=[],fn=[],Jre=50,MR=1e4,Xre="restart",ZB="request_thread_info",eH="resource_report",tH="thread_info",rH="added-port",jre="ack",IR;Qre("threads",fn);Ti.exports={startWorker:wR,restartWorkers:PR,shutdownWorkers:nne,workers:Si,setMonitorListener:_ne,onMessageFromWorkers:sne,onMessageByType:cH,broadcast:one,broadcastWithAcknowledgement:cne,setChildListenerByType:rne,getWorkerIndex:nH,getWorkerCount:sH,getTicketKeys:iH,setMainIsWorker:ene,setTerminateTimeout:Zre,restartNumber:xs?.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 UR;function Zre(e){MR=e}a(Zre,"setTerminateTimeout");function nH(){return xs?xs.workerIndex:UR?0:void 0}a(nH,"getWorkerIndex");function sH(){return xs?xs.workerCount:UR?1:void 0}a(sH,"getWorkerCount");function ene(e){UR=e}a(ene,"setMainIsWorker");var cE;function iH(){return cE||(cE=DR?Wre(48):xs.ticketKeys,cE)}a(iH,"getTicketKeys");Object.defineProperty(XB,"workerIndex",{get(){return nH()}});Object.defineProperty(XB,"workerCount",{get(){return sH()}});var oH={[ZB](e,t){une(t)},[eH](e,t){lne(t,e)}};function wR(e,t={}){let r=process.constrainedMemory?.()||WB();r=Math.min(r,WB(),2e4*QB);let n=jB.get(fl.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/QB/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of fn){let _=new qre;_.existingPort=u,i.push(_),o.push(_.port2)}$re(e)||(e+=".js");let c=new Fre(Vre(e)?e:JB(kre,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:Ti.exports.restartNumber,ticketKeys:iH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:rH,port:u,threadId:c.threadId},[u]);return lE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>wR(e,t),c.on("error",u=>{console.error("Worker error:",u),Fs.error("Worker error:",u)}),c.on("exit",u=>{Si.splice(Si.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Jre?(t.unexpectedRestarts=c.unexpectedRestarts+1,wR(e,t)):Fs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{oH[u.type]?.(u,c)}),Si.push(c),fne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(wR,"startWorker");var tne=[fl.THREAD_TYPES.HTTP];async function PR(e=null,t=2,r=!0){if(DR){if(r){let{loadRootComponents:o}=ER();await o()}Ti.exports.restartNumber++,t<1&&(t=t*Si.length);let n=[],s=[];for(let o of Si.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Fs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ti.exports.restartNumber,type:fl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=tne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),MR*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===zre.ITC_EVENT_TYPES.CHILD_STARTED&&(Fs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");Fs.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}=qd();r&&(e==="http"||!e)&&jB.get(fl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ls.postMessage({type:Xre,workerType:e})}a(PR,"restartWorkers");function rne(e,t){oH[e]=t}a(rne,"setChildListenerByType");function nne(e){return PR(e,1/0,!1)}a(nne,"shutdownWorkers");var aH=[];function sne(e){aH.push(e)}a(sne,"onMessageFromWorkers");var CR=new Map;function cH(e,t){let r=CR.get(e);r||CR.set(e,r=[]),r.push(t)}a(cH,"onMessageByType");var ine=10;async function one(e){let t=0;for(let r of fn)try{r.postMessage(e),t++>ine&&(t=0,await new Promise(setImmediate))}catch(n){Fs.error("Unable to send message to worker",n)}}a(one,"broadcast");var uE=new Map,ane=1;function cne(e){return new Promise(t=>{let r=0;for(let n of fn)try{let s=ane++,i=a(()=>{uE.delete(s),--r===0&&t(),n!==ls&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,uE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of uE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Fs.error("Unable to send message to worker",s)}r===0&&t()})}a(cne,"broadcastWithAcknowledgement");function une(e){e.postMessage({type:tH,workers:uH()})}a(une,"sendThreadInfo");function uH(){let e=Date.now();return Si.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(uH,"getChildWorkerInfo");function lne(e,t){e.resources=t,e.resources.updated=Date.now()}a(lne,"recordResourceReport");var LR;function _ne(e){LR=e}a(_ne,"setMonitorListener");var dne=1e3,zB=!1;function fne(){zB||(zB=!0,setInterval(()=>{for(let e of Si){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}LR&&LR()},dne).unref())}a(fne,"startMonitoring");var Ene=1e3;if(ls){lE(ls);for(let e=0,t=xs.addPorts.length;e<t;e++){let r=xs.addPorts[e];r.threadId=xs.addThreadIds[e],lE(r)}setInterval(()=>{let e=process.memoryUsage();ls.postMessage({type:eH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Ene).unref(),IR=a(()=>new Promise((e,t)=>{ls.on("message",r),ls.postMessage({type:ZB});function r(n){n.type===tH&&(ls.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else IR=uH;Ti.exports.getThreadInfo=IR;function lE(e,t){fn.push(e),e.on("message",r=>{if(r.type===rH)r.port.threadId=r.threadId,lE(r.port);else if(r.type===jre){let n=uE.get(r.id);n&&n()}else{for(let s of aH)s(r,e);let n=CR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Fs.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(lE,"addPort");if(DR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await Kre(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(JB(n,i.name));try{for await(let{filename:i}of Yre(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await PR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ti.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ls.on("message",async e=>{let{type:t}=e;t===fl.ITC_EVENT_TYPES.SHUTDOWN&&(Ti.exports.restartNumber=e.restartNumber,ls.unref(),setTimeout(()=>{Fs.warn("Thread did not voluntarily terminate",Gre),process.exit(0)},MR).unref())})});var vw={};Ve(vw,{AUDIT_STORE_OPTIONS:()=>TH,createAuditEntry:()=>n_,openAuditStore:()=>EE,readAuditEntry:()=>Bt,setAuditRetention:()=>mne,transactionKeyEncoder:()=>SH});function EE(e){let t=e.auditStore=e.openDB(hH.AUDIT_STORE_NAME,TH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=_E){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()-vR})){if((_[0]&15)===xR){let l=Bt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=hne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,vR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,fE.getWorkerIndex)()===(0,fE.getWorkerCount)()-1&&s(_E),t}function mne(e,t=_E){vR=e,_E=t}function n_(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?Fa.setFloat64(0,n):En.set(Hh),u=9),f(0),f(t),d(r),Fa.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,qa.writeKey)(E,En,u);let p=u-h-1;p>127?p>16383?(qR.error("Key or username was too large for audit entry",E),u=h+1,En[h]=0):(En.copyWithin(h+2,h+1,u),Fa.setUint16(h,p|32768),u++):En[h]=p}function f(E){E<128?En[u++]=E:E<16384?(Fa.setUint16(u,E|32768),u+=2):E<1056964608?(Fa.setUint32(u,E|3221225472),u+=4):(En[u]=255,Fa.setUint32(u+1,E),u+=5)}}function Bt(e){try{let t=e.dataView||(e.dataView=new FR(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 EH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?EH(e,l,d):void 0},getValue(f,E,h){if(n&BR||n&HR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&HR&&h)return GR(f.getEntry(this.recordId),h,f)}}}catch{return qR.error("Reading audit entry error",e),{}}}function EH(e,t,r){let n=e.subarray(t,r);return(0,qa.readKey)(n,0,r-t)}var qa,dE,hH,mH,fE,pH,qR,En,Fa,SH,TH,vR,hne,_E,BR,HR,lH,xR,_H,dH,fH,gH,FR,Pi=Ae(()=>{qa=require("ordered-binary"),dE=v(j()),hH=v(ht()),mH=v(M()),fE=v(tt()),pH=v(J());gc();qR=v(V());hE();(0,dE.initSync)();En=Buffer.alloc(1024),Fa=new DataView(En.buffer,En.byteOffset,1024),SH={writeKey(e,t,r){return e===Tc?(t.set(Tc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,qa.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,qa.readKey)(e,t,r)}},TH={encoding:"binary",keyEncoder:SH},vR=(0,pH.convertToMS)((0,dE.get)(mH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,hne=1e3,_E=1e4;a(EE,"openAuditStore");a(mne,"setAuditRetention");BR=16,HR=32,lH=1,xR=2,_H=3,dH=4,fH=5,gH={put:lH|BR,[lH]:"put",delete:xR,[xR]:"delete",message:_H|BR,[_H]:"message",invalidate:dH,[dH]:"invalidate",patch:fH|HR,[fH]:"patch"};a(n_,"createAuditEntry");a(Bt,"readAuditEntry");FR=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(EH,"readKeySafely")});var kR={};Ve(kR,{add:()=>mE,applyReverse:()=>RH,getRecordAtTime:()=>GR,rebuildUpdateBefore:()=>pE});function mE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function pE(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,mE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function RH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=pne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=AH}}function GR(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":RH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===AH&&(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 pne,AH,hE=Ae(()=>{Pi();a(mE,"add");mE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};pne={add:mE};a(pE,"rebuildUpdateBefore");a(RH,"applyReverse");AH={};a(GR,"getRecordAtTime")});function Vr(e){return e[Mt]||(e[Mt]=Object.create(null))}function AE(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}`);Vr(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}`);Vr(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}`);Vr(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}`);Vr(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}`);Vr(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}`);Vr(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}`);Vr(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}`);Vr(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}`);Vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Vr(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}`);Vr(this)[c]=l},"set")}_={get(){let l=this[Mt];if(l&&c in l){let f=l[c];if(f?.__op__){let E=this[Ne]?.[c];return f.update(E)}return f}let d=this[Ne]?.[c];if(d&&typeof d=="object"){let f=OH(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[Ne]?.[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");Vr(this)[o]=c}),i("deleteProperty",function(o){Vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Mt],c;for(let _ in o){c||(c=Object.assign({},this[Ne]));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[Ne])),Object.assign(c,this)),c||this[Ne]}),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 OH(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[Ne]=s}},AE(r,t)),new r(e)):new SE(e);case Array:let n=new gE(e.length);n[Ne]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=OH(o,t?.elements)),n[s]=o}return n;default:return e}}function K_(e){let t=e[Mt],r;for(let s in t){r||(r=Object.assign({},e[Ne]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=K_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ne])),Object.assign(r,e)),r||e[Ne]}function wo(e,t=e[Mt]){let r;if(e[Ne]&&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[Ne]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=kR[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[Ne]||e}function TE(e){let t=e[Ne];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?.[Ne]===s){if(TE(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[Ne]===i){if(TE(s))return!0}else return!0}else return!0}}return!1}var hn,Mt,SE,Io,gE,RE,W_=Ae(()=>{yn();hn=v(Z());hE();Mt=Symbol("own-data");a(Vr,"getChanges");a(AE,"assignTrackedAccessors");a(OH,"trackObject");SE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ne]=t}};AE(SE,{});a(K_,"collapseData");a(wo,"deepFreeze");a(TE,"hasChanges");Io=Symbol.for("has-array-changes"),gE=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()}};gE.prototype.constructor=Array;RE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var ap={};Ve(ap,{CONTEXT:()=>Re,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>mn,RECORD_PROPERTY:()=>Ne,Resource:()=>Ft,snake_case:()=>Tne,transformForSelect:()=>bE});function Tne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function bH(e,t){if(El=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(El=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new $R;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){El=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function $r(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[Le]??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 OE(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!h)throw new OE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Yr(e,t){let r=new IH.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 VR(e,t,r){let n=e[Ne];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 bE(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):VR(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(VR(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(VR(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]=bE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var NH,yH,IH,Re,Le,mn,Ne,Sne,Ft,OE,El,$R,yn=Ae(()=>{NH=require("crypto");fc();yH=require("../../index"),IH=v(Z());W_();Ji();mf();Re=Symbol.for("context"),Le=Symbol.for("primary-key"),mn=Symbol("is-collection"),Ne=Symbol("stored-record"),Sne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ft=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let n=r?.[Re];this[Re]=n!==void 0?n:r||null}static get=$r(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 _=bE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=$r(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):Yr(t,"put")},{hasContent:!0,type:"update"});static patch=$r(function(t,r,n,s){return t.patch?t.patch(s,r):Yr(t,"patch")},{hasContent:!0,type:"update"});static delete=$r(function(t,r,n,s){return t.delete?t.delete(r):Yr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,NH.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):Yr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=$r(function(t,r,n,s){return t.invalidate?t.invalidate(r):Yr(t,"delete")},{hasContent:!1,type:"update"});static post=$r(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=$r(function(t,r,n,s){return t.connect?t.connect(s,r):Yr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=$r(function(t,r,n,s){return t.subscribe?t.subscribe(r):Yr(t,"subscribe")},{type:"read"});static publish=$r(function(t,r,n,s){return t[Le]!=null&&t.update?.(),t.publish?t.publish(s,r):Yr(t,"publish")},{hasContent:!0,type:"create"});static search=$r(function(t,r,n,s){let i=t.search?t.search(r):Yr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=bE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=$r(function(t,r,n,s){return t.search?t.search(s,r):Yr(t,"search")},{hasContent:!0,type:"read"});static copy=$r(function(t,r,n,s){return t.copy?t.copy(s,r):Yr(t,"copy")},{type:"create"});static move=$r(function(t,r,n,s){return t.move?t.move(s,r):Yr(t,"move")},{type:"delete"});post(t){if(this[mn])return this.constructor.create(this[Le],t,this[Re]);Yr(this,"post")}static isCollection(t){return t?.[mn]}static coerceId(t){return t}static parseQuery(t){return hf(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Sne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:bH(t,this),isCollection:El}}let i=bH(t,this);return El?{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(_=>_[Le]===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[Le],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[Le]}getContext(){return this[Re]}};Ft.prototype[Re]=null;(0,yH._assignPackageExport)("Resource",Ft);a(Tne,"snake_case");OE=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(bH,"pathToId");$R=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a($r,"transactional");a(Yr,"missingMethod");a(VR,"selectFromObject");a(bE,"transformForSelect")});function CH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;Ga||((0,NE.onMessageByType)(wH,l=>{LH(l.path)}),Ga=Object.create(null));let o=Ga[s]||(Ga[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=ha(t);let u=new KR(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function LH(e,t){if(!Ga)return;let r=Ga[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=ha(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,YR.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,YR.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 DH(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,NE.broadcast)({type:wH,path:s}),LH(s,!0)})}}var YR,NE,wH,Ga,Khe,KR,MH=Ae(()=>{YR=v(V()),NE=v(tt());fc();Lu();Pi();wH="transaction",Khe=Buffer.alloc(4096);a(CH,"addSubscription");KR=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(LH,"notifyFromTransactionData");a(DH,"listenToCommits")});var Ng={};Ve(Ng,{coerceType:()=>yE,makeTable:()=>CE,setServerUtilities:()=>wne,updateResource:()=>IE});function CE(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=[]),DH(i,u);let S=qh(i,n,u),A=0,I,w,B,K={},F=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,aA,Cl,Vs,cA=!1,kE,yx=i.getRange({start:!1,end:!1}).constructor,Ix=10,wx=6;E&&_A();class Ke extends Ft{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===qn.SYSTEM_SCHEMA_NAME&&(L.table===qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===qn.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,ka);switch(L.type){case"put":return W._writeUpdate(U,!0,ka);case"patch":return W._writeUpdate(U,!1,ka);case"delete":return W._writeDelete(ka);case"publish":return W._writePublish(U,ka);case"invalidate":return W.invalidate(ka);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"}),Rl.signalSchemaChange(new Al.SchemaEventMsg(process.pid,qn.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,Rl.signalUserChange(new Al.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){Qa(m);try{if(R.hasOwnProperty(Ne))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 VE(m,g,{transaction:y},O,L=>{if(L?IE(R,L):R[Ne]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(N?.ensureLoaded){let D=$E(m,L,g,R);if(D)return b?.disregardReadTxn(),R[WR]=!0,zR(D,U=>(IE(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=$E(this[Le],this[Kr],this[Re]);if(m)return this[WR]=!0,zR(m,g=>{this[Kr]=g,this[Ne]=g.value,this[Tl]=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,KE()}static enableAuditing(m=!0){E=m,m&&_A(),Ke.audit=m}static coerceId(m){return m===""?null:yE(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));Rl.signalSchemaChange(new Al.SchemaEventMsg(process.pid,qn.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[Le]===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=Dl(m);if(N?.read){if(N.isSuperUser)return!0;let R=N.attribute_permissions,O=g?.select;if(R?.length>0||cA&&O){if(g||(g={}),O){let b=R?.length>0&&QR(R,"read");g.select=O.map(y=>{let L=y.name||y;if(!b||b[L]){let D=Vs[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&&!Vs[b.attribute_name]).map(b=>b.attribute_name);return g}else return!0}}allowUpdate(m,g){let N=Dl(m);if(N?.update){let R=N.attribute_permissions;if(R?.length>0){let O=QR(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=Dl(m);if(N?.insert){let R=N.attribute_permissions;if(R?.length>0){let O=QR(R,"insert");for(let b in g)if(!O[b])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Dl(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[Ne]={},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[hl]===PH?this.set(m,(+this.getProperty(m)||0)+g):(this[hl]||this.update(),this.set(m,new RE(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[Le];Qa(N),Nr(this[Re]).addWrite({key:N,store:i,invalidated:!0,entry:this[Kr],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[Kr],O,ml,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,pl,null,null,0,null,!0)}return i.ifVersion(N,()=>{Ll(m,g,null)}),E?S(m,null,O,N,pl,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,qH.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[Le];Qa(b);let y=this[Kr];this[hl]=g?PH:Nne;let L={key:b,store:i,entry:y,nodeName:R?.nodeName,validate:D=>{m||(m=this[Mt]),g||m&&TE(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[Kr]=U,g||(this[Ne]=U?.value??null)),this[Mt]=m,this[Tl]=D;let W=U?.value,Se=m;if(this[hl]=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=pE(Se,Ue)}else(ke.type==="put"||ke.type==="delete")&&(Se=null);He=ke.previousLocalTime}}else g?Se=null:Se=pE(Se,W);let le=wo(this,Se);this[Ne]=le;let te;g||(te=m),Ll(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[Ne]?this._writeDelete(m):!1}_writeDelete(m){let g=Nr(this[Re]),N=this[Le];Qa(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),IE(this,b)),!(b?.version>O)&&(Ll(this[Le],L),Je.trace("Write delete entry",N,O),E||h?(S(N,null,this[Kr],O,0,E,this[Re],0,"delete"),E||KE()):i.remove(this[Le]))}}),!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[Le]&&(R=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(R));let O,b={};function y(oe,Ot){let je;switch(Ot){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 "+Ot)}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:Ms(p,Ze);if(Rn){if(je){let Ni=mi(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 $s=0;$s<Rn;$s++){let Mo=Ze[$s];(Mo.comparator==="le"||Mo.comparator==="less_than_equal")&&(Gn.comparator="between",Gn.value=[Gn.value,Mo.value],oe.splice(oe.indexOf(Mo),1))}if(Gn.comparator==="equals"||!Gn.comparator){for(let $s=0;$s<Rn;$s++)if($s!==Ni){let Mo=Ze[$s];oe.splice(oe.indexOf(Mo),1)}break}}}return oe}a(y,"prepareConditions");function L(oe,Ot){if(m.enforceExecutionOrder)return oe;for(let je of oe)je.conditions&&(je.conditions=L(je.conditions,je.operator));return oe.length>1&&Ot!=="or"?(0,FH.sortBy)(oe,ag(Ke)):oe}a(L,"orderConditions");function D(oe,Ot){return Array.isArray(oe)?oe.map(je=>yE(je,Ot)):yE(oe,Ot)}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(Ot=>mi(Ot.attribute)===mi(oe)),!O){if(!Ms(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,Ot){let je=oe[0];if(Ot==="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?uA(Ut,se,g,gn):Ut}}a(Se,"executeConditions");let le=m.reverse===!0;function te(oe){return oe.conditions?Se(oe.conditions,oe.operator):Qu(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 yx;if(N){m=uA(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 Ot=YE(Ue,ie.attribute,R),je=YE(oe,ie.attribute,R),Ut=ke?(0,Lo.compareKeys)(je,Ot):(0,Lo.compareKeys)(Ot,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=YE(_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=VE(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&(ml|pl)||D.expiresAt&&D.expiresAt<Date.now())){let x=$E(D.key??D,D,g);if(x?.then)return x.then(L)}}if(U==null)return O?Va.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=Vs?.[se],ie;if(He){let _e=N?.[se];if(_e)if(_e.fromRecord)ie=_e.fromRecord(U);else{let Ue=mi(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 Ot=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,Ot)[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=Ot(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=CH(Ke,this[Le]??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[Le],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||HH(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||HH(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[Kr]?.localTime;if(y===Fh&&(i.cache?.delete(R),this[Kr]=i.getEntry(R),Je.warn("re-retrieved record",y,this[Kr]?.localTime),y=this[Kr]?.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[Tl],timestamp:y,value:this})}return m.listener&&N.on("data",m.listener),N}doesExist(){return!!(this[Ne]||this[hl])}publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let N=Nr(this[Re]),R=this[Le]||null;Qa(R);let O=this[Re];N.addWrite({key:R,store:i,entry:this[Kr],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&&KE(),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[Tl]}wasLoadedFromSource(){return w?!!this[WR]: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(){Vs=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(cA=!0,g.to)m.elements?.definition?(Vs[m.name]=m.resolve=(N,R,O)=>{let b=N[g.from?g.from:t],y=m.elements.definition.tableClass;return O?Qu({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?(Vs[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(xH)):D.filter(xH):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[Le]||y[N.tableClass.primaryKey]);R[g.from]=b}else{let b=O[Le]||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`)}AE(this,this)}static async deleteHistory(m=0){let g;for(let{key:N,value:R}of u.getRange({start:0,end:m}))await Sl(),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 Sl();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 Sl();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 Cx=Ke.prototype;return Cx[bne]=!0,d&&Ke.setTTLExpiration(d/1e3),Y&&Lx(),Ke;function Ll(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,gl.getIndexedValues)(L,D);if(U){UH&&O.prefetch(U.map(x=>({key:x,value:k})),BH);for(let x=0,W=U.length;x<W;x++)O.remove(U[x],k)}if(U=(0,gl.getIndexedValues)(y,D),U){UH&&O.prefetch(U.map(x=>({key:x,value:k})),BH);for(let x=0,W=U.length;x<W;x++)O.put(U[x],k)}}return N}a(Ll,"updateIndices");function Qa(k){switch(typeof k){case"number":return!0;case"string":if(k.length<659)return!0;if(k.length>vH)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,yne,0)>vH)throw new Error("Primary key size is too large: "+k.length);return!0}a(Qa,"checkValidId");function VE(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>wx&&(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<Ix&&ct++}a(L,"prefetch");function D(){try{b(O())}catch(U){y(U)}}a(D,"load")})}a(VE,"loadLocalRecord");function Dl(k){if(!k?.role)return;let m=k.role.permission;if(m.super_user)return Ine;let g=m[c],N,R=g?.tables;if(R)return R[s];if(c==="data"&&(N=m[s])&&!N.tables)return N}a(Dl,"getTablePermissions");function $E(k,m,g,N){if(w){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(ml|pl)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,nn(!R,"cache-hit",s)),R){let O=lA(k,m,g).then(b=>(b?.value?.[Ne]&&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($E,"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 $_}a(Nr,"txnForContext");function YE(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=Vs,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=Vs[m];return R?R(N,g):N[m]}a(YE,"getAttributeValue");function uA(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 Va.SKIP;for(let x=0;x<O;x++)if(!N[x](U,L))return Va.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?Va.SKIP:VE(D,g,b,!1,y));return Array.isArray(k)&&(L=L.filter(D=>D!==Va.SKIP)),L.hasEntries=!0,L}return k}a(uA,"transformToEntries");async function lA(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&(ml|pl)?O(lA(k,i.getEntry(k),g)):O(U)}))return new Promise(U=>{O=U,b=setTimeout(()=>{i.unlock(k,R)},One)});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;zR(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&ml;let _e=L.lastModified||He&&R;se=He||_e>R||!y,_e||(_e=(0,gl.getNextMonotonicTime)());let ke=performance.now()-le;if(xr(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=Ll(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(lA,"getFromSource");function KE(){if(Tn!==aA&&(aA=Tn,(0,Co.getWorkerIndex)()===(0,Co.getWorkerCount)()-1)){if(Cl&&clearTimeout(Cl),!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`),Cl=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(N+Tn,Date.now())),i.rootStore.status!=="open"){clearTimeout(Cl);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+Ane<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 Sl()}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(KE,"scheduleCleanup");function _A(){z=u?.addDeleteRemovalCallback(n,k=>{let m=i.getEntry(k);m?.value===null&&i.remove(k,m.version)})}a(_A,"addDeleteRemoval");function Lx(){(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 Sl()}}catch(k){Je.error("Error in evicting old records",k)}},Rne).unref()}a(Lx,"runRecordExpirationEviction")}function QR(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 BH(){}function wne(e){qH=e}function yE(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"&&!Cne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,wE.autoCast)(e):e}function HH(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 zR(e,t,r){return e?.then?e.then(t,r):t(e)}function IE(e,t){e[Kr]=t,e[Ne]=t?.value??null,e[Tl]=t?.version}function xH(e){return e!=null}var qn,Va,gl,FH,Ol,pn,Rl,Al,Je,Lo,Co,wE,gne,qH,Rne,Ane,UH,One,Tl,bne,Kr,hl,PH,Nne,WR,ka,ml,pl,yne,vH,Ine,ame,Cne,Sl,Lf=Ae(()=>{qn=v(M()),Va=require("lmdb"),gl=v(Dr()),FH=require("lodash");yn();Cp();Ol=v(j());MH();pn=v(Z()),Rl=v(Rs()),Al=v(Ln());ge();mf();Je=v(V());W_();Ji();Lo=require("ordered-binary"),Co=v(tt());Pi();wE=v(J());gc();Ns();hE();gne=new Uint8Array(9);gne[8]=192;Rne=6e4,Ane=864e5;Ol.initSync();UH=Ol.get(qn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),One=1e4,Tl=Symbol.for("version"),bne=Symbol.for("incremental-update"),Kr=Symbol("entry"),hl=Symbol("is-saving"),PH=1,Nne=2,WR=Symbol("loaded-from-source"),ka={isNotification:!0,ensureLoaded:!1},ml=1,pl=8,yne=Buffer.allocUnsafeSlow(8192),vH=1978,Ine={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ame=(0,wE.convertToMS)(Ol.get(qn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(CE,"makeTable");a(QR,"attributesAsObject");a(BH,"noop");a(wne,"setServerUtilities");Cne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(yE,"coerceType");a(HH,"isDescendantId");Sl=a(()=>new Promise(setImmediate),"rest");a(zR,"when");a(IE,"updateResource");a(xH,"exists")});var xe={};Ve(xe,{database:()=>Qc,databases:()=>rt,dropDatabase:()=>Pp,dropTableMeta:()=>vne,getDatabases:()=>Mn,getTables:()=>Lne,onUpdatedTable:()=>aR,readMetaDb:()=>bl,resetDatabases:()=>Dne,table:()=>_t,tables:()=>Mr});function Lne(){return PE||Mn(),Mr||{}}function Mn(){if(PE)return rt;PE=!0,Ka=new Map;let e=(0,Zt.getHdbBasePath)()&&(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.DATABASES_DIR_NAME),t=(0,Zt.get)(Qr.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)(Qr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Wr.existsSync)(e)?e:(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Wr.existsSync)(e))for(let r of(0,Wr.readdirSync)(e,{withFileTypes:!0})){let n=(0,Xe.basename)(r.name,".mdb");r.isFile()&&(0,Xe.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&bl((0,Xe.join)(e,r.name),null,n)}if((0,Wr.existsSync)((0,Ya.getBaseSchemaPath)())){for(let r of(0,Wr.readdirSync)((0,Ya.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,Xe.join)((0,Ya.getBaseSchemaPath)(),r.name),s=(0,Xe.join)((0,Ya.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Wr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,Xe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Xe.join)(s,i.name);bl((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,Wr.existsSync)(s))for(let o of(0,Wr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,Xe.extname)(o.name).toLowerCase()===".mdb"&&bl((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,Wr.existsSync)(u)&&bl(u,o,r,null,!0)}}for(let r in rt){let n=Ka.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[vE]}}return Ka=null,rt}}function Dne(){PE=!1;for(let[,e]of gi)e.needsDeletion=!0;Mn();for(let[e,t]of gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),gi.delete(e));return rt}function bl(e,t,r=jR,n,s){let i=new JR.default(e,!1);try{let o=gi.get(e);o?o.needsDeletion=!1:(o=(0,DE.open)(i),gi.set(e,o));let c=new Do.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(LE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Wr.existsSync)(n)&&(i.path=n,_=(0,DE.open)(i),_.isLegacy=!0):_=EE(o));let l=$H(r),d=l[vE],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,F=typeof S.audit=="boolean"?S.audit:(0,Zt.get)(Qr.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($a)||0)&&u.putSync($a,B+1):(S.tableId=B=u.get($a),B||(B=1),u.putSync($a,B+1),u.putSync(S.key,S));let z=new Do.default(!S.is_hash_attribute,S.is_hash_attribute);K=s_(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=YH(l,E,CE({primaryStore:K,auditStore:_,audit:F,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 ZR)z(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function $H(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)),Ka&&!Ka.has(e)){let r=new Set;t[vE]=r,Ka.set(e,r)}return t}function YH(e,t,r){return e[t]=r,r}function Qc({database:e,table:t}){e||(e=jR),Mn();let r=$H(e),n=(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.DATABASES_DIR_NAME),s=(0,Zt.get)(Qr.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)(Qr.CONFIG_PARAMS.STORAGE_PATH)||((0,Wr.existsSync)(n)?n:(0,Xe.join)((0,Zt.getHdbBasePath)(),Qr.LEGACY_DATABASES_DIR_NAME));let o=(0,Xe.join)(n,(i?t:e)+".mdb"),c=gi.get(o);if(!c){let u=new JR.default(o,!1);c=(0,DE.open)(u),gi.set(o,c)}return c}async function Pp(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;gi.delete(s.path),s.status==="open"&&(await s.close(),await GH.remove(s.path))}if(e==="data"){for(let r in Mr)delete Mr[r];delete Mr[vE]}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=jR);let l=Qc({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=EE(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)(Qr.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=s_(l.openDB(Y,Q));z.rootStore=l,S=l.dbisDb=l.openDB(LE.INTERNAL_DBIS_NAME,A),z.tableId=S.get($a),z.tableId||(z.tableId=1),S.putSync($a,z.tableId+1),h.tableId=z.tableId,f=YH(d,e,CE({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,F(),S.put(Y,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(LE.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){F(),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,F(),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<Nl.workerData?.restartNumber)&&(I=!0,F(),Y=S.get(Q),(z||Y.indexingPID&&Y.indexingPID!==process.pid||Y.restartNumber<Nl.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,F(),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=Pne(f,K,B):I&&ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let P of ZR)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Sn.trace(`${e} table loaded`),f;function F(){w||l.transactionSync(()=>({then(P){w=P}}))}a(F,"startTxn")}async function Pne(e,t,r){try{let n=e.schemaVersion;await ME.signalSchemaChange(new UE.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,kH.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)}),Nl.workerData&&Nl.workerData.restartNumber!==VH.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Mne?await s:u>Une&&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 ME.signalSchemaChange(new UE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Sn.error("Error in indexing",n)}}function vne({table:e,database:t}){let r=Qc({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 aR(e){ZR.push(e)}var Zt,LE,DE,Xe,Wr,Ya,Do,JR,Qr,GH,XR,kH,ME,UE,Nl,Sn,VH,jR,vE,Mr,rt,$a,ZR,PE,gi,Ka,Mne,Une,ge=Ae(()=>{Zt=v(j()),LE=v(ht()),DE=require("lmdb"),Xe=require("path"),Wr=require("fs"),Ya=v(We());Lf();Do=v(i_()),JR=v(a_()),Qr=v(M()),GH=v(require("fs-extra")),XR=require("../../index"),kH=v(Dr()),ME=v(Rs()),UE=v(Ln()),Nl=require("worker_threads"),Sn=v(V()),VH=v(tt());Pi();gc();jR="data",vE=Symbol("defined-tables");(0,Zt.initSync)();Mr=Object.create(null),rt=Object.create(null);(0,XR._assignPackageExport)("databases",rt);(0,XR._assignPackageExport)("tables",Mr);$a=Symbol.for("next-table-id"),ZR=[],gi=new Map;a(Lne,"getTables");a(Mn,"getDatabases");a(Dne,"resetDatabases");a(bl,"readMetaDb");a($H,"ensureDB");a(YH,"setTable");a(Qc,"database");a(Pp,"dropDatabase");a(_t,"table");Mne=1e3,Une=10;a(Pne,"runIndexing");a(vne,"dropTableMeta");a(aR,"onUpdatedTable")});var J=T((mme,ix)=>{"use strict";var Ri=require("path"),JH=require("fs-extra"),Or=V(),KH=require("fs-extra"),BE=require("os"),Bne=require("net"),Hne=require("recursive-iterator"),at=M(),xne=$A(),WH=require("papaparse"),HE=require("moment"),{inspect:Fne}=require("util"),QH=require("is-number"),hme=require("lodash"),qne=require("minimist"),Gne=require("https"),kne=require("http"),{hdb_errors:xE}=Z(),Vne=/^((\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)))$/,XH=require("util").promisify(setTimeout),$ne=100,Yne=5,Kne="",Wne=4,zH={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};ix.exports={isEmpty:zr,isEmptyOrZeroLength:_s,arrayHasEmptyValues:Jne,arrayHasEmptyOrZeroLengthValues:Xne,buildFolderPath:jne,isBoolean:jH,errorizeMessage:Qne,stripFileExtension:ese,autoCast:tse,autoCastJSON:ZH,autoCastJSONDeep:tA,removeDir:rse,compareVersions:nse,isCompatibleDataVersion:sse,escapeRawValue:ise,unescapeValue:ose,stringifyProps:ase,timeoutPromise:use,isClusterOperation:_se,getClusterUser:fse,checkGlobalSchemaTable:dse,getHomeDir:tx,getPropsFilePath:cse,promisifyPapaParse:Ese,removeBOM:rx,createEventPromise:hse,checkProcessRunning:mse,checkSchemaTableExist:pse,checkSchemaExists:nx,checkTableExists:sx,getStartOfTomorrowInSeconds:Sse,getLimitKey:Tse,isObject:Zne,isNotEmptyAndHasValue:zne,autoCasterIsNumberCheck:ex,backtickASTSchemaItems:gse,isPortTaken:lse,createForkArgs:Rse,autoCastBoolean:Ase,async_set_timeout:XH,getTableHashAttribute:Ose,doesSchemaExist:bse,doesTableExist:Nse,stringifyObj:yse,ms_to_time:Ise,changeExtension:wse,getEnvCliRootPath:rA,noBootFile:Cse,httpRequest:Lse,transformReq:Dse,convertToMS:Mse,PACKAGE_ROOT:at.PACKAGE_ROOT};function Qne(e){return e instanceof Error?e:new Error(e)}a(Qne,"errorizeMessage");function zr(e){return e==null}a(zr,"isEmpty");function zne(e){return!zr(e)&&(e||e===0||e===""||jH(e))}a(zne,"isNotEmptyAndHasValue");function _s(e){return zr(e)||e.length===0||e.size===0}a(_s,"isEmptyOrZeroLength");function Jne(e){if(zr(e))return!0;for(let t=0;t<e.length;t++)if(zr(e[t]))return!0;return!1}a(Jne,"arrayHasEmptyValues");function Xne(e){if(_s(e))return!0;for(let t=0;t<e.length;t++)if(_s(e[t]))return!0;return!1}a(Xne,"arrayHasEmptyOrZeroLengthValues");function jne(...e){try{return e.join(Ri.sep)}catch{console.error(e)}}a(jne,"buildFolderPath");function jH(e){return zr(e)?!1:e===!0||e===!1}a(jH,"isBoolean");function Zne(e){return zr(e)?!1:typeof e=="object"}a(Zne,"isObject");function ese(e){return _s(e)?Kne:e.slice(0,-Wne)}a(ese,"stripFileExtension");function tse(e){return zr(e)||e===""||typeof e!="string"?e:zH[e]!==void 0?zH[e]:ex(e)===!0?Number(e):Vne.test(e)?new Date(e):e}a(tse,"autoCast");function ZH(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(ZH,"autoCastJSON");function tA(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=tA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=tA(r);n!==r&&(e[t]=n)}return e}else return ZH(e)}a(tA,"autoCastJSONDeep");function ex(e){if(e.startsWith("0.")&&QH(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&QH(e))}a(ex,"autoCasterIsNumberCheck");async function rse(e){if(_s(e))throw new Error(`Directory path: ${e} does not exist`);try{await KH.emptyDir(e),await KH.remove(e)}catch(t){throw Or.error(`Error removing files in ${e} -- ${t}`),t}}a(rse,"removeDir");function nse(e,t){if(_s(e)){Or.info("Invalid current version sent as parameter.");return}if(_s(t)){Or.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(nse,"compareVersions");function sse(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(sse,"isCompatibleDataVersion");function ise(e){if(zr(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(ise,"escapeRawValue");function ose(e){if(zr(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(ose,"unescapeValue");function ase(e,t){if(zr(e))return Or.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+BE.EOL}!_s(n)&&n[0]===";"?r+=" "+n+s+BE.EOL:_s(n)||(r+=n+"="+s+BE.EOL)}catch{Or.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(ase,"stringifyProps");function tx(){let e;try{e=BE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(tx,"getHomeDir");function cse(){let e=Ri.join(tx(),at.HDB_HOME_DIR_NAME,at.BOOT_PROPS_FILE_NAME);return JH.existsSync(e)||(e=Ri.join(__dirname,"../","hdb_boot_properties.file")),e}a(cse,"getPropsFilePath");function use(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(use,"timeoutPromise");async function lse(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Bne.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(lse,"isPortTaken");function _se(e){try{return at.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Or.error(`Error checking operation against cluster ops ${t}`)}return!1}a(_se,"isClusterOperation");function dse(e,t){let r=(ge(),ee(xe)).getDatabases();if(!r[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(dse,"checkGlobalSchemaTable");function fse(e,t){if(zr(t)){Or.warn("No CLUSTERING_USER defined, clustering disabled");return}if(zr(e)||_s(e)){Or.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){Or.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Or.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(fse,"getClusterUser");function Ese(){WH.parsePromise=function(e,t,r){return new Promise(function(n,s){WH.parse(e,{header:!0,transformHeader:rx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Ese,"promisifyPapaParse");function rx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(rx,"removeBOM");function hse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Or.info(`Got cluster status event response: ${Fne(s)}`);try{i.cancel()}catch{Or.error("Error trying to cancel timeout.")}n(s)})})}a(hse,"createEventPromise");async function mse(e){let t=!0,r=0;do await XH($ne*r++),(await xne.findPs(e)).length>0&&(t=!1);while(t&&r<Yne);if(t)throw new Error(`process ${e} was not started`)}a(mse,"checkProcessRunning");function pse(e,t){let r=nx(e);if(r)return r;let n=sx(e,t);if(n)return n}a(pse,"checkSchemaTableExist");function nx(e){let{getDatabases:t}=(ge(),ee(xe));if(!t()[e])return xE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nx,"checkSchemaExists");function sx(e,t){let{getDatabases:r}=(ge(),ee(xe));if(!r()[e][t])return xE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(sx,"checkTableExists");function Sse(){let e=HE().utc().add(1,at.MOMENT_DAYS_TAG).startOf(at.MOMENT_DAYS_TAG).unix(),t=HE().utc().unix();return e-t}a(Sse,"getStartOfTomorrowInSeconds");function Tse(){return HE().utc().format("DD-MM-YYYY")}a(Tse,"getLimitKey");function gse(e){try{let t=new Hne(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(gse,"backtickASTSchemaItems");function Rse(e){return[e]}a(Rse,"createForkArgs");function Ase(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ase,"autoCastBoolean");function Ose(e,t){let{getDatabases:r}=(ge(),ee(xe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Ose,"getTableHashAttribute");function bse(e){let{getDatabases:t}=(ge(),ee(xe));return t()[e]!==void 0}a(bse,"doesSchemaExist");function Nse(e,t){let{getDatabases:r}=(ge(),ee(xe));return r()[e]?.[t]!==void 0}a(Nse,"doesTableExist");function yse(e){try{return JSON.stringify(e)}catch{return e}}a(yse,"stringifyObj");function Ise(e){let t=HE.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(Ise,"ms_to_time");function wse(e,t){let r=Ri.basename(e,Ri.extname(e));return Ri.join(Ri.dirname(e),r+t)}a(wse,"changeExtension");function rA(){if(process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=qne(process.argv);if(e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[at.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(rA,"getEnvCliRootPath");var eA;function Cse(){if(eA)return eA;let e=rA();rA()&&JH.pathExistsSync(Ri.join(e,at.HDB_CONFIG_FILE))&&(eA=!0)}a(Cse,"noBootFile");function Lse(e,t){let r;return e.protocol==="http:"?r=kne:r=Gne,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(Lse,"httpRequest");function Dse(e){if(!e.schema&&!e.database){e.schema=at.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Dse,"transformReq");function Mse(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(Mse,"convertToMS")});var _x=T((Sme,lx)=>{"use strict";var Jr=j(),Use=$i(),he=M(),yl=nt(),qs=require("path"),{PACKAGE_ROOT:qE}=M(),ox=j(),FE=J(),Wa="/dev/null",Pse=qs.join(qE,"launchServiceScripts"),ax=qs.join(qE,"utility/scripts"),vse=qs.join(ax,he.HDB_RESTART_SCRIPT),cx=qs.resolve(qE,"dependencies",`${process.platform}-${process.arch}`,yl.NATS_BINARY_NAME);function ux(){let t=Use.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 FE.noBootFile()&&(n[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{name:he.PROCESS_DESCRIPTORS.HDB,script:he.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:qE}}a(ux,"generateMainServerConfig");var Bse=9930;function Hse(){Jr.initSync(!0);let e=Jr.get(he.CONFIG_PARAMS.ROOTPATH),t=qs.join(e,"clustering",yl.NATS_CONFIG_FILES.HUB_SERVER),r=qs.join(Jr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=ox.get(he.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=yl.LOG_LEVEL_FLAGS[Jr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Bse?"-"+n:""),script:cx,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 Jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(Hse,"generateNatsHubServerConfig");var xse=9940;function Fse(){Jr.initSync(!0);let e=Jr.get(he.CONFIG_PARAMS.ROOTPATH),t=qs.join(e,"clustering",yl.NATS_CONFIG_FILES.LEAF_SERVER),r=qs.join(Jr.get(he.HDB_SETTINGS_NAMES.LOG_PATH_KEY),he.LOG_NAMES.HDB),n=ox.get(he.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=yl.LOG_LEVEL_FLAGS[Jr.get(he.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:he.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==xse?"-"+n:""),script:cx,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 Jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(Fse,"generateNatsLeafServerConfig");function qse(){Jr.initSync();let e=qs.join(Jr.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:Pse,autorestart:!1};return Jr.get(he.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wa,t.error_file=Wa),t}a(qse,"generateClusteringUpgradeV4ServiceConfig");function Gse(){let e={[he.PROCESS_NAME_ENV_PROP]:he.PROCESS_DESCRIPTORS.RESTART_HDB};return FE.noBootFile()&&(e[he.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{...{name:he.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:ax},script:vse}}a(Gse,"generateRestart");function kse(){return{apps:[ux()]}}a(kse,"generateAllServiceConfigs");lx.exports={generateAllServiceConfigs:kse,generateMainServerConfig:ux,generateRestart:Gse,generateNatsHubServerConfig:Hse,generateNatsLeafServerConfig:Fse,generateClusteringUpgradeV4ServiceConfig:qse}});var NT=T((Rme,bx)=>{"use strict";var De=M(),Vse=J(),Gs=TT(),Il=It(),ds=nt(),Ai=_x(),GE=j(),Oi=V(),$se=ys(),{startWorker:dx,onMessageFromWorkers:Yse}=tt(),Kse=ua(),gme=require("util"),Wse=require("child_process"),Qse=require("fs"),{execFile:zse}=Wse,ye;bx.exports={enterPM2Mode:Jse,start:bi,stop:nA,reload:Ex,restart:hx,list:sA,describe:px,connect:ks,kill:tie,startAllServices:rie,startService:iA,getUniqueServicesList:Sx,restartAllServices:nie,isServiceRegistered:Tx,reloadStopStart:gx,restartHdb:mx,deleteProcess:Zse,startClusteringProcesses:Ax,startClusteringThreads:Ox,isHdbRestartRunning:eie,isClusteringRunning:iie,stopClustering:sie,reloadClustering:oie};var wl=!1;Yse(e=>{e.type==="restart"&&GE.initSync(!0)});function Jse(){wl=!0}a(Jse,"enterPM2Mode");function ks(){return ye||(ye=require("pm2")),new Promise((e,t)=>{ye.connect((r,n)=>{Oi.setupConsoleLogging(),r&&t(r),e(n)})})}a(ks,"connect");var br,Xse=10,fx;function bi(e,t=!1){if(wl)return jse(e);let r=zse(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=br.indexOf(r);o>-1&&br.splice(o,1),!fx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Xse&&(Qse.existsSync(Gs.getHubConfigPath())?bi(e):(await Gs.generateNatsConfig(!0),bi(e),await new Promise(c=>setTimeout(c,3e3)),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=GE.get(De.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&ds.LOG_LEVEL_HIERARCHY[o]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=ds.LOG_LEVELS[f]}if(ds.LOG_LEVEL_HIERARCHY[o]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),br=[],!br&&!t){let i=a(()=>{fx=!0,br&&(br.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)}br.push(r)}a(bi,"start");function jse(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.start(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(jse,"startWithPM2");function nA(e){if(!wl){for(let t of br||[])t.name===e&&(br.splice(br.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.stop(e,async(n,s)=>{n&&(ye.disconnect(),r(n)),ye.delete(e,(i,o)=>{i&&(ye.disconnect(),r(n)),ye.disconnect(),t(o)})})})}a(nA,"stop");function Ex(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.reload(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(Ex,"reload");function hx(e){if(!wl)for(let t of br||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.restart(e,(n,s)=>{ye.disconnect(),t(s)})})}a(hx,"restart");function Zse(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.delete(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(Zse,"deleteProcess");async function mx(){await bi(Ai.generateRestart())}a(mx,"restartHdb");async function eie(){let e=await sA();for(let t in e)if(e[t].name===De.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(eie,"isHdbRestartRunning");function sA(){return new Promise(async(e,t)=>{try{await ks()}catch(r){t(r)}ye.list((r,n)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(n)})})}a(sA,"list");function px(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}ye.describe(e,(n,s)=>{n&&(ye.disconnect(),r(n)),ye.disconnect(),t(s)})})}a(px,"describe");function tie(){if(!wl){for(let e of br||[])e.kill();br=[];return}return new Promise(async(e,t)=>{try{await ks()}catch(r){t(r)}ye.killDaemon((r,n)=>{r&&(ye.disconnect(),t(r)),ye.disconnect(),e(n)})})}a(tie,"kill");async function rie(){try{await Ax(),await Ox(),await bi(Ai.generateAllServiceConfigs())}catch(e){throw ye?.disconnect(),e}}a(rie,"startAllServices");async function iA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case De.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ai.generateMainServerConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ai.generateNatsIngestServiceConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ai.generateNatsReplyServiceConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ai.generateNatsHubServerConfig(),await bi(r,t),await Gs.removeNatsConfig(e);return;case De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ai.generateNatsLeafServerConfig(),await bi(r,t),await Gs.removeNatsConfig(e);return;case De.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ai.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await bi(r)}catch(r){throw ye?.disconnect(),r}}a(iA,"startService");async function Sx(){try{let e=await sA(),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 ye?.disconnect(),e}}a(Sx,"getUniqueServicesList");async function nie(e=[]){try{let t=!1,r=await Sx();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===De.PROCESS_DESCRIPTORS.HDB?t=!0:await hx(o))}t&&await gx(De.PROCESS_DESCRIPTORS.HDB)}catch(t){throw ye?.disconnect(),t}}a(nie,"restartAllServices");async function Tx(e){if(br?.find(r=>r.name===e))return!0;let t=await Kse.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Tx,"isServiceRegistered");async function gx(e){let t=e===De.PROCESS_DESCRIPTORS.HDB?GE.get(De.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):GE.get(De.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await px(e),n=Vse.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await nA(e),await iA(e)):e===De.PROCESS_DESCRIPTORS.HDB?await mx():await Ex(e)}a(gx,"reloadStopStart");var Rx;async function Ax(e=!1){for(let t in De.CLUSTERING_PROCESSES){let r=De.CLUSTERING_PROCESSES[t];await iA(r,e)}}a(Ax,"startClusteringProcesses");async function Ox(){Rx=dx(De.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:De.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Il.createWorkQueueStream(ds.WORK_QUEUE_CONSUMER_NAMES),await Il.updateIngestStreamConsumer(),await Il.updateLocalStreams();let e=await $se.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===De.PRE_4_0_0_VERSION){Oi.info("Starting clustering upgrade 4.0.0 process"),dx(De.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Ox,"startClusteringThreads");async function sie(){for(let e in De.CLUSTERING_PROCESSES)if(e!==De.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===De.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await Rx.terminate();else{let t=De.CLUSTERING_PROCESSES[e];await nA(t)}}a(sie,"stopClustering");async function iie(){for(let e in De.CLUSTERING_PROCESSES){let t=De.CLUSTERING_PROCESSES[e];if(await Tx(t)===!1)return!1}return!0}a(iie,"isClusteringRunning");async function oie(){await Gs.generateNatsConfig(!0),await Il.reloadNATSHub(),await Il.reloadNATSLeaf(),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Gs.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(oie,"reloadClustering")});var oA=NT(),Nx=M();a(async function(){try{let t=await oA.describe(Nx.PROCESS_DESCRIPTORS.HDB);for(let r of t)await oA.reload(r.pm_id);await oA.deleteProcess(Nx.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|
|
26
|
+
`},compressible:!1,q:.8});xt.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()}});kP={type:"application/json",serializeStream:hc,serialize:Vu,deserialize:V9,q:.8};xt.set("*/*",kP);xt.set("",kP);a(V9,"tryJSONParse");a(lg,"registerContentHandlers");$9=require("fastify-plugin"),Y9=$9(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Ef(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(Ef,"findBestSerializer");HP=og.default.get(ag.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(hf,"serialize");a(di,"serializeMessage");a(K9,"streamToBuffer");a(Eo,"getDeserializer");a(xP,"deserializerUnknownType");a(W9,"transformIterable")});function Na(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 g=o[0],A=Ms(n.attributes,g);if(A.relationship){if(o.length<2)throw new Ls.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let b=A.definition?.tableClass||A.elements?.definition?.tableClass,v=new Map,G=Na({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,b,s,v);if(A.relationship.to){i[o[0]]=v;let H=!!Ms(b.attributes,A.relationship.to)?.elements;G=j9(G,A,b.primaryStore,H,v)}if(A.relationship.from){let H=a(P=>Na({attribute:A.relationship.from,value:P},t,r,n,s,v),"searchEntry");A.elements?(i[o[0]]=v,G=Z9(G,A,b.primaryStore,v,H)):G=G.flatMap(H)}return G}else if(o.length===1)o=o[0];else throw new Ls.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,f;c instanceof Date&&(c=c.getTime());let E;switch(Eg[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]=ss.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"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 Ls.ClientError(`Unknown query comparator "${u}"`)}if(r){let g=_;_=l,l=g,g=!f,f=!d,d=g}let h=o===n.primaryKey||o==null,S=h?n.primaryStore:n.indices[o];if(!S||S.isIndexing||E||c===null&&!S.indexNulls){if(!s)throw new Ls.ClientError(`"${o}" is not indexed${c===null&&!S.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":S?.isIndexing?" yet":""}, can not search for this attribute`,404);let g=Wu(e);if(!g)throw new Ls.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:b})=>new Promise((v,G)=>setImmediate(()=>{try{v(b&&g(b)?A:_g.SKIP)}catch(H){G(H)}})))}let p={start:_,end:l,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let g=S.getRange(p).map(A=>A.value==null?_g.SKIP:A);return g.hasEntries=!0,g}else return S.getRange(p).map(({value:g})=>g)}function Ms(e,t){if(Array.isArray(t))if(t.length>1){let r=Ms(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Ms(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 j9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=vn(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 Z9(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=vn(u.value);if(!c.has(_))return c.add(_),u}if(!i)return(async()=>{let _=new Map;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>_.has(vn(f)));let l=0;for await(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(E=>!E(f)))continue}_.set(vn(d),d),l++>100&&(await new Promise(setImmediate),l=0)}return i=_.values()[Symbol.iterator](),this.next()})();do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Wu(e,t,r,n,s,i){if(e.conditions){let l=e.conditions.map(Wu);return e.operator==="or"?d=>l.some(f=>f(d)):d=>l.every(f=>f(d))}let o=e.comparator,c=e[0]??e.attribute,u=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let l=c[0],d=Ms(t.attributes,l),f=d.definition?.tableClass||d.elements.definition?.tableClass,E=n?.[l],h=Wu({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},f,r,E?.[l]?.joined,c[1]===f.primaryKey,i);if(!h)return;if(E){E.filters||(E.filters=[]),E.filters.push(h);return}let S=t.propertyResolvers?.[l],p,g=a((A,b)=>{let v,G;if(S){if(S.from&&h.idFilter){if(!p)if(h.idFilter.idSet?.size===1){for(let P of h.idFilter.idSet)e={attribute:S.from,value:P};p=_(S.from,h.idFilter,!0)}else p=_(S.from,h.idFilter,!1);let H=p(A);return p.idFilter&&(g.idFilter=p.idFilter),H}G=S(A,r,b),v=G?.value}else v=A[l];return v?Array.isArray(v)?v.some(h):h(v,G):!1},"recordFilter");return g}}switch(u instanceof Date&&(u=u.getTime()),Eg[o]||o){case dg.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,f=u.length;d<f;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ss.compareKeys)(l,u[0])>=0&&(0,ss.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ss.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ss.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ss.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ss.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ss.compareKeys)(l,u)!==0);default:throw new Ls.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,f){let E;f=f&&!s&&t?.indices[l]&&i>3,f&&(e.estimated_count==null&&mf(t)(e),E=e.estimated_count>>4,(isNaN(E)||E>=i)&&(f=!1));let h=0,S=3;function p(g){let A=g[l],b;if(typeof A!="object"||!A?b=d(A):Array.isArray(A)?b=A.some(d):A instanceof Date&&(b=d(A.getTime())),f&&(S++,!b&&!p.idFilter&&++h/S*(i-S)>E)){let v=Na(e,r.transaction,!1,t).map(vn),G=new Set(v);p.idFilter=H=>G.has(vn(H)),p.idFilter.idSet=G}return b}return a(p,"recordFilter"),s&&(p.idFilter=d),p}a(_,"attributeComparator")}function mf(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/hi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Eg[n]||n,n===dg.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Ms(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=mf(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"});r.estimated_count=c*hi(e.indices[i.relationship.from]||e.primaryStore)/(hi(o.primaryStore)||1)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=hi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=J9*hi(e.primaryStore)+1:n==="between"?r.estimated_count=z9*hi(e.primaryStore)+1:r.estimated_count=Q9*hi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=4)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function pf(e){if(e)if(mi=e,Oa.lastIndex=0,e7.test(e))try{let t=Yu(new ba,"");if(Sr!==mi.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 ${Sr} in '${mi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Yu(e,t){let r=Oa,n,s,i,o,c,u=decodeURIComponent;for(;n=r.exec(mi);){Sr=r.lastIndex;let[,_,l]=n;if(o){if(_)throw new SyntaxError(`expected operator, but encountered '${_}'`);o=!1,c=!1}else c=!0;let d;switch(l){case"=":if(s){if(_.length<=2)i=_;else throw new SyntaxError(`invalid FIQL operator ${_}`);u=$P}else{if(u=decodeURIComponent,i="equals",!_)throw new SyntaxError("attribute must be specified before equality comparator");s=Ku(_)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=X9[l],u=fg[i]?$P:decodeURIComponent,!_)throw new SyntaxError(`attribute must be specified before comparator ${l}`);s=Ku(_);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 ${l[0]?"'"+l[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${l?"'"+l+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let E={comparator:i,attribute:s,value:u(_)};i==="eq"&&YP(E,_),e.conditions.push(E)}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Ku(_)),s=void 0;break;case"(":Oa.lastIndex=Sr;let f=Yu(_?[]:new ba,")");switch(_){case"":e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=KP(f);break;default:throw new SyntaxError(`unknown query function call ${_}`)}mi[Sr]===","?r.lastIndex=++Sr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!_)throw new SyntaxError("property sets must have a defined parent property name");Oa.lastIndex=Sr,d=Yu([],"}"),d.name=_,e.push(d),mi[Sr]===","?r.lastIndex=++Sr:o=!0;break;case"[":Oa.lastIndex=Sr,_?(d=Yu(new ba,"]"),d.name=_):d=Yu(e.conditions?new ba:[],"]"),e.conditions?(e.conditions.push(d),s=null):e.push(d),mi[Sr]===","?r.lastIndex=++Sr:o=!0;break;case")":case"]":case"}":if(t===l[0]){if(e.conditions){if(s){let E={comparator:i||"equals",attribute:s,value:u(_)};i==="eq"&&YP(E,_),e.conditions.push(E)}else if(_)throw new SyntaxError("no attribute or comparison specified")}else(_||e.length>0&&c)&&e.push(Ku(_));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${l[0]}'`):new SyntaxError(`unexpected token '${l[0]}'`);default:throw new SyntaxError(`unexpected operator '${l}'`)}if(t!==")"&&(r=s?t7:Oa,r.lastIndex=Sr),Sr===mi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Ku(e){return e.indexOf(".")>-1?e.split(".").map(Ku):decodeURIComponent(e)}function $P(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(decodeURIComponent(r));if(t==="string")return decodeURIComponent(r);throw new Ls.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function YP(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Ls.ClientError("wildcard can only be used at the end of a string")}function KP(e){let t=WP(e[0]);return e.length>1&&(t.next=KP(e.slice(1))),t}function WP(e){if(Array.isArray(e)){let t=WP(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 vn(e){return Array.isArray(e)?e.join("\0"):e}function hi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function QP(e,t,r){return t*r/hi(e)}var Ls,dg,ss,_g,Q9,z9,J9,X9,fg,Eg,e7,Oa,t7,Sr,mi,ba,Sf=Re(()=>{Ls=B(Z()),dg=B(Et()),ss=require("ordered-binary"),_g=require("lmdb"),Q9=.3,z9=.1,J9=.05,X9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},fg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(Na,"searchByIndex");a(Ms,"findAttribute");a(j9,"joinTo");a(Z9,"joinFrom");Eg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Wu,"filterByType");a(mf,"estimateCondition");e7=/[()[\]|!<>.]|(=\w*=)/,Oa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,t7=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(pf,"parseQuery");a(Yu,"parseBlock");a(Ku,"decodeProperty");a($P,"typedDecoding");a(YP,"wildcardDecoding");a(KP,"toSortObject");a(WP,"toSortEntry");ba=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(vn,"flattenKey");a(hi,"estimatedEntryCount");a(QP,"intersectionEstimate")});function ev(e){let t={openapi:r7,info:{title:"HarperDB HTTP REST interface",version:(0,ZP.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,{attributes:i,primaryKey:o,prototype:c}=n.Resource;if(o=o??"id",!o)continue;let u={},_=[];if(i)for(let{type:A,name:b}of i)u[b]=new jP(zP[A],A),_.push(new pg(b,"query",u[b]));let l=Object.keys(u),d=new pg(o,"path",new jP(zP.ID,"ID"));d.required=!0,d.description="primary key of record";let f=new pg("property","path",{enum:l});f.required=!0,t.components.schemas[s]=new i7(u);let E=c.post!==Resource.prototype.post||c.update,h=c.hasOwnProperty("put"),S=c.hasOwnProperty("get"),p=c.hasOwnProperty("delete"),g="/"+s+"/";E&&(t.paths[g]={},t.paths[g].post=new n7(s,r,"create a new record auto-assigning a primary key")),S&&(t.paths[g]||(t.paths[g]={}),t.paths[g].get=new hg(_,r,{200:new mg({$ref:Tf+s})},"search for records by the specified property name and value")),p&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new XP(_,r,"delete all the records that match the provided query",{204:new JP})),g="/"+s+"/{"+o+"}",S&&(t.paths[g]={},t.paths[g].get=new hg([d],r,{200:new mg({$ref:Tf+s})},"retrieve a record by its primary key")),h&&(t.paths[g]||(t.paths[g]={}),t.paths[g].put=new s7([d],r,s,"create or update the record with the URL path that maps to the record's primary key")),p&&(t.paths[g]||(t.paths[g]={}),t.paths[g].delete=new XP([d],r,"delete a record with the given primary key",{204:new JP})),S&&f.schema.enum.length>0&&(g="/"+s+"/{"+o+"}.{property}",t.paths[g]={},t.paths[g].get=new hg([d,f],r,{200:new mg({enum:l})},"used to retrieve the specified property of the specified record"))}return t}function n7(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Tf+e}}}},this.security=t,this.responses={200:{description:Sg,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function hg(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function mg(e){this.description=Sg,this.content={"application/json":{schema:e}}}function JP(){this.description="successfully processed request, no content returned to client"}function s7(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Tf+r}}}},this.responses={200:{description:Sg}}}function XP(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function i7(e){this.type="object",this.properties=e}function jP(e,t){this.type=e,this.format=t}function pg(e,t,r){this.name=e,this.in=t,this.schema=r}var ZP,r7,zP,Tf,Sg,tv=Re(()=>{ZP=B(gd()),r7="3.0.3",zP={ID:"string",Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",Any:"string",BigInt:"integer"},Tf="#/components/schemas/",Sg="successful operation";a(ev,"generateJsonApi");a(n7,"Post");a(hg,"Get");a(mg,"Response200");a(JP,"Response204");a(s7,"Put");a(XP,"Delete");a(i7,"ResourceSchema");a(jP,"Type");a(pg,"Parameter")});var Rf={};Ke(Rf,{start:()=>c7});async function a7(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&pf(e);let s=new _i;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==rv){let h=gf.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await Xe(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Eo(r["content-type"],!0)(e.body)}catch(h){throw new zu.ClientError(h,400)}if(e.authorize=!0,i===rv&&n==="GET")return ev(gf);switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new zu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new zu.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,Tg.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){o7[0]=d;let h=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&&h==S?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),Tg.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let f={status:l,headers:s,body:void 0},E=_?.wasLoadedFromSource?.();return E!==void 0&&(f.wasCacheMiss=E,!E&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(f.body=hf(_,e,f),n==="HEAD"&&(f.body=void 0)),f}catch(i){i.statusCode?i.statusCode===500?ho.warn(i):ho.info(i):ho.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=hf(i.contentType?i:i.toString(),e,o),o}}function c7(e){Tg=e,!nv&&(nv=!0,gf=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return a7(t,r)}),e.server.ws(async(t,r,n)=>{Qu++;let s=new bn;sv||(sv=!0,eu(l=>{Qu>0&&l.push({metric:"ws-connections",connections:Qu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ho.warn(l)});let o;t.on("message",a(function(d){o||(o=Eo(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{Qu--,on(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let u=r.url.slice(1),_=gf.getMatch(u);if(on(!!_,"connection","ws","connect"),!_)t.send(di(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Fr(h=>({count:h.count,total:Qu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Xe(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=di(E.value,r);t.send(h),Fr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ho,zu,$t,o7,Tg,rv,nv,gf,sv,Qu,iv=Re(()=>{ma();bs();ho=B(Y()),zu=B(Z());Sf();fc();zi();Vd();tv();$t=new Uint8Array(8),o7=new Float64Array($t.buffer,0,1),Tg={},rv="openapi";a(a7,"http");Qu=0;a(c7,"start")});var gg=T((EEe,ov)=>{var{recordAction:Af,recordActionBinary:u7}=(bs(),ee(tu)),l7=require("fastify-plugin"),_7=200;ov.exports=l7(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),Af(o,"duration",_,d,l),u7(s.raw.statusCode<400,"success",_,d,l);let f=_7;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Af(performance.now()-c,"transfer",_,d,l),Af(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Af(f,"bytes-sent",_,d,l));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var bg=T((hEe,_v)=>{var If=require("clone"),wf=tt(),d7=J(),Nf=M(),f7=Y(),Of=require("fs"),Rg=require("joi"),{string:yf}=Rg.types(),{hdb_errors:E7,handleHDBError:Ju}=Z(),{HDB_ERROR_MSGS:h7,HTTP_STATUS_CODES:bf}=E7,{common_validators:ya}=Yn(),av=1e9,cv=" is required",m7=["insert","update","upsert"],Ag={database:{presence:!1,format:ya.schema_format,length:ya.schema_length},schema:{presence:!1,format:ya.schema_format,length:ya.schema_length},table:{presence:!0,format:ya.schema_format,length:ya.schema_length},action:{inclusion:{within:m7,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},p7={schema:yf.required(),table:yf.required(),action:yf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:S7,AWS_SECRET:T7,AWS_BUCKET:g7,AWS_FILE_KEY:R7,REGION:A7}=Nf.S3_BUCKET_AUTH_KEYS,O7={s3:{presence:!0},[`s3.${S7}`]:{presence:!0,type:"String"},[`s3.${T7}`]:{presence:!0,type:"String"},[`s3.${g7}`]:{presence:!0,type:"String"},[`s3.${R7}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${A7}`]:{presence:!0,type:"String"}},uv=If(Ag);uv.data.presence={message:cv};var lv=If(Ag);lv.file_path.presence={message:cv};var b7=Object.assign(If(Ag),O7),Og=If(p7);Og.csv_url=yf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Og.passthrough_headers=Rg.object();function N7(e){let t=wf.validateObject(e,uv);return Cf(e,t)}a(N7,"dataObject");function y7(e){let t=wf.validateBySchema(e,Rg.object(Og));return Cf(e,t)}a(y7,"urlObject");function I7(e){let t=wf.validateObject(e,lv);return Cf(e,t)}a(I7,"fileObject");function w7(e){let t=wf.validateObject(e,b7);return Cf(e,t)}a(w7,"s3FileObject");function Cf(e,t){if(!t){let r=d7.checkGlobalSchemaTable(e.schema,e.table);if(r)return Ju(new Error,r,bf.BAD_REQUEST);if(e.operation===Nf.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Of.accessSync(e.file_path,Of.constants.R_OK|Of.constants.F_OK)}catch(n){return n.code===Nf.NODE_ERROR_CODES.ENOENT?Ju(n,`No such file or directory ${n.path}`,bf.BAD_REQUEST):n.code===Nf.NODE_ERROR_CODES.EACCES?Ju(n,`Permission denied ${n.path}`,bf.BAD_REQUEST):Ju(n)}try{let n=Of.statSync(e.file_path).size;if(n>av)return Ju(new Error,h7.MAX_FILE_SIZE_ERR(n,av),bf.BAD_REQUEST)}catch(n){f7.error(n),console.error(n)}}}return t}a(Cf,"postValidateChecks");_v.exports={dataObject:N7,urlObject:y7,fileObject:I7,s3FileObject:w7}});var Ng=T((pEe,dv)=>{"use strict";var Xu=Y(),Df=M();async function C7(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")?(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(C7,"callOperationFunctionAsAwait");dv.exports={callOperationFunctionAsAwait:C7}});var Ev=T((TEe,fv)=>{"use strict";var yg=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}},Ig=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};fv.exports={BulkLoadFileObject:yg,BulkLoadDataObject:Ig}});var mv=T((REe,hv)=>{"use strict";var wg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};hv.exports=wg});var Pg=T((IEe,Uv)=>{"use strict";var Lf=nn(),Uf=bg(),D7=require("needle"),Bn=M(),OEe=st(),Ia=J(),{handleHDBError:ot,hdb_errors:Nv}=Z(),{HTTP_STATUS_CODES:Yt,HDB_ERROR_MSGS:wt,CHECK_LOGS_WRAPPER:po}=Nv,wa=Y(),Cg=require("papaparse");Ia.promisifyPapaParse();var Hn=require("fs-extra"),L7=require("path"),{chain:pv}=require("stream-chain"),Sv=require("stream-json/streamers/StreamArray"),Tv=require("stream-json/utils/Batch"),gv=require("stream-chain/utils/comp"),{finished:Rv}=require("stream"),M7=j(),yv=Ng(),U7=rg(),{BulkLoadFileObject:Lg,BulkLoadDataObject:P7}=Ev(),Mg=KT(),{verifyBulkLoadAttributePerms:Iv}=uf(),bEe=mv(),NEe=Nt(),yEe=Ts(),{databases:v7}=(Ae(),ee(qe)),{coerceType:B7}=(Pf(),ee(vg)),Av="No records parsed from csv file.",mo=`${M7.get("HDB_ROOT")}/tmp`,{schema_regex:H7}=Yn(),Ov=1024*1024*2,bv=5e3,x7={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Uv.exports={csvDataLoad:F7,csvURLLoad:q7,csvFileLoad:G7,importFromS3:k7};async function F7(e,t){let r=Uf.dataObject(e);if(r)throw ot(r,r.message,Yt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Dv(e.schema,e.table),i=Cg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Dg.bind(null,s),dynamicTyping:!1}),o=new Mg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Iv(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 ot(new Error,c,Yt.BAD_REQUEST,void 0,void 0,!0);let u=new P7(e.action,e.schema,e.table,i.data);return n=await yv.callOperationFunctionAsAwait(Lv,u,null),n.message===Av?Av:Mv(n.records,n.number_written)}catch(s){throw So(s)}}a(F7,"csvDataLoad");async function q7(e){let t=Uf.urlObject(e);if(t)throw ot(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${mo}/${r}`;try{await V7(e,r)}catch(s){throw wa.error(wt.DOWNLOAD_FILE_ERR(r)+" - "+s),ot(s,po(wt.DOWNLOAD_FILE_ERR(r)))}try{let s=new Lg(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 Ug(s);return await Mf(n),i}catch(s){throw await Mf(n),So(s)}}a(q7,"csvURLLoad");async function G7(e){let t=Uf.fileObject(e);if(t)throw ot(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r=new Lg(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 Ug(r)}catch(n){throw So(n)}}a(G7,"csvFileLoad");async function k7(e){let t=Uf.s3FileObject(e);if(t)throw ot(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=L7.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${mo}/${s}`;let i=new Lg(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await $7(s,e);let o=await Ug(i);return await Mf(r),o}catch(n){throw await Mf(r),So(n)}}a(k7,"importFromS3");async function V7(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await D7("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 ot(n,s,n.statusCode,Bn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}K7(r,e.csv_url),await Y7(t,r.raw)}a(V7,"downloadCSVFile");async function $7(e,t){try{let r=`${mo}/${e}`;await Hn.mkdirp(mo),await Hn.writeFile(`${mo}/${e}`,"",{flag:"a+"});let n=await Hn.createWriteStream(r),s=await U7.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(){wa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw wa.error(wt.S3_DOWNLOAD_ERR+" - "+r),ot(r,po(wt.S3_DOWNLOAD_ERR))}}a($7,"downloadFileFromS3");async function Y7(e,t){try{await Hn.mkdirp(mo),await Hn.writeFile(`${mo}/${e}`,t)}catch(r){throw wa.error(wt.WRITE_TEMP_FILE_ERR),ot(r,po(wt.DEFAULT_BULK_LOAD_ERR))}}a(Y7,"writeFileToTempFolder");async function Mf(e){if(e)try{await Hn.access(e),await Hn.unlink(e)}catch{wa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Mf,"deleteTempFile");function K7(e,t){if(e.statusCode!==Nv.HTTP_STATUS_CODES.OK)throw ot(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Yt.BAD_REQUEST);if(!x7[e.headers["content-type"]])throw ot(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Yt.BAD_REQUEST);if(!e.raw)throw ot(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Yt.BAD_REQUEST)}a(K7,"validateURLResponse");async function Ug(e){try{let t;switch(e.file_type){case Bn.VALID_S3_FILE_TYPES.CSV:t=await W7(e);break;case Bn.VALID_S3_FILE_TYPES.JSON:t=await Q7(e);break;default:throw ot(new Error,wt.DEFAULT_BULK_LOAD_ERR,Yt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,wt.INVALID_FILE_EXT_ERR(e))}return Mv(t.records,t.number_written)}catch(t){throw So(t)}}a(Ug,"fileLoad");async function wv(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 Lf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Iv(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=ot(c);r(u)}}a(wv,"validateChunk");async function Cv(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Ia.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Ia.isEmpty(c)&&!Ia.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 yv.callOperationFunctionAsAwait(Lv,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=ot(c,po(wt.INSERT_CSV_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,wt.INSERT_CSV_ERR+" - "+c);r(u)}}a(Cv,"insertChunk");async function W7(e){let t={records:0,number_written:0},r=Dv(e.schema,e.table);try{let n=new Mg,s=Hn.createReadStream(e.file_path,{highWaterMark:Ov});s.setEncoding("utf8"),await Cg.parsePromise(s,wv.bind(null,e,n),Dg.bind(null,r));let i=n.getPermsResponse();if(i)throw ot(new Error,i,Yt.BAD_REQUEST);return s=Hn.createReadStream(e.file_path,{highWaterMark:Ov}),s.setEncoding("utf8"),await Cg.parsePromise(s,Cv.bind(null,e,t),Dg.bind(null,r)),s.destroy(),t}catch(n){throw ot(n,po(wt.PAPA_PARSE_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,wt.PAPA_PARSE_ERR+n)}}a(W7,"callPapaParse");function Dv(e,t){let r=v7[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>B7(i,s));return n}a(Dv,"createTransformMap");function Dg(e,t,r){let n=e.get(r);return n?n(t):Ia.autoCast(t)}a(Dg,"typeFunction");async function Q7(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new Mg,s=pv([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),Sv.withParser(),c=>c.value,new Tv({batchSize:bv}),gv(async c=>{await wv(e,n,r,c)})]);await new Promise((c,u)=>{Rv(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ot(new Error,i,Yt.BAD_REQUEST);let o=pv([Hn.createReadStream(e.file_path,{encoding:"utf-8"}),Sv.withParser(),c=>c.value,new Tv({batchSize:bv}),gv(async c=>{await Cv(e,t,r,c)})]);return await new Promise((c,u)=>{Rv(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw ot(n,po(wt.INSERT_JSON_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,wt.INSERT_JSON_ERR+n)}}a(Q7,"insertJson");async function Lv(e){let t={};try{e.data&&e.data.length>0&&z7(e.data[0])?t=await J7(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",wa.info(t.message))}catch(r){throw So(r)}return t}a(Lv,"callBulkFileLoad");function z7(e){let t=Object.keys(e);for(let r of t)if(!H7.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(z7,"validateColumnNames");async function J7(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Lf.insert;break;case"update":i=Lf.update;break;case"upsert":i=Lf.upsert;break;default:throw ot(new Error,wt.INVALID_ACTION_PARAM_ERR(n),Yt.BAD_REQUEST,Bn.LOG_LEVELS.ERROR,wt.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=Ia.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw So(o)}}a(J7,"bulkFileLoad");function Mv(e,t){return`successfully loaded ${t} of ${e} records`}a(Mv,"buildResponseMsg");function So(e){return ot(e,po(wt.DEFAULT_BULK_LOAD_ERR),Yt.INTERNAL_SERVER_ERROR,Bn.LOG_LEVELS.ERROR,wt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(So,"buildTopLevelErrMsg")});var vv=T((CEe,Pv)=>{"use strict";var Bg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Pv.exports=Bg});var xv=T((LEe,Hv)=>{"use strict";var X7=M(),Bv=require("moment"),j7=require("uuid").v4,Hg=class{static{a(this,"JobObject")}constructor(){this.id=j7(),this.type=void 0,this.start_datetime=Bv().valueOf(),this.created_datetime=Bv().valueOf(),this.end_datetime=void 0,this.status=X7.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Hv.exports=Hg});var xg=T((UEe,$v)=>{"use strict";var Z7=require("uuid").v4,Gv=nn(),kv=rn(),eee=zn(),tee=jo(),ree=vv(),at=M(),nee=xv(),see=OS(),En=Y(),iee=Ic(),Ca=J(),{promisify:oee}=require("util"),To=require("moment"),aee=_f(),vf=bg(),Fv=bm(),{deleteTransactionLogsBeforeValidator:cee}=GT(),{handleHDBError:uee,hdb_errors:lee}=Z(),{HTTP_STATUS_CODES:_ee}=lee,qv=kv.searchByValue,dee=kv.searchByHash,fee=Gv.insert,Eee=oee(aee.evaluateSQL),hee=Gv.update;$v.exports={addJob:See,updateJob:gee,handleGetJob:mee,handleGetJobsByStartDate:pee,getJobById:Vv};async function mee(e){try{let t=await Vv(e.id);return Ca.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 En.error("There was an error getting job",t),new Error(r)}}a(mee,"handleGetJob");async function pee(e){try{let t=await Tee(e);if(En.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=To(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=To(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 En.error(r),new Error(r)}}a(pee,"handleGetJobsByStartDate");async function See(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ca.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return En.info(l),t.error=l,t}if(!at.JOB_TYPE_ENUM[e.operation])return En.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case at.OPERATIONS_ENUM.CSV_FILE_LOAD:n=vf.fileObject(e);break;case at.OPERATIONS_ENUM.CSV_URL_LOAD:n=vf.urlObject(e);break;case at.OPERATIONS_ENUM.CSV_DATA_LOAD:n=vf.dataObject(e);break;case at.OPERATIONS_ENUM.IMPORT_FROM_S3:n=vf.s3FileObject(e);break;case at.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case at.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Fv(e,"date");break;case at.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Fv(e,"timestamp");break;case at.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=cee(e);break;default:break}if(n)throw uee(n,n.message,_ee.BAD_REQUEST,void 0,void 0,!0);let s=new nee;s.type=e.operation===at.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?at.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new eee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await qv(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return En.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Z7();try{o=await qv(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return En.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return En.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new iee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await fee(u)}catch(l){return En.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,En.trace(l)}return t}a(See,"addJob");async function Tee(e){let t=To(e.from_date,To.ISO_8601),r=To(e.to_date,To.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 ree(n,e.hdb_user);try{return await Eee(s)}catch(i){throw En.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(Tee,"getJobsInDateRange");async function Vv(e){if(Ca.isEmptyOrZeroLength(e))return Ca.errorizeMessage("Invalid job ID specified.");let t=new tee(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await dee(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return En.error(n),Ca.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Vv,"getJobById");async function gee(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ca.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===at.JOB_STATUS_ENUM.COMPLETE||e.status===at.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=To().valueOf());let t=new see(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await hee(t),r}a(gee,"updateJob")});var Jv=T((vEe,zv)=>{"use strict";var Yv=J(),Tr=M(),Ree=require("moment"),Bf=Pg(),Hf=Y(),Kv=xg(),Wv=df(),Qv=ki(),Aee=rt(),Oee=sf(),Fg=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function bee(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(Yv.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Yv.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Tr.JOB_TYPE_ENUM.csv_file_load:await Us(e,Bf.csvFileLoad);break;case Tr.JOB_TYPE_ENUM.csv_url_load:await Us(e,Bf.csvURLLoad);break;case Tr.JOB_TYPE_ENUM.csv_data_load:await Us(e,Bf.csvDataLoad);break;case Tr.JOB_TYPE_ENUM.import_from_s3:await Us(e,Bf.importFromS3);break;case Tr.JOB_TYPE_ENUM.empty_trash:break;case Tr.JOB_TYPE_ENUM.export_local:await Us(e,Wv.export_local);break;case Tr.JOB_TYPE_ENUM.export_to_s3:await Us(e,Wv.export_to_s3);break;case Tr.JOB_TYPE_ENUM.delete_files_before:case Tr.JOB_TYPE_ENUM.delete_records_before:await Us(e,Qv.deleteFilesBefore);break;case Tr.JOB_TYPE_ENUM.delete_audit_logs_before:await Us(e,Qv.deleteAuditLogsBefore);break;case Tr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Us(e,Oee.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(bee,"parseMessage");async function Us(e,t){try{e.job.status=Tr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Ree().valueOf(),await Kv.updateJob(e.job),await Nee(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):Hf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Hf.error(n),e.job.message=n,e.job.status=Tr.JOB_STATUS_ENUM.ERROR;try{await Kv.updateJob(e.job)}catch(s){throw Hf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Us,"runJob");async function Nee(e){Hf.trace("launching job thread:",e),Aee.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Tr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Nee,"launchJobThread");zv.exports={parseMessage:bee,RunnerMessage:Fg}});var jv=T((HEe,Xv)=>{"use strict";var qg=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Xv.exports=qg});var h0=T((FEe,Kg)=>{"use strict";var Gf=rn(),Vg=_f(),xf=Pg(),Ps=cd(),Ff=Hi(),Zu=ki(),yee=cS(),ju=sn(),qf=pS(),Kt=qT(),Ct=Y(),Iee=gS(),wee=Nd(),Zv=rT(),Cee=Id(),Dee=nT(),Lee=sT(),Mee=aT(),Uee=uT(),Gg=dT(),e0=df(),Pee=uf(),$g=xg(),F=M(),{hdb_errors:tl,handleHDBError:el}=Z(),{HTTP_STATUS_CODES:t0}=tl,kg=pT(),r0=Gd(),_0=require("util"),Da=nn(),vee=Xs(),Bee=ua(),n0=Jv(),s0=fu(),i0=(Wd(),ee(Du)),o0=Lr(),a0=sf(),c0=jd(),{setServerUtilities:Hee}=(Pf(),ee(vg)),{CONTEXT:xee}=(Nn(),ee(fp)),{_assignPackageExport:Fee}=require("../../index"),{transformReq:qee}=J(),{server:Gee}=(rr(),ee(wi)),kee=Ng(),u0=Gf.searchByHash,Vee=Gf.searchByValue,$ee=_0.promisify(Gf.search),Yee=_0.promisify(Vg.evaluateSQL),Kee={[F.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.CREATE_TABLE]:!0,[F.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[F.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[F.OPERATIONS_ENUM.DROP_TABLE]:!0,[F.OPERATIONS_ENUM.DROP_SCHEMA]:!0},V=jv();async function d0(e,t){try{if(e.body.operation!=="read_log"&&(Ct.log_level===F.LOG_LEVELS.INFO||Ct.log_level===F.LOG_LEVELS.DEBUG||Ct.log_level===F.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Ct.info(o)}}catch(n){Ct.error(n)}let r=await kee.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Kee[e.body.operation]&&vee.setSchemaDataToGlobal(n=>{n&&Ct.error(n)}),r}a(d0,"processLocalTransaction");var l0=Qee();Kg.exports={chooseOperation:f0,getOperationFunction:E0,operation:Yg,processLocalTransaction:d0};Hee(Kg.exports);Gee.operation=Yg;function f0(e){let t;try{t=E0(e)}catch(s){throw Ct.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=Vg.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Vg.checkASTPermissions(e,i);if(o)throw Ct.error(`${t0.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!==F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==F.OPERATIONS_ENUM.LOGIN&&e.operation!==F.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=Pee.verifyPerms(i,s);if(o)throw Ct.error(`${t0.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(s){throw el(s,"There was an error when trying to choose an operation path")}return r}a(f0,"chooseOperation");function E0(e){if(Ct.trace(`getOperationFunction with operation: ${e.operation}`),l0.has(e.operation))return l0.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(E0,"getOperationFunction");Fee("operation",Yg);function Yg(e,t){e.hdb_user=this[xee]?.user,e.bypass_auth=!t;let r=f0(e);return d0({body:e},r)}a(Yg,"operation");async function Wee(e){Ct.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[F.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case F.OPERATIONS_ENUM.INSERT:o=await Da.insert(i);break;case F.OPERATIONS_ENUM.UPDATE:o=await Da.update(i);break;case F.OPERATIONS_ENUM.UPSERT:o=await Da.upsert(i);break;case F.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(Wee,"catchup");async function is(e){qee(e);let t,r;try{r=await $g.addJob(e),t=r.createdJob,Ct.info("addJob result",r);let n=new n0.RunnerMessage(t,e);return await n0.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 Ct.error(s),el(n,s)}}a(is,"executeJob");function Qee(){let e=new Map;return e.set(F.OPERATIONS_ENUM.INSERT,new V(Da.insert)),e.set(F.OPERATIONS_ENUM.UPDATE,new V(Da.update)),e.set(F.OPERATIONS_ENUM.UPSERT,new V(Da.upsert)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new V(Gf.searchByConditions)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_HASH,new V(u0)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_ID,new V(u0)),e.set(F.OPERATIONS_ENUM.SEARCH_BY_VALUE,new V(Vee)),e.set(F.OPERATIONS_ENUM.SEARCH,new V($ee)),e.set(F.OPERATIONS_ENUM.SQL,new V(Yee)),e.set(F.OPERATIONS_ENUM.CSV_DATA_LOAD,new V(is,xf.csvDataLoad)),e.set(F.OPERATIONS_ENUM.CSV_FILE_LOAD,new V(is,xf.csvFileLoad)),e.set(F.OPERATIONS_ENUM.CSV_URL_LOAD,new V(is,xf.csvURLLoad)),e.set(F.OPERATIONS_ENUM.IMPORT_FROM_S3,new V(is,xf.importFromS3)),e.set(F.OPERATIONS_ENUM.CREATE_SCHEMA,new V(Ps.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_DATABASE,new V(Ps.createSchema)),e.set(F.OPERATIONS_ENUM.CREATE_TABLE,new V(Ps.createTable)),e.set(F.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new V(Ps.createAttribute)),e.set(F.OPERATIONS_ENUM.DROP_SCHEMA,new V(Ps.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_DATABASE,new V(Ps.dropSchema)),e.set(F.OPERATIONS_ENUM.DROP_TABLE,new V(Ps.dropTable)),e.set(F.OPERATIONS_ENUM.DROP_ATTRIBUTE,new V(Ps.dropAttribute)),e.set(F.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new V(Ff.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_DATABASE,new V(Ff.describeSchema)),e.set(F.OPERATIONS_ENUM.DESCRIBE_TABLE,new V(Ff.describeTable)),e.set(F.OPERATIONS_ENUM.DESCRIBE_ALL,new V(Ff.describeAll)),e.set(F.OPERATIONS_ENUM.DELETE,new V(Zu.deleteRecord)),e.set(F.OPERATIONS_ENUM.ADD_USER,new V(ju.addUser)),e.set(F.OPERATIONS_ENUM.ALTER_USER,new V(ju.alterUser)),e.set(F.OPERATIONS_ENUM.DROP_USER,new V(ju.dropUser)),e.set(F.OPERATIONS_ENUM.LIST_USERS,new V(ju.listUsersExternal)),e.set(F.OPERATIONS_ENUM.LIST_ROLES,new V(qf.listRoles)),e.set(F.OPERATIONS_ENUM.ADD_ROLE,new V(qf.addRole)),e.set(F.OPERATIONS_ENUM.ALTER_ROLE,new V(qf.alterRole)),e.set(F.OPERATIONS_ENUM.DROP_ROLE,new V(qf.dropRole)),e.set(F.OPERATIONS_ENUM.USER_INFO,new V(ju.userInfo)),e.set(F.OPERATIONS_ENUM.READ_LOG,new V(Iee)),e.set(F.OPERATIONS_ENUM.ADD_NODE,new V(wee)),e.set(F.OPERATIONS_ENUM.UPDATE_NODE,new V(Zv)),e.set(F.OPERATIONS_ENUM.SET_NODE_REPLICATION,new V(Zv)),e.set(F.OPERATIONS_ENUM.REMOVE_NODE,new V(Cee)),e.set(F.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new V(Dee)),e.set(F.OPERATIONS_ENUM.PURGE_STREAM,new V(Lee)),e.set(F.OPERATIONS_ENUM.SET_CONFIGURATION,new V(o0.setConfiguration)),e.set(F.OPERATIONS_ENUM.CLUSTER_STATUS,new V(Mee.clusterStatus)),e.set(F.OPERATIONS_ENUM.CLUSTER_NETWORK,new V(Uee)),e.set(F.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new V(Gg.setRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new V(Gg.getRoutes)),e.set(F.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new V(Gg.deleteRoutes)),e.set(F.OPERATIONS_ENUM.EXPORT_TO_S3,new V(is,e0.export_to_s3)),e.set(F.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new V(is,Zu.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new V(is,Zu.deleteFilesBefore)),e.set(F.OPERATIONS_ENUM.EXPORT_LOCAL,new V(is,e0.export_local)),e.set(F.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new V($g.handleGetJobsByStartDate)),e.set(F.OPERATIONS_ENUM.GET_JOB,new V($g.handleGetJob)),e.set(F.OPERATIONS_ENUM.GET_FINGERPRINT,new V(kg.getFingerprint)),e.set(F.OPERATIONS_ENUM.SET_LICENSE,new V(kg.setLicense)),e.set(F.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new V(kg.getRegistrationInfo)),e.set(F.OPERATIONS_ENUM.RESTART,new V(r0.restart)),e.set(F.OPERATIONS_ENUM.RESTART_SERVICE,new V(r0.restartService)),e.set(F.OPERATIONS_ENUM.CATCHUP,new V(Wee)),e.set(F.OPERATIONS_ENUM.SYSTEM_INFORMATION,new V(Bee.systemInformation)),e.set(F.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new V(is,Zu.deleteAuditLogsBefore)),e.set(F.OPERATIONS_ENUM.READ_AUDIT_LOG,new V(yee)),e.set(F.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new V(s0.createTokens)),e.set(F.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new V(s0.refreshOperationToken)),e.set(F.OPERATIONS_ENUM.LOGIN,new V(i0.login)),e.set(F.OPERATIONS_ENUM.LOGOUT,new V(i0.logout)),e.set(F.OPERATIONS_ENUM.GET_CONFIGURATION,new V(o0.getConfiguration)),e.set(F.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new V(Kt.customFunctionsStatus)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new V(Kt.getCustomFunctions)),e.set(F.OPERATIONS_ENUM.GET_COMPONENT_FILE,new V(Kt.getComponentFile)),e.set(F.OPERATIONS_ENUM.GET_COMPONENTS,new V(Kt.getComponents)),e.set(F.OPERATIONS_ENUM.SET_COMPONENT_FILE,new V(Kt.setComponentFile)),e.set(F.OPERATIONS_ENUM.DROP_COMPONENT,new V(Kt.dropComponent)),e.set(F.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new V(Kt.getCustomFunction)),e.set(F.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new V(Kt.setCustomFunction)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new V(Kt.dropCustomFunction)),e.set(F.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new V(Kt.addComponent)),e.set(F.OPERATIONS_ENUM.ADD_COMPONENT,new V(Kt.addComponent)),e.set(F.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new V(Kt.dropCustomFunctionProject)),e.set(F.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new V(Kt.packageComponent)),e.set(F.OPERATIONS_ENUM.PACKAGE_COMPONENT,new V(Kt.packageComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new V(Kt.deployComponent)),e.set(F.OPERATIONS_ENUM.DEPLOY_COMPONENT,new V(Kt.deployComponent)),e.set(F.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new V(a0.readTransactionLog)),e.set(F.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new V(is,a0.deleteTransactionLogsBefore)),e.set(F.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new V(c0.installModules)),e.set(F.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new V(c0.auditModules)),e.set(F.OPERATIONS_ENUM.GET_BACKUP,new V(Ps.getBackup)),e}a(Qee,"initializeOperationFunctionMap")});var Vf=T((GEe,S0)=>{"use strict";var Wg=M(),zee=J(),rl=Y(),{handleHDBError:Qg,hdb_errors:kf}=Z(),{isMainThread:Jee}=require("worker_threads"),{Readable:Xee}=require("stream"),m0=require("os"),jee=require("util"),Zee=LS(),ete=jee.promisify(Zee.authorize),p0=h0(),{createGzip:tte,constants:rte}=require("zlib");function nte(e){let t=`Found an uncaught exception with message: ${e.message}. ${m0.EOL}Stack: ${e.stack} ${m0.EOL}Terminating ${Jee?"HDB":"thread"}.`;console.error(t),rl.fatal(t),process.exit(1)}a(nte,"handleServerUncaughtException");function ste(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 n=e.statusCode?e.statusCode:kf.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(ste,"serverErrorHandler");function ite(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Qg(new Error,"Invalid JSON.",kf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(zee.isEmpty(e.body.operation)){let n=Qg(new Error,"Request body must include an 'operation' property.",kf.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(ite,"reqBodyValidationHandler");function ote(e,t,r){let n;e.body.operation!==Wg.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Wg.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Wg.OPERATIONS_ENUM.LOGOUT?ete(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{rl.warn(s),rl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Qg(s,i,kf.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(ote,"authHandler");async function ate(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=p0.chooseOperation(e.body);let s=await p0.processLocalTransaction(e,n);if(s instanceof Xee&&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(tte({level:rte.Z_BEST_SPEED})))}return s}catch(s){throw rl.error(s),s}}a(ate,"handlePostRequest");S0.exports={authHandler:ote,handlePostRequest:ate,handleServerUncaughtException:nte,serverErrorHandler:ste,reqBodyValidationHandler:ite}});var A0=T((VEe,R0)=>{"use strict";var cte=require("fastify-plugin"),{handlePostRequest:T0,authHandler:ute,reqBodyValidationHandler:lte}=Vf();async function _te(e){e.decorate("hdbCore",{preValidation:[lte,ute],request:t=>g0(T0(t,response)),requestWithoutAuthentication:(t,r)=>g0(T0(t,r,!0))})}a(_te,"hdbCore");async function g0(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(g0,"convertAsyncIterators");R0.exports=cte(_te)});var N0=T((KEe,b0)=>{"use strict";var YEe=require("fs"),zg=j();zg.initSync();var{CONFIG_PARAMS:O0}=M(),dte=1024*1024*1024;function fte(e){let t=zg.get(O0.HTTP_TIMEOUT),r=zg.get(O0.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:dte,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(fte,"getServerOptions");b0.exports=fte});var w0=T((QEe,I0)=>{"use strict";var Jg=j();Jg.initSync();var{CONFIG_PARAMS:y0}=M();function Ete(){let e=Jg.get(y0.HTTP_CORSACCESSLIST),t=Jg.get(y0.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(Ete,"getCORSOptions");I0.exports=Ete});var L0=T((JEe,D0)=>{"use strict";var C0=j();C0.initSync();var hte=M();function mte(){return C0.get(hte.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(mte,"getHeaderTimeoutConfig");D0.exports=mte});var jg={};Ke(jg,{customFunctionsServer:()=>Tte,ready:()=>K0,start:()=>Ste});function Ste(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){vs||(vs=Y0(t),ut.http((await vs).server));let o=await vs,c=(0,Xg.dirname)(s),u=(0,Xg.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!M0.has(c)){M0.add(c);try{o.register(Rte(c,u))}catch(_){if(_.message==="Root plugin has already booted")ke.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:K0}}async function Tte(){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 gte();let e=x0.get(F0.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=vs=await Y0(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 gte(){try{ke.info("Custom Functions starting configuration."),await q0.setUsersToGlobal(),ke.info("Custom Functions completed configuration.")}catch(e){ke.error(e)}}function Rte(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(H0.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:ke.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?ke.error(s.message):s&&ke.error(s),o()})}catch(n){ke.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Y0(e){ke.info("Custom Functions starting buildServer.");let t=(0,G0.default)(e),r=(0,P0.default)(t);r.server.headersTimeout=(0,V0.default)(),r.setErrorHandler($0.serverErrorHandler);let n=(0,k0.default)();return n&&r.register(v0.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(B0.default),await r.register(pte),await r.after(),lg(r),ke.info("Custom Functions completed buildServer."),r}function K0(){if(vs)return vs.then?vs.then(e=>e.ready()):vs.ready()}var Xg,U0,P0,v0,B0,H0,x0,F0,ke,pte,q0,G0,k0,V0,$0,vs,M0,W0=Re(()=>{Xg=require("path"),U0=require("fs"),P0=B(require("fastify")),v0=B(require("@fastify/cors")),B0=B(gg()),H0=B(require("@fastify/autoload")),x0=B(j()),F0=B(M()),ke=B(Y()),pte=B(A0()),q0=B(sn()),G0=B(N0()),k0=B(w0()),V0=B(L0()),$0=B(Vf());ma();rr();M0=new Set;a(Ste,"start");a(Tte,"customFunctionsServer");a(gte,"setUp");a(Rte,"buildRouteFolder");a(Y0,"buildServer");a(K0,"ready")});var Zg={};Ke(Zg,{start:()=>Ate});function Ate(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,j0.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=Q0.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,J0.default)(s,(0,X0.realpathSync)(o))}}return i(s)},{runFirst:!0})),Q0.set(r,n)}}}var J0,X0,j0,Q0,z0,Z0=Re(()=>{J0=B(require("send")),X0=require("fs"),j0=B(require("serve-static")),Q0=new Map;a(Ate,"start")});function Nte(e,t=1,r){if(eR++,(0,go.startWorker)("server/threads/threadServer.js",{name:Kf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===Kf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});bte.push(s),await s,La.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Yf.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=La.indexOf(n);o>-1&&La.splice(o,1)}if(a(i,"removeWorker"),Ma){let o=Ma;Ma=[];for(let c of o)nB[c.localPort](null,c)}}}),r){let n=setInterval(()=>{tR?tR=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,go.shutdownWorkers)(),eR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function sB(e=0,t){if(typeof e=="string")try{(0,Wf.existsSync)(e)&&(0,Wf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=yte:r=Ite(t):r=nR;let n=(0,Ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=nB[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),tR=!0,r(o,(c,u)=>{if(!c){if(eB){let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});eB.deliverSocket(l,e,u),l.resume()}else eR>0?(Ma.length===0&&setTimeout(()=>{Ma.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,Ma.push(o)):(console.log("start up a dynamic thread to handle request"),Nte(0));Fr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Ua.Socket({handle:o,writable:!0,readable:!0});Lte(l,c,e)}Fr(!0,"socket-routed")})};let s=Xc();rR.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 nR(e,t){let r,n=0;for(let s of La){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=$f)return $f=i,t(r);n=i}$f=0,t(r)}function yte(e,t){let r={};e.getpeername(r);let n=r.address,s=Pa.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);nR(e,o=>{Pa.set(n,{worker:o,lastUsed:i}),t(o)})}function Ite(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ua.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Pa.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);nR(n,d=>{Pa.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Cte(){$f=0;for(let e of La)e.expectedIdle=e.recentELU.idle+wte,e.requests=1;La.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Lte(e,t,r){let n=Dte++;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(),Yf.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")),Yf.delete(n)),s.event=="destroy"&&(e.destroy(),Yf.delete(n))})}var go,Ua,Kf,rR,Wf,rB,Ote,La,Ma,nB,eB,eR,bte,tR,$f,tB,Pa,wte,Yf,Dte,iB=Re(()=>{go=B(rt()),Ua=require("net"),Kf=B(M()),rR=B(Y()),Wf=require("fs");bs();rB=require("worker_threads"),Ote=B(Vi()),La=[],Ma=[],nB=[],eR=0,bte=[];rB.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Nte,"startHTTPWorker");a(sB,"startSocketServer");$f=0;a(nR,"findMostIdleWorker");tB=36e5,Pa=new Map;a(yte,"findByRemoteAddressAffinity");a(Ite,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Pa)r.lastUsed+tB<e&&Pa.delete(t)},tB).unref();wte=1e3;a(Cte,"updateWorkerIdleness");(0,go.setMonitorListener)(Cte);Yf=new Map,Dte=1;a(Lte,"proxySocket")});var aR={};Ke(aR,{Request:()=>sR,createReuseportFd:()=>Qf});var oB,sR,iR,oR,Qf,zf=Re(()=>{oB=require("os"),sR=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 oR(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 iR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},iR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},oR=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,oB.platform)()!="win32"&&(Qf=require("node-unix-socket").createReuseportFd)});var lB=T((_he,uB)=>{"use strict";var Mte=require("cluster"),Ro=j();Ro.initSync();var cB=M(),ohe=require("util"),Bs=Y(),ahe=require("fs"),Ute=require("fastify"),che=Xc(),Pte=require("@fastify/cors"),vte=require("@fastify/compress"),Bte=require("@fastify/static"),Hte=gg(),xte=require("path"),{PACKAGE_ROOT:Fte}=M(),qte=Xs(),Gte=J(),kte=sn(),Vte=Vi(),{server:$te}=(rr(),ee(wi)),{node_request_key:uhe}=(zf(),ee(aR)),{authHandler:Yte,handlePostRequest:Kte,serverErrorHandler:Wte,reqBodyValidationHandler:Qte}=Vf(),lhe=require("net"),{registerContentHandlers:zte}=(ma(),ee(VP)),Jte=6e4,Xte=1024*1024*1024,jte="TRUE",{CONFIG_PARAMS:nl}=cB,va;uB.exports={hdbServer:aB,start:aB};async function aB(e){try{Bs.info("In Fastify server"+process.cwd()),Bs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Mte.isMaster,await Zte();let t=e.securePort>0;va=ere(t),await va.ready(),e||(e={}),e.isOperationsServer=!0;try{$te.http(va.server,e),va.server.closeIdleConnections||await va.listen({port:0,host:"::"})}catch(r){throw va.close(),Bs.error(r),Bs.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bs.fatal(t),process.exit(1)}}a(aB,"operationsServer");async function Zte(){Bs.trace("Configuring HarperDB process."),qte.setSchemaDataToGlobal(),await kte.setUsersToGlobal(),await Vte.getLicense()}a(Zte,"setUp");function ere(e){Bs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=tre(e),r=Ute(t);r.server.headersTimeout=nre(),r.setErrorHandler(Wte);let n=rre();n&&r.register(Pte,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Hte),r.register(vte),r.register(Bte,{root:xte.join(Fte,"studio/build-local")}),zte(r);let s=Ro.get(cB.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Gte.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Qte,Yte],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Kte(i,o)}),r.get("/health",()=>"HarperDB is running."),Bs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(ere,"buildServer");function tre(e){let t=Ro.get(nl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ro.get(nl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Xte,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(tre,"getServerOptions");function rre(){let e=Ro.get(nl.OPERATIONSAPI_NETWORK_CORS),t=Ro.get(nl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===jte)&&(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(rre,"getCORSOpts");function nre(){return Ro.get(nl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Jte}a(nre,"getHeaderTimeoutConfig")});var gB=T((mhe,TB)=>{"use strict";var{decode:sre}=require("msgpackr"),{isMainThread:fhe,parentPort:ire,threadId:Ehe}=require("worker_threads"),uR=Nt(),Hs=st(),ore=M(),pi=Y(),_B=j(),fB=M();rt();var are=Ts(),{recordAction:cre,recordActionBinary:ure}=(bs(),ee(tu)),{publishToStream:lre}=uR,{ConsumerEvents:_re}=require("nats"),hhe={durable:Hs.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Hs.WORK_QUEUE_CONSUMER_NAMES.deliver_group},dre,fre,Ere,EB,hB;TB.exports={initialize:lR,workQueueListener:SB,setSubscription:hre,setIgnoreOrigin:pre,getDatabaseSubscriptions:mre};async function lR(){hB=!0,pi.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await uR.getNATSReferences();dre=e,fre=e.info.server_name,Ere=t,EB=r}a(lR,"initialize");var Xf=new Map;function hre(e,t,r){let n=Xf.get(e);n||Xf.set(e,n=new Map),n.set(t,r),hB||lR().then(SB)}a(hre,"setSubscription");function mre(){return Xf}a(mre,"getDatabaseSubscriptions");var mB;function pre(e){mB=e}a(pre,"setIgnoreOrigin");var pB=100,dB=new Array(pB),Jf=0;async function SB(){let e=await EB.consumers.get(Hs.WORK_QUEUE_CONSUMER_NAMES.stream_name,Hs.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(ire?.on("message",async n=>{let{type:s}=n;s===fB.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===_re.HeartbeatsMissed){let s=n.data;pi.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(pi.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await dB[Jf],dB[Jf]=Sre(n).catch(s=>{pi.error(s)}),++Jf>=pB&&(Jf=0)}catch(n){pi.error("Error consuming clustering ingest, restarting consumer",n)}uR.clearClientCache(),await lR()}}a(SB,"workQueueListener");async function Sre(e){let t=sre(e.data);cre(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=_B.get(ore.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Hs.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Hs.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Hs.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!mB),ure(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Hs.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;pi.trace("processing message:",o,c,_,(l?"records: "+l.map(b=>b?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),pi.trace(`messageProcessor nats msg id: ${e.headers.get(Hs.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:S,user:p,node_name:g}=f||{},A=Xf.get(c)?.get(_);if(!A)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,A.send(t);else if(l.length===1&&!u)A.send({type:cR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:S,table:_,onCommit:h,user:p,nodeName:g});else{let b=l.map((v,G)=>({type:cR(o),value:v,expiresAt:E,id:d?.[G],table:_}));for(;u;)b.push({type:cR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;A.send({type:"transaction",writes:b,table:_,timestamp:S,onCommit:h,user:p,nodeName:g})}_B.get(fB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&lre(e.subject.split(".").slice(0,-1).join("."),are.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){pi.error(o)}e.ack()}a(Sre,"messageProcessor");function cR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(cR,"convertOperation")});var mR={};Ke(mR,{disableNATS:()=>gre,publishToStream:()=>rE,setNATSReplicator:()=>_R,setPublishToStream:()=>Rre,setSubscription:()=>hR,start:()=>Tre});function Tre(){Zf.default.get(eE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ore()}function gre(e=!0){NB=e}function Rre(e,t){rE=e,hR=t}function Ore(){if(NB||process.env._DISABLE_NATS)return;let e=Ln(),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];_R(s,r,i)}}pR((r,n)=>{_R(r.tableName,r.databaseName,r),n&&IB(r)}),!RB&&(RB=!0)}function _R(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 Ft{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){IB(i)}static subscribe(){let i=new bn;return hR(t,e,i),i}static subscribeOnThisThread(i){return i<Are}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 jf(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=yB;return i}a(n,"getNATSTransaction")}function IB(e){let t=Zf.default.get(eE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);rE(`${fR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ER.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 AB,fR,ER,OB,bB,Zf,eE,tE,NB,rE,hR,Are,yB,RB,jf,dR,wB=Re(()=>{Ae();Nn();AB=B(Nt()),fR=B(st()),ER=B(Ts());fc();OB=B(gB()),bB=B(Mr()),Zf=B(j()),eE=B(M()),tE=B(Y());a(Tre,"start");a(gre,"disableNATS");rE=AB.publishToStream,hR=OB.setSubscription;a(Rre,"setPublishToStream");Are=2;a(Ore,"assignReplicationSource");a(_R,"setNATSReplicator");a(IB,"publishSchema");jf=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=Zf.default.get(eE.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||(tE.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(rE(`${fR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,ER.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw tE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},dR=class extends jf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,bB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};yB=new dR});var kB=T(Oo=>{"use strict";var{isMainThread:bre,parentPort:ol,threadId:sl}=require("worker_threads"),{Socket:Nre,createServer:yre}=require("net"),{createServer:Ire,IncomingMessage:wre}=require("http"),{createServer:Cre}=require("https"),{readFileSync:Ba,unlinkSync:CB,existsSync:Dre}=require("fs"),xn=Y(),Ve=j(),gr=M(),{server:iE}=(rr(),ee(wi)),{WebSocketServer:Lre}=require("ws"),{createServer:Mre}=require("tls"),{getTicketKeys:Ure,restartNumber:Pre,getWorkerIndex:DB}=rt(),{Headers:vB}=(Vd(),ee(fU)),{recordAction:il,recordActionBinary:vre}=(bs(),ee(tu)),{Request:BB,createReuseportFd:LB}=(zf(),ee(aR)),{checkMemoryLimit:Bre}=Vi(),HB=require("tls"),MB=HB.createSecureContext;HB.createSecureContext=function(e){if(!e.cert||!e.key)return MB(e);let t={...e};delete t.key,delete t.cert;let r=MB(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){Pre<=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:Ohe,CONFIG_PARAMS:Hre}=gr;Ve.initSync();var xre=Ve.get(Hre.HTTP_SESSIONAFFINITY),os={};Oo.registerServer=AR;Oo.httpServer=OR;Oo.deliverSocket=RR;Oo.startServers=xB;Oo.when_components_loaded=null;iE.http=OR;iE.request=kre;iE.socket=Vre;iE.ws=$re;var SR=[],nE=[],Fre,Ao={},sE={},qre=[],TR=[];function xB(){return Oo.when_components_loaded=bR().loadRootComponents(!0).then(()=>{ol?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)RR(n,r,s);else if(t.requestId)Gre(t);else if(t.type===gr.ITC_EVENT_TYPES.SHUTDOWN){xn.trace("received shutdown request",sl);for(let i in os){let o=os[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),xn.info("Closed all http connections",i,sl)},4e3).unref()),o.close?.(()=>{if(Ve.get(gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&DB()==0)try{CB(Ve.get(gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,sl),o.cantCleanupProperly||xn.warn("Had to forcefully exit the thread",sl),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(LB&&!xre)for(let t in os){let r=os[t];if(isNaN(t)&&DB()==0){Dre(t)&&CB(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=LB(+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,sl)}).on("error",i)}))}Promise.all(e).then(()=>{ol?.postMessage({type:gr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(xB,"startServers");bre||xB();function RR(e,t,r){let n=e?.read?e:new Nre({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=os[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=os[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(RR,"deliverSocket");var UB=new Map;function Gre(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=UB.get(s),r){case"connection":i=RR(void 0,t),UB.set(s,i),i.write=(c,u,_)=>(ol.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(ol.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),ol.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(Gre,"proxyRequest");function AR(e,t,r=!0){!+t&&t!==Ve.get(gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ve.get(gr.CONFIG_PARAMS.HTTP_PORT),10));let n=os[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",PB),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else os[t]=e;e.on("unhandled",PB)}a(AR,"registerServer");function FB(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=[],Ve.get(gr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ve.get(gr.CONFIG_PARAMS.HTTP_PORT),secure:Ve.get(gr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ve.get(gr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ve.get(gr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ve.get(gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ve.get(gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(FB,"getPorts");function OR(e,t){for(let{port:r,secure:n}of FB(t))qB(r,n,t?.isOperationsServer),typeof e=="function"?TR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,AR(e,r,!1)),sE[r]=gR(TR,r),Fre=gR(qre,r)}a(OR,"httpServer");function qB(e,t,r){if(!Ao[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Ve.get(n+"_keepAliveTimeout"),headersTimeout:Ve.get(n+"_headersTimeout"),requestTimeout:Ve.get(n+"_timeout")},i=Ve.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=Ve.get(n+"tls_privateKey"),u=Ve.get(n+"tls_certificate"),_=Ve.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:Ba(c),ciphers:Ve.get("tls_ciphers"),cert:Ba(u),ca:_&&Ba(_),requestCert:!!i,ticketKeys:Ure()})}let o=Bre();Ao[e]=(t?Cre:Ire)(s,async(c,u)=>{try{let l=performance.now(),d=new BB(c,u);r&&(d.isOperationsServer=!0);let f=await sE[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=GB(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 v of f.headers||[])u.setHeader(v[0],v[1]);return c.baseRequest=d,u.baseResponse=f,Ao[e].emit("unhandled",c,u)}let E=f.status||200,h=performance.now(),S=h-l,p=f.body,g;if(!f.handlesHeaders){let v=f.headers||new vB;if(p?p.length>=0&&(typeof p=="string"?v.set("Content-Length",Buffer.byteLength(p)):v.set("Content-Length",p.length),g=!0):(v.set("Content-Length","0"),g=!0),v.append){let G=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(G+=", miss"),v.append("Server-Timing",G,!0)}u.writeHead(E,v&&(v[Symbol.iterator]?Array.from(v):v)),g&&u.end(p)}let A=d.handlerPath,b=d.method;if(il(S,"duration",A,b,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),vre(E<400,"success",A,b),!g)if(p?.pipe){p.pipe(u),p.destroy&&u.on("close",()=>{p.destroy()});let v=0;p.on("data",G=>{v+=G.length}),p.on("end",()=>{il(performance.now()-h,"transfer",A,b),il(v,"bytes-sent",A,b)})}else p?.then?p.then(v=>{u.end(v)},_):u.end(p)}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&&(Ao[e].on("secureConnection",c=>{c._parent.startTime&&il(performance.now()-c._parent.startTime,"tls-handshake",e),il(c.isSessionReused(),"tls-reused",e)}),Ao[e].isSecure=!0),AR(Ao[e],e)}return Ao[e]}a(qB,"getHTTPServer");function gR(e,t){let r=GB;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(gR,"makeCallbackChain");function GB(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new vB}}a(GB,"unhandled");function kre(e,t){OR(e,{requestOnly:!0,...t})}a(kre,"onRequest");function Vre(e,t){let r;if(t.securePort){let n=Ve.get("tls_privateKey"),s=Ve.get("tls_certificate"),i=t.mtls?.certificateAuthority||Ve.get("tls_certificateAuthority");r=Mre({ciphers:Ve.get("tls_ciphers"),key:Ba(n),cert:Ba(s),ca:i&&Ba(i),rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls},e),os[t.securePort]=r}return t.port&&(r=yre(e),os[t.port]=r),r}a(Vre,"onSocket");Object.defineProperty(wre.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 $re(e,t){for(let{port:r,secure:n}of FB(t)){nE[r]||(nE[r]=new Lre({server:qB(r,n)}),nE[r].on("connection",async(i,o)=>{try{let c=new BB(o);c.isWebSocket=!0;let u=sE[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<SR.length;l++){let d=SR[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)}}),nE[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";SR.push({listener:e,protocol:s}),sE[r]=gR(TR,r)}}a($re,"onWebSocket");function PB(e,t){t.writeHead(404),t.end(`Not found
|
|
27
|
+
`)}a(PB,"defaultNotFound")});async function KB({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await NR.getResource(e,{});s=new wR(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await NR.get(e);i&&i.delete()}s=new aE(e,t)}return n&&(n.id=e,n.user={username:t?.username},al.put(n)),s}function yR(){return oE++,oE>65500&&(oE=1),oE}function IR(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=li.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 Xe(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var VB,bo,$B,YB,NR,al,oE,aE,wR,WB=Re(()=>{Ae();Cu();VB=B(Mr()),bo=B(Y());zi();$B=B(rt()),YB=B(kB());rr();NR=lt({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"}]}}]}),al=lt({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,$B.getWorkerIndex)()===0&&(async()=>{await YB.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of al.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await ut.getUser(r.user.username)),Xe(r,()=>{try{IR(r,t)}finally{al.delete(e.id,r)}})}})();a(KB,"getSession");oE=1;a(yR,"getNextMessageId");aE=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(g=>g.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,bo.trace)("Resuming subscription from",s,"from",o);let E=li.getMatch(_);if(!E){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let g=f.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,g.indexOf("+")===g.length-1)f.onlyChildren=!0,f.url="/"+g.slice(0,g.length-1);else{let A=g.split("/"),b;for(let H=0;H<A.length;H++)if(A[H].indexOf("+")>-1)if(A[H]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let v=!0;A[A.length-1]==="#"&&(A.length--,v=!1),b&&(n=a(H=>{let P=H.id;if(!Array.isArray(P)||v&&P.length!==A.length)return!1;for(let z=0;z<A.length;z++)if(A[z]!=="+"&&A[z]!==P[z])return!1;return!0},"filter"));let G=A.indexOf("+");f.url="/"+(G>-1?A.slice(0,G):A).concat("").join("/")}}let h=E.path,S=E.Resource,p=await Xe(f,async()=>{let g=await S.subscribe(f);if(!g)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let A of g)try{let b;if(A.type&&A.type!=="put"&&A.type!=="delete"&&A.type!=="message"&&A.type!=="patch"||n&&!n(A))continue;r?(A.topic=s,b=this.needsAcknowledge(A)):(A.acknowledge?.(),b=yR());let v=A.id;Array.isArray(v)&&(v=ha(v)),v==null&&(v=""),this.listener(h+"/"+v,A.value,b,t)}catch(b){(0,bo.warn)(b)}})(),g});return p.topic=s,p.qos=t.qos,this.subscriptions.push(p),p}resume(){}needsAcknowledge(t){let r=yR();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,IR(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Xe(r,async()=>{if(!t){let n=await al.get(this.sessionId,r);n?.doesExist()&&await IR(n,n.data,r)}await al.delete(this.sessionId,r)}).catch(n=>{(0,bo.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(IR,"publish");wR=class extends aE{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=yR(),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,bo.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,VB.getNextMonotonicTime)()),(0,bo.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),NR.put(this.sessionRecord)),t.qos}}});var CR={};Ke(CR,{bypassAuth:()=>Yre,start:()=>Kre});function Yre(){jB=!0}function Kre({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i,sessions:new Set},c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=JB(_,(h,S)=>{if(_.send(h),S&&_._socket.writableNeedDrain)return new Promise(p=>this._socket.once("drain",p))},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Rr.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,Rr.error)(E)}else if(u.required)return(0,Rr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&jB&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,XB.getSuperUser)());let{onMessage:d,onClose:f}=JB(_,E=>_.write(E),null,l,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Rr.info)("Socket error",E)})},{port:t,securePort:s,mtls:u})),c}function JB(e,t,r,n,s){zB||(zB=!0,eu(d=>{cE>0&&d.push({metric:"mqtt-connections",connections:cE,byThread:!0})}));let i;cE++;let o,c={protocolVersion:4},u=(0,lE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){cE--,i||(i=!0,o?.disconnect(),s.sessions.delete(o),on(!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 ut.getUser(d.username,d.password.toString(),r),(0,uE.get)(as.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&QB.notify({username:n.username,status:as.AUTH_AUDIT_STATUS.SUCCESS,type:as.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,uE.get)(as.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&QB.error({username:n.username,status:as.AUTH_AUDIT_STATUS.FAILURE,type:as.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return on(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let b=e.deserialize||(e.deserialize=Eo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?b(d.will.payload):void 0,delete d.will.payload}o=KB({user:n,...d}),o=await o,s.sessions.add(o)}catch(b){return(0,Rr.error)(b),on(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:b.code||5,returnCode:b.code||128})}on(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((b,v,G,H)=>{try{let P=b.indexOf("/",1),z=P>0?b.slice(0,P):b;f({cmd:"publish",topic:b,payload:E(v),messageId:G||Math.floor(Math.random()*1e8),qos:H.qos},z)}catch(P){(0,Rr.error)(P),o?.disconnect(),s.sessions.delete(o)}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let b of d.subscriptions){let v;try{v=(await o.addSubscription(b,b.qos>=1)).qos||0}catch(G){(0,Rr.error)(G),v=c.protocolVersion<5?128:G.statusCode===403?135:G.statusCode===404?143:128}h.push(v)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let b=[];for(let v of d.unsubscriptions)b.push(o.removeSubscription(v)?0:17);f({cmd:"unsuback",granted:b,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let S=d.qos===2?"pubrec":"puback",p=e.deserialize||(e.deserialize=Eo(r?.headers.get?.("content-type"))),g=d.payload?.length>0?p(d.payload):void 0,A;try{A=await o.publish(d,g)}catch(b){(0,Rr.warn)(b),d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:A===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.sessions.delete(o),on(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Rr.error)(h),f({cmd:"disconnect"})}function f(h,S){let p=(0,lE.generate)(h,c);t(p),Fr(p.length,"bytes-sent",S,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return di(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var lE,XB,uE,as,Rr,QB,jB,zB,cE,ZB=Re(()=>{lE=require("mqtt-packet");WB();XB=B(sn());ma();bs();rr();uE=B(j()),as=B(M()),Rr=B(Y()),QB=(0,Rr.loggerWithTag)("auth-event"),jB=(0,uE.get)(as.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Yre,"bypassAuth");a(Kre,"start");cE=0;a(JB,"onSocket")});var tf={};Ke(tf,{component_errors:()=>xa,loadComponent:()=>_E,loadComponentDirectories:()=>cH,setErrorReporter:()=>Jre});function cH(e,t){t&&(LR=t),e&&(MR=e);let r=[];if((0,Fn.existsSync)(DR)){let s=(0,Fn.readdirSync)(DR,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(DR,o);r.push(_E(c,LR,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(_E(n,LR,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{aH=!0})}function Jre(e){ul=e}async function _E(e,t,r,n,s,i){if(!tH.has(e)){tH.set(e,!0),s&&(MR=s);try{let o;n&&(xa=new Map);let c=(0,Rt.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Fn.existsSync)(c)?o=n?(0,oH.getConfigObj)():(0,rH.parseDocument)((0,Fn.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=UR;let u=[],_=n;for(let l in o){let d=o[l];if(xa.set(n?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let A=e,b;for(;!(0,Fn.existsSync)(b=(0,Rt.join)(A,"node_modules",l));)if(A=(0,Rt.dirname)(A),A.length<(0,iH.getHdbBasePath)().length){b=null;break}if(b)f=await _E(b,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=zre[l];if(!f)continue;u.push(f);let h=a(A=>(A.origin=r,lt(A)),"ensureTable"),S=d.network||(d.port||d.securePort)&&d,p=S?.securePort||S?.https&&S.port,g=!S?.https&&S?.port;if(Ha.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:g,securePort:p,resources:t,...d})||f,n&&S))for(let A of[g,p])try{if(+A&&!eH.includes(A)){let b=PR.get(vR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);b&&cl.default.warn("Session affinity is not recommended and may cause memory leaks"),(b||!Qf)&&(eH.push(A),sB(A,b))}}catch(b){console.error("Error listening on socket",A,b,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:g,securePort:p,resources:t,...d})||f),MR.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,sH.handleHDBError)("Can not reference parent directories");let A=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),b=A.indexOf("/*");if(b>-1&&d.files!==UR[l]?.files&&!(0,Fn.existsSync)(A.slice(0,b)))throw new Error(`The path '${A.slice(0,b)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let v=(0,Rt.basename)(e),G=d.path||"/";G=G.startsWith("/")?G:G.startsWith("./")?"/"+v+G.slice(2):G==="."?"/"+v:"/"+v+"/"+G;let H,P,z;if(d.root){let Q=d.root;Q.startsWith("/")&&(Q=Q.slice(1)),Q.endsWith("/")&&(Q=Q.slice(0,-1)),Q+="/",P=(0,Rt.join)(e,Q)}else(z=A.indexOf("/*"))>-1&&(P=A.slice(0,z+1),H=(0,Rt.relative)(e,P));let W=!1;if(Ha.isMainThread&&f.setupDirectory&&(W=await f.setupDirectory?.(G,P,t)),t.isWorker&&f.handleDirectory&&(W=await f.handleDirectory?.(G,P,t)),W)continue;for(let Q of await(0,nH.default)(A,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:pe}=Q;_=!0;let oe=(0,Rt.relative)(e,se).replace(/\\/g,"/");if(H)if(oe.startsWith(H))oe=oe.slice(H.length+1);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Fe=G+(G.endsWith("/")?"":"/")+oe;try{if(pe.isFile()){let ce=await Qre(se);Ha.isMainThread&&await f.setupFile?.(ce,Fe,se,t),t.isWorker&&await f.handleFile?.(ce,Fe,se,t)}else Ha.isMainThread&&await f.setupDirectory?.(Fe,se,t),t.isWorker&&await f.handleDirectory?.(Fe,se,t)}catch(ce){ce.message=`Could not load ${pe.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${ce.message}`,ul?.(ce),((0,Fa.getWorkerIndex)()===0?console:cl.default).error(ce),t.set(d.path||"/",new ll(ce)),xa.set(n?l:(0,Rt.basename)(e),ce.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.basename)(e)}' due to: ${h.message}`,ul?.(h),((0,Fa.getWorkerIndex)()===0?console:cl.default).error(h),t.set(d.path||"/",new ll(h),null,!0),xa.set(n?l:(0,Rt.basename)(e),h.message)}}if(Ha.isMainThread&&!aH&&i&&(0,Fa.watchDir)(e,async()=>cH()),o.extensionModule)return await Xl((0,Rt.join)(e,o.extensionModule));if(!_&&t.isWorker){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;ul?.(new Error(l)),((0,Fa.getWorkerIndex)()===0?console:cl.default).error(l),xa.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}`,ul?.(o),t.set("",new ll(o))}}}var Fn,Rt,Ha,rH,PR,vR,nH,Fa,cl,sH,iH,Wre,oH,Qre,DR,MR,aH,LR,xa,zre,UR,eH,tH,ul,ll,rf=Re(()=>{Fn=require("fs"),Rt=require("path"),Ha=require("worker_threads"),rH=require("yaml"),PR=B(j()),vR=B(M());JO();eb();tb();iv();W0();Z0();nH=B(require("fast-glob")),Fa=B(rt()),cl=B(Y());Ah();rr();sH=B(Z());Nn();Ae();iB();iH=B(j()),Wre=B(lB());Wd();wB();ZB();oH=B(Lr());zf();({readFile:Qre}=Fn.promises),DR=PR.get(vR.CONFIG_PARAMS.COMPONENTSROOT),MR=new Map,xa=new Map;a(cH,"loadComponentDirectories");zre={REST:Rf,rest:Rf,graphqlSchema:Rh,jsResource:bh,fastifyRoutes:jg,login:yh,static:Zg,operationsApi:Wre,customFunctions:{},http:{},clustering:mR,authentication:Du,mqtt:CR},UR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(UR,"static",{value:{files:"web/**"}});eH=[],tH=new Map;a(Jre,"setErrorReporter");a(_E,"loadComponent");ll=class extends Ft{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 bR=T((zhe,lH)=>{var{isMainThread:uH}=require("worker_threads"),{getTables:Xre}=(Ae(),ee(qe)),{loadComponentDirectories:jre,loadComponent:Zre}=(rf(),ee(tf)),{resetResources:ene}=(Cu(),ee(dU)),tne=HT(),rne=Lr(),{dirname:nne}=require("path"),{getConnection:sne}=Nt(),ine=j(),one=M(),BR=new Map;async function ane(e=!1){!uH&&ine.get(one.CONFIG_PARAMS.CLUSTERING_ENABLED)&&sne();try{uH&&await tne()}catch(n){console.error(n)}let t=ene();Xre(),t.isWorker=e,await Zre(nne(rne.getConfigFilePath()),t,"hdb",!0,BR),await jre(BR,t);let r=[];for(let[n]of BR)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(ane,"loadRootComponents");lH.exports.loadRootComponents=ane});var rt=T((Xhe,Ti)=>{"use strict";var{Worker:cne,MessageChannel:une,parentPort:cs,isMainThread:GR,threadId:lne,workerData:xs}=require("worker_threads"),{PACKAGE_ROOT:_ne}=M(),{join:EH,isAbsolute:dne,extname:fne}=require("path"),{server:hH}=(rr(),ee(wi)),{watch:Ene,readdir:hne}=require("fs/promises"),{totalmem:_H}=require("os"),_l=M(),mH=j(),Fs=Y(),{randomBytes:mne}=require("crypto"),{_assignPackageExport:pne}=require("../../index"),Sne=M(),dH=1024*1024,Si=[],hn=[],Tne=50,kR=1e4,gne="restart",pH="request_thread_info",SH="resource_report",TH="thread_info",gH="added-port",Rne="ack",HR;pne("threads",hn);Ti.exports={startWorker:xR,restartWorkers:$R,shutdownWorkers:yne,workers:Si,setMonitorListener:Pne,onMessageFromWorkers:Ine,onMessageByType:yH,broadcast:Cne,broadcastWithAcknowledgement:Lne,setChildListenerByType:Nne,getWorkerIndex:RH,getWorkerCount:AH,getTicketKeys:OH,setMainIsWorker:One,setTerminateTimeout:Ane,restartNumber:xs?.restartNumber||1};hn.onMessageByType=yH;hn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=hn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var VR;function Ane(e){kR=e}a(Ane,"setTerminateTimeout");function RH(){return xs?xs.workerIndex:VR?0:void 0}a(RH,"getWorkerIndex");function AH(){return xs?xs.workerCount:VR?1:void 0}a(AH,"getWorkerCount");function One(e){VR=e}a(One,"setMainIsWorker");var dE;function OH(){return dE||(dE=GR?mne(48):xs.ticketKeys,dE)}a(OH,"getTicketKeys");Object.defineProperty(hH,"workerIndex",{get(){return RH()}});Object.defineProperty(hH,"workerCount",{get(){return AH()}});var bH={[pH](e,t){Mne(t)},[SH](e,t){Une(t,e)}};function xR(e,t={}){let r=process.constrainedMemory?.()||_H();r=Math.min(r,_H(),2e4*dH);let n=mH.get(_l.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/dH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of hn){let _=new une;_.existingPort=u,i.push(_),o.push(_.port2)}fne(e)||(e+=".js");let c=new cne(dne(e)?e:EH(_ne,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:Ti.exports.restartNumber,ticketKeys:OH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:gH,port:u,threadId:c.threadId},[u]);return EE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>xR(e,t),c.on("error",u=>{console.error("Worker error:",u),Fs.error("Worker error:",u)}),c.on("exit",u=>{Si.splice(Si.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Tne?(t.unexpectedRestarts=c.unexpectedRestarts+1,xR(e,t)):Fs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{bH[u.type]?.(u,c)}),Si.push(c),Bne(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(xR,"startWorker");var bne=[_l.THREAD_TYPES.HTTP];async function $R(e=null,t=2,r=!0){if(GR){if(r){let{loadRootComponents:o}=bR();await o()}Ti.exports.restartNumber++,t<1&&(t=t*Si.length);let n=[],s=[];for(let o of Si.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Fs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ti.exports.restartNumber,type:_l.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=bne.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),kR*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===Sne.ITC_EVENT_TYPES.CHILD_STARTED&&(Fs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",f))},"startListener");Fs.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}=Gd();r&&(e==="http"||!e)&&mH.get(_l.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else cs.postMessage({type:gne,workerType:e})}a($R,"restartWorkers");function Nne(e,t){bH[e]=t}a(Nne,"setChildListenerByType");function yne(e){return $R(e,1/0,!1)}a(yne,"shutdownWorkers");var NH=[];function Ine(e){NH.push(e)}a(Ine,"onMessageFromWorkers");var FR=new Map;function yH(e,t){let r=FR.get(e);r||FR.set(e,r=[]),r.push(t)}a(yH,"onMessageByType");var wne=10;async function Cne(e){let t=0;for(let r of hn)try{r.postMessage(e),t++>wne&&(t=0,await new Promise(setImmediate))}catch(n){Fs.error("Unable to send message to worker",n)}}a(Cne,"broadcast");var fE=new Map,Dne=1;function Lne(e){return new Promise(t=>{let r=0;for(let n of hn)try{let s=Dne++,i=a(()=>{fE.delete(s),--r===0&&t(),n!==cs&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,fE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of fE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Fs.error("Unable to send message to worker",s)}r===0&&t()})}a(Lne,"broadcastWithAcknowledgement");function Mne(e){e.postMessage({type:TH,workers:IH()})}a(Mne,"sendThreadInfo");function IH(){let e=Date.now();return Si.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(IH,"getChildWorkerInfo");function Une(e,t){e.resources=t,e.resources.updated=Date.now()}a(Une,"recordResourceReport");var qR;function Pne(e){qR=e}a(Pne,"setMonitorListener");var vne=1e3,fH=!1;function Bne(){fH||(fH=!0,setInterval(()=>{for(let e of Si){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}qR&&qR()},vne).unref())}a(Bne,"startMonitoring");var Hne=1e3;if(cs){EE(cs);for(let e=0,t=xs.addPorts.length;e<t;e++){let r=xs.addPorts[e];r.threadId=xs.addThreadIds[e],EE(r)}setInterval(()=>{let e=process.memoryUsage();cs.postMessage({type:SH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Hne).unref(),HR=a(()=>new Promise((e,t)=>{cs.on("message",r),cs.postMessage({type:pH});function r(n){n.type===TH&&(cs.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else HR=IH;Ti.exports.getThreadInfo=HR;function EE(e,t){hn.push(e),e.on("message",r=>{if(r.type===gH)r.port.threadId=r.threadId,EE(r.port);else if(r.type===Rne){let n=fE.get(r.id);n&&n()}else{for(let s of NH)s(r,e);let n=FR.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Fs.error(i)}}}).on("close",()=>{hn.splice(hn.indexOf(e),1)}).on("exit",()=>{hn.splice(hn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(EE,"addPort");if(GR){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await hne(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(EH(n,i.name));try{for await(let{filename:i}of Ene(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await $R(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ti.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else cs.on("message",async e=>{let{type:t}=e;t===_l.ITC_EVENT_TYPES.SHUTDOWN&&(Ti.exports.restartNumber=e.restartNumber,cs.unref(),setTimeout(()=>{Fs.warn("Thread did not voluntarily terminate",lne),process.exit(0)},kR).unref())})});var Vw={};Ke(Vw,{AUDIT_STORE_OPTIONS:()=>HH,createAuditEntry:()=>r_,openAuditStore:()=>SE,readAuditEntry:()=>vt,setAuditRetention:()=>Fne,transactionKeyEncoder:()=>BH});function SE(e){let t=e.auditStore=e.openDB(UH.AUDIT_STORE_NAME,HH);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=hE){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()-YR})){if((_[0]&15)===QR){let l=vt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=xne){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,YR/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,pE.getWorkerIndex)()===(0,pE.getWorkerCount)()-1&&s(hE),t}function Fne(e,t=hE){YR=e,hE=t}function r_(e,t,r,n,s,i,o){let c=xH[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?qa.setFloat64(0,n):mn.set(Vh),u=9),f(0),f(t),d(r),qa.setFloat64(u,e),u+=8,s?d(s):mn[u++]=0,mn[n?8:0]=c;let l=mn.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Ga.writeKey)(E,mn,u);let S=u-h-1;S>127?S>16383?(JR.error("Key or username was too large for audit entry",E),u=h+1,mn[h]=0):(mn.copyWithin(h+2,h+1,u),qa.setUint16(h,S|32768),u++):mn[h]=S}function f(E){E<128?mn[u++]=E:E<16384?(qa.setUint16(u,E|32768),u+=2):E<1056964608?(qa.setUint32(u,E|3221225472),u+=4):(mn[u]=255,qa.setUint32(u+1,E),u+=5)}}function vt(e){try{let t=e.dataView||(e.dataView=new zR(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:xH[n&7],tableId:i,get recordId(){return MH(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?MH(e,l,d):void 0},getValue(f,E,h){if(n&KR||n&WR&&!E)return f.decoder.decode(e.subarray(t.position));if(n&WR&&h)return XR(f.getEntry(this.recordId),h,f)}}}catch{return JR.error("Reading audit entry error",e),{}}}function MH(e,t,r){let n=e.subarray(t,r);return(0,Ga.readKey)(n,0,r-t)}var Ga,mE,UH,PH,pE,vH,JR,mn,qa,BH,HH,YR,xne,hE,KR,WR,wH,QR,CH,DH,LH,xH,zR,Ui=Re(()=>{Ga=require("ordered-binary"),mE=B(j()),UH=B(Et()),PH=B(M()),pE=B(rt()),vH=B(J());Ho();JR=B(Y());TE();(0,mE.initSync)();mn=Buffer.alloc(1024),qa=new DataView(mn.buffer,mn.byteOffset,1024),BH={writeKey(e,t,r){return e===Tc?(t.set(Tc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ga.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,Ga.readKey)(e,t,r)}},HH={encoding:"binary",keyEncoder:BH},YR=(0,vH.convertToMS)((0,mE.get)(PH.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,xne=1e3,hE=1e4;a(SE,"openAuditStore");a(Fne,"setAuditRetention");KR=16,WR=32,wH=1,QR=2,CH=3,DH=4,LH=5,xH={put:wH|KR,[wH]:"put",delete:QR,[QR]:"delete",message:CH|KR,[CH]:"message",invalidate:DH,[DH]:"invalidate",patch:LH|WR,[LH]:"patch"};a(r_,"createAuditEntry");a(vt,"readAuditEntry");zR=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(MH,"readKeySafely")});var jR={};Ke(jR,{add:()=>gE,applyReverse:()=>FH,getRecordAtTime:()=>XR,rebuildUpdateBefore:()=>RE});function gE(e,t,r){isNaN(e[t])?e[t]=r.value:e[t]+=r.value}function RE(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,gE(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function FH(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=qne[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=qH}}function XR(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=vt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":FH(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===qH&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=vt(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 qne,qH,TE=Re(()=>{Ui();a(gE,"add");gE.reverse=function(e,t,r){isNaN(e[t])||(e[t]-=r.value)};qne={add:gE};a(RE,"rebuildUpdateBefore");a(FH,"applyReverse");qH={};a(XR,"getRecordAtTime")});function $r(e){return e[Dt]||(e[Dt]=Object.create(null))}function yE(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[Oe])},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 pn.ClientError(`${c} must be a string, attempt to assign ${l}`);$r(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 pn.ClientError(`${c} must be a string, attempt to assign ${l}`);$r(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new pn.ClientError(`${c} must be a number, attempt to assign ${l}`);$r(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 pn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);$r(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 pn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);$r(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 pn.ClientError(`${c} must be a number, attempt to assign ${l}`);$r(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new pn.ClientError(`${c} must be a boolean, attempt to assign ${l}`);$r(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 pn.ClientError(`${c} must be a Date, attempt to assign ${l}`);$r(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new pn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);$r(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){$r(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new pn.ClientError(`${c} must be an object, attempt to assign ${l}`);$r(this)[c]=l},"set")}_={get(){let l=this[Dt];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=GH(d,o);if(f)return l||(l=this[Dt]=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[Dt];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 pn.ClientError("Can not add a property to a sealed table schema");$r(this)[o]=c}),i("deleteProperty",function(o){$r(this)[o]=void 0}),i("toJSON",function(){let o=this[Dt],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 GH(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}},yE(r,t)),new r(e)):new AE(e);case Array:let n=new bE(e.length);n[ye]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=GH(o,t?.elements)),n[s]=o}return n;default:return e}}function K_(e){let t=e[Dt],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=K_(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ye])),Object.assign(r,e)),r||e[ye]}function yo(e,t=e[Dt]){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=yo(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=jR[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=yo(s);r[n]=s}return r?Object.freeze(r):e[ye]||e}function OE(e){let t=e[ye];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[No]||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(OE(i))return!0}else return!0}}else{let r=e[Dt];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[ye]===i){if(OE(s))return!0}else return!0}else return!0}}return!1}var pn,Dt,AE,No,bE,NE,W_=Re(()=>{Nn();pn=B(Z());TE();Dt=Symbol("own-data");a($r,"getChanges");a(yE,"assignTrackedAccessors");a(GH,"trackObject");AE=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ye]=t}};yE(AE,{});a(K_,"collapseData");a(yo,"deepFreeze");a(OE,"hasChanges");No=Symbol.for("has-array-changes"),bE=class extends Array{static{a(this,"TrackedArray")}[No];constructor(t){super(t)}splice(...t){return this[No]=!0,super.splice(...t)}push(...t){return this[No]=!0,super.push(...t)}pop(){return this[No]=!0,super.pop()}unshift(...t){return this[No]=!0,super.unshift(...t)}shift(){return this[No]=!0,super.shift()}};bE.prototype.constructor=Array;NE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var fp={};Ke(fp,{CONTEXT:()=>Oe,ID_PROPERTY:()=>De,IS_COLLECTION:()=>Sn,RECORD_PROPERTY:()=>ye,Resource:()=>Ft,snake_case:()=>kne,transformForSelect:()=>wE});function kne(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function kH(e,t){if(dl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(dl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new eA;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){dl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Yr(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[Oe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=s,c=l[De]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Oe]||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 S=this.parseQuery(c.slice(E+1));u?u=Object.assign(S,u):u=S,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,Xe(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(S=>{if(!S)throw new IE(o.user);return typeof l?.then=="function"?l.then(p=>e(E,u,o,p)):e(E,u,o,l)});if(!h)throw new IE(o.user)}return typeof l?.then=="function"?l.then(h=>e(E,u,o,h)):e(E,u,o,l)}a(f,"authorizeActionOnResource")}}function Kr(e,t){let r=new YH.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[Dt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function wE(e,t){let r=t?.propertyResolvers,n=t[Oe],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]=wE(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var VH,$H,YH,Oe,De,Sn,ye,Gne,Ft,IE,dl,eA,Nn=Re(()=>{VH=require("crypto");fc();$H=require("../../index"),YH=B(Z());W_();zi();Sf();Oe=Symbol.for("context"),De=Symbol.for("primary-key"),Sn=Symbol("is-collection"),ye=Symbol("stored-record"),Gne={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ft=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[De]=t;let n=r?.[Oe];this[Oe]=n!==void 0?n:r||null}static get=Yr(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 _=wE(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Yr(function(t,r,n,s){if(Array.isArray(s)&&t[Sn]){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):Kr(t,"put")},{hasContent:!0,type:"update"});static patch=Yr(function(t,r,n,s){return t.patch?t.patch(s,r):Kr(t,"patch")},{hasContent:!0,type:"update"});static delete=Yr(function(t,r,n,s){return t.delete?t.delete(r):Kr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,VH.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),Xe(n,()=>{let i=new this(s,n),o=i.update?i.update(r):Kr(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Yr(function(t,r,n,s){return t.invalidate?t.invalidate(r):Kr(t,"delete")},{hasContent:!1,type:"update"});static post=Yr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Yr(function(t,r,n,s){return t.connect?t.connect(s,r):Kr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Yr(function(t,r,n,s){return t.subscribe?t.subscribe(r):Kr(t,"subscribe")},{type:"read"});static publish=Yr(function(t,r,n,s){return t[De]!=null&&t.update?.(),t.publish?t.publish(s,r):Kr(t,"publish")},{hasContent:!0,type:"create"});static search=Yr(function(t,r,n,s){let i=t.search?t.search(r):Kr(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=wE(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Yr(function(t,r,n,s){return t.search?t.search(s,r):Kr(t,"search")},{hasContent:!0,type:"read"});static copy=Yr(function(t,r,n,s){return t.copy?t.copy(s,r):Kr(t,"copy")},{type:"create"});static move=Yr(function(t,r,n,s){return t.move?t.move(s,r):Kr(t,"move")},{type:"delete"});post(t){if(this[Sn])return this.constructor.create(this[De],t,this[Oe]);Kr(this,"post")}static isCollection(t){return t?.[Sn]}static coerceId(t){return t}static parseQuery(t){return pf(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&&Gne[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:kH(t,this),isCollection:dl}}let i=kH(t,this);return dl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Oe],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[Sn]=!0),s}subscribe(t){return new bn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new bn}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[Oe]}};Ft.prototype[Oe]=null;(0,$H._assignPackageExport)("Resource",Ft);a(kne,"snake_case");IE=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(kH,"pathToId");eA=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Yr,"transactional");a(Kr,"missingMethod");a(ZR,"selectFromObject");a(wE,"transformForSelect")});function WH(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;ka||((0,CE.onMessageByType)(KH,l=>{QH(l.path)}),ka=Object.create(null));let o=ka[s]||(ka[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=ha(t);let u=new rA(r);u.startTime=n;let _=c.get(t);return _?_.push(u):(c.set(t,_=[u]),_.tables=c,_.key=t),u.subscriptions=_,u}function QH(e,t){if(!ka)return;let r=ka[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=vt(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=ha(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,tA.info)("omitting",u,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let S;h.supportsTransactions&&h.txnInProgress!==o.version&&(S=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(u,o,s,S)}catch(S){console.error(S),(0,tA.info)(S)}}}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 zH(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,CE.broadcast)({type:KH,path:s}),QH(s,!0)})}}var tA,CE,KH,ka,Tme,rA,JH=Re(()=>{tA=B(Y()),CE=B(rt());fc();Cu();Ui();KH="transaction",Tme=Buffer.alloc(4096);a(WH,"addSubscription");rA=class extends bn{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(QH,"notifyFromTransactionData");a(zH,"listenToCommits")});var vg={};Ke(vg,{coerceType:()=>DE,makeTable:()=>UE,setServerUtilities:()=>Xne,updateResource:()=>LE});function UE(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:S}=e;S||(S=[]),zH(i,u);let p=Kh(i,n,u),g=0,A,b,v={},G=Promise.resolve(),H,P,z;for(let $ of S)($.assignCreatedTime||$.name==="__createdtime__")&&(H=$),($.assignUpdatedTime||$.name==="__updatedtime__")&&(P=$),$.expiresAt&&(z=$),$.isPrimaryKey&&(v=$);let W,Q=[],se=[],pe=1,oe=2,Fe={},ce={},Lt=864e5,Il,wl,Vs,pA=!1,KE,$x=i.getRange({start:!1,end:!1}).constructor,Yx=10,Kx=6;E&&gA();class ze extends Ft{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=S;static expirationTimer;static createdTimeProperty=H;static updatedTimeProperty=P;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),b=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let w=a(y=>{let I=this.sources.slice(0,-1);if(I=I.filter(U=>U[y]&&(!U[y].reliesOnPrototype||U.prototype[y])),I.length>0)if(I.length===1){let U=I[0];return(L,D,x)=>{if(L?.source!==U)return U[y](D,x,L)}}else return(U,L,D)=>{let x=[];for(let k of I){if(U?.source===k)break;x.push(k[y](L,D,U))}return Promise.all(x)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(y=>{if(O[y]&&(!O[y].reliesOnPrototype||O.prototype[y]))return(I,U,L)=>{if(!I?.source)return O[y](U,L,I)}},"getApplyToCanonicalSource");return Fe={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},ce={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")},(async()=>{let y=!1,I=a(async(U,L)=>{let D=U.value,x=U.table?nt[c][U.table]:ze;if(c===qn.SYSTEM_SCHEMA_NAME&&(U.table===qn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||U.table===qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),U.id===void 0&&(U.id=D[x.primaryKey],U.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(U));U.source=m;let k=await x.getResource(U.id,L,Va);switch(U.type){case"put":return k._writeUpdate(D,!0,Va);case"patch":return k._writeUpdate(D,!1,Va);case"delete":return k._writeDelete(Va);case"publish":return k._writePublish(D,Va);case"invalidate":return k.invalidate(Va);default:Ze.error("Unknown operation",U.type,U.id)}},"writeUpdate");try{let U=m.subscribe;U&&h==null&&(h=!0);let L=m.subscribeOnThisThread?m.subscribeOnThisThread((0,wo.getWorkerIndex)()):(0,wo.getWorkerIndex)()===0,D=U&&L&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(D){let x;for await(let k of D)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ze.error("Bad subscription event",k);continue}if(k.source=m,x)if(k.beginTxn)x.resolve();else{I(k,x);continue}if(k.type==="end_txn")continue;let de=Xe(k,()=>{if(k.type==="transaction"){let te=[];for(let ne of k.writes)try{te.push(I(ne,k))}catch(Be){throw Be.message+=" writing "+JSON.stringify(ne)+" of event "+JSON.stringify(k),Be}return Promise.all(te)}else if(k.type==="define_schema"){let te=this.attributes.slice(0),ne;for(let Be of k.attributes)te.find(ie=>ie.name===Be.name)||(te.push(Be),ne=!0);ne&&(lt({table:s,database:c,attributes:te,origin:"cluster"}),Tl.signalSchemaChange(new gl.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return k.beginTxn?(x=k,I(k,k),new Promise(te=>{x.resolve=te})):I(k,k)});y&&(await de,Tl.signalUserChange(new gl.UserEventMsg(process.pid))),k.onCommit&&(de?.then?de.then(k.onCommit):k.onCommit())}catch(_e){Ze.error("error in subscription handler",_e)}}}catch(U){Ze.error(U)}})(),this}static getResource(m,R,w){let O=super.getResource(m,R,w);if(m!=null){Qa(m);try{if(O.hasOwnProperty(ye))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!w?.async||i.cache?.get(m),y=br(R),I=y.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return WE(m,R,{transaction:I},N,U=>{if(U?LE(O,U):O[ye]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new Tn.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let L=QE(m,U,R,O);if(L)return y?.disregardReadTxn(),O[nA]=!0,iA(L,D=>(LE(O,D),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=QE(this[De],this[Wr],this[Oe]);if(m)return this[nA]=!0,iA(m,R=>{this[Wr]=R,this[ye]=R.value,this[pl]=R.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,Lt=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Lt=Lt||(d+f)/4,JE()}static enableAuditing(m=!0){E=m,m&&gA(),ze.audit=m}static coerceId(m){return m===""?null:DE(m,v)}static async dropTable(){if(delete nt[c][s],c===o){for(let m of S)l.remove(ze.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ze.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));Tl.signalSchemaChange(new gl.SchemaEventMsg(process.pid,qn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Sn])return this.search(m);if(this[De]===null){if(m?.conditions)return this.search(m);let R=ze.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}allowRead(m,R){let w=Dl(m);if(w?.read){if(w.isSuperUser)return!0;let O=w.attribute_permissions,N=R?.select;if(O?.length>0||pA&&N){if(R||(R={}),N){let y=O?.length>0&&sA(O,"read");R.select=N.map(I=>{let U=I.name||I;if(!y||y[U]){let L=Vs[U]?.definition?.tableClass;if(L){if(I.name||(I={name:I}),!L.prototype.allowRead.call(null,m,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else R.select=O.filter(y=>y.read&&!Vs[y.attribute_name]).map(y=>y.attribute_name);return R}else return!0}}allowUpdate(m,R){let w=Dl(m);if(w?.update){let O=w.attribute_permissions;if(O?.length>0){let N=sA(O,"update");for(let y in R)if(!N[y])return!1;for(let y of O){let I=y.attribute_name;!y.update&&!(I in R)&&(R[I]=this.getProperty(I))}}return!0}}allowCreate(m,R){if(this[Sn]){let w=Dl(m);if(w?.insert){let O=w.attribute_permissions;if(O?.length>0){let N=sA(O,"insert");for(let y in R)if(!N[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Dl(m)?.delete}update(m,R){if(!br(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(R?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[ye]={},this[Dt]=m):(O=this[Dt],O&&(m=Object.assign(O,m)),this[Dt]=O=m)),this._writeUpdate(this[Dt],R),this}addTo(m,R){if(typeof R=="number")this[fl]===jH?this.set(m,(+this.getProperty(m)||0)+R):(this[fl]||this.update(),this.set(m,new NE(R)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,R){if(typeof R=="number")return this.addTo(m,-R);throw new Error("Can not subtract a non-numeric value")}invalidate(m){let R=this[Oe],w=this[De];Qa(w),br(this[Oe]).addWrite({key:w,store:i,invalidated:!0,entry:this[Wr],nodeName:this[Oe]?.nodeName,before:Fe.invalidate?.bind(this,R,w),beforeIntermediate:ce.invalidate?.bind(this,R,w),commit:(N,y)=>{if(y?.version>N)return;let I=null;for(let U in r)I||(I={}),I[U]=this.getProperty(U);p(w,I,this[Wr],N,El,E,this[Oe],0,"invalidate")}})}static evict(m,R,w){let O=this.Source,N;if(!((b||E)&&(!R||(N=i.getEntry(m),!N||!R)||N.version!==w))){if(b){if(i.hasLock(m,N.version))return;let y;for(let I in r)y||(y={}),y[I]=R[I];if(y)return p(m,y,N,w,hl,null,null,0,null,!0)}return i.ifVersion(w,()=>{Cl(m,R,null)}),E?p(m,null,N,w,hl,null,null,0,null,!0):i.remove(m,w)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,sx.operation(m,R)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,R,w){let O=this[Oe],N=br(O),y=this[De];Qa(y);let I=this[Wr];this[fl]=R?jH:Qne;let U={key:y,store:i,entry:I,nodeName:O?.nodeName,validate:L=>{m||(m=this[Dt]),R||m&&OE(m)?(this.validate(m,!R),O?.source||(P&&(m[P.name]=P.type==="Date"?new Date(L):P.type==="String"?new Date(L).toISOString():L),R&&(t&&m[t]!==y&&(m[t]=y),H&&(I?.value?m[H.name]=I?.value[H.name]:m[H.name]=H.type==="Date"?new Date(L):H.type==="String"?new Date(L).toISOString():L),m=yo(m)))):N.removeWrite(U)},before:R?Fe.put?()=>Fe.put(O,y,m):null:Fe.patch?()=>Fe.patch(O,y,m):Fe.put?()=>Fe.put(O,y,yo(this)):null,beforeIntermediate:R?ce.put?()=>ce.put(O,y,m):null:ce.patch?()=>ce.patch(O,y,m):ce.put?()=>ce.put(O,y,yo(this)):null,commit:(L,D,x)=>{x&&(O&&D?.version>(O.lastModified||0)&&(O.lastModified=D.version),this[Wr]=D,R||(this[ye]=D?.value??null)),this[Dt]=m,this[pl]=L;let k=D?.value,_e=m;if(this[fl]=0,D?.version>L)if(E){let Be=D.localTime,ie=D.version;for(;_e&&(Be>L||ie>L&&Be>0);){let fe=u.get(Be),$e=vt(fe);if(ie=$e.version,ie>L)if($e.type==="patch"){let Me=$e.getValue(i);_e=RE(_e,Me)}else($e.type==="put"||$e.type==="delete")&&(_e=null);Be=$e.previousLocalTime}}else R?_e=null:_e=RE(_e,k);let de=yo(this,_e);this[ye]=de;let te;R||(te=m),Cl(y,k,de);let ne=R?"put":"patch";p(y,de,D,L,0,E,O,O.expiresAt||(d?d+Date.now():0),ne,!1,te)}};N.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Sn]){for await(let R of this.search(m))(await ze.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[ye]?this._writeDelete(m):!1}_writeDelete(m){let R=br(this[Oe]),w=this[De];Qa(w);let O=this[Oe];return R.addWrite({key:w,store:i,resource:this,nodeName:O?.nodeName,before:Fe.delete?.bind(this,O,w),beforeIntermediate:ce.delete?.bind(this,O,w),commit:(N,y,I)=>{let U=y?.value;I&&(O&&y?.version>(O.lastModified||0)&&(O.lastModified=y.version),LE(this,y)),!(y?.version>N)&&(Cl(this[De],U),Ze.trace("Write delete entry",w,N),E||h?(p(w,null,this[Wr],N,0,E,this[Oe],0,"delete"),E||JE()):i.remove(this[De]))}}),!0}search(m){let R=this[Oe],w=br(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[De]&&(O=[{attribute:null,comparator:"prefix",value:this[De]}].concat(O));let N,y={};function I(re,je){let Ye;switch(je){case"and":case void 0:if(re.length<1)throw new Error('An "and" operator requires at least one condition');Ye=!0;break;case"or":if(re.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+je)}let Mt=Ye&&{},Nr;for(let Ue of re){if(Ue.conditions){Ue.conditions=I(Ue.conditions,Ue.operator);continue}let xe=Ue[0]??Ue.attribute,yr=xe==null?v:Ms(S,xe);if(yr){if(Ye){let _s=vn(xe),jr=Mt[_s];jr?(jr.push(Ue),Nr=!0):Mt[_s]=[Ue]}(yr.type||fg[Ue.comparator])&&(Ue[1]===void 0?Ue.value=L(Ue.value,yr):Ue[1]=L(Ue[1],yr))}else if(xe!=null)throw(0,Tn.handleHDBError)(new Error,`${xe} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return re;if(Nr)for(let Ue in Mt){let xe=Mt[Ue],yr=xe.length;if(yr>1)for(let _s=0;_s<yr;_s++){let jr=xe[_s];if(jr.comparator==="ge"||jr.comparator==="greater_than_equal")for(let $s=0;$s<yr;$s++){let Lo=xe[$s];(Lo.comparator==="le"||Lo.comparator==="less_than_equal")&&(jr.comparator="between",jr.value=[jr.value,Lo.value],re.splice(re.indexOf(Lo),1))}if(jr.comparator==="equals"||!jr.comparator){for(let $s=0;$s<yr;$s++)if($s!==_s){let Lo=xe[$s];re.splice(re.indexOf(Lo),1)}break}}}return re}a(I,"prepareConditions");function U(re,je){if(m.enforceExecutionOrder)return re;for(let Ye of re)Ye.conditions&&(Ye.conditions=U(Ye.conditions,Ye.operator));return re.length>1&&je!=="or"?(0,nx.sortBy)(re,mf(ze)):re}a(U,"orderConditions");function L(re,je){return Array.isArray(re)?re.map(Ye=>DE(Ye,je)):DE(re,je)}a(L,"coerceTypedValues");let D=m.operator;(O.length>0||D)&&(O=I(O,D));let x=typeof m.sort=="object"&&m.sort,k;if(x&&D!=="or"){let re=x.attribute;if(N=O.find(je=>vn(je.attribute)===vn(re)),!N){if(!Ms(S,re))throw(0,Tn.handleHDBError)(new Error,`${Array.isArray(re)?re.join("."):re} is not a defined attribute`,404);N={attribute:re},O.push(N)}N.descending=!!x.descending}O=U(O,D),x&&(O[0]===N?x.next&&(k={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(N&&O.splice(O.indexOf(N),1),k=x));function _e(re,je){let Ye=re[0];if(je==="or"){let Mt=te(Ye);for(let Ue=1;Ue<re.length;Ue++){let xe=re[Ue],yr=te(xe);Mt=Mt.concat(yr)}let Nr=new Set;return Mt.filter(Ue=>{let xe=Ue.key??Ue;return Nr.has(xe)?!1:(Nr.add(xe),!0)})}else{let Mt=te(Ye),Nr=Ye.estimated_count,Ue=re.slice(1).map((xe,yr)=>{let _s=(xe.attribute||xe[0])===t,jr=Wu(xe,ze,R,y,_s,Nr);return yr<re.length-2&&Nr&&(Nr=QP(i,xe.estimated_count,Nr)),jr}).filter(Boolean);return Ue.length>0?SA(Mt,ne,R,Ue):Mt}}a(_e,"executeConditions");let de=m.reverse===!0;function te(re){return re.conditions?_e(re.conditions,re.operator):Na(re,w,re.descending||de,ze,m.allowFullScan,y)}a(te,"executeCondition");let ne=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:D,postOrdering:k,selectApplied:!!ne};let Be=w.useReadTxn(),ie=_e(O,D);(m.offset||m.limit!==void 0)&&(ie=ie.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let fe=m.ensureLoaded!==!1,$e=ze.transformEntryForSelect(ne,R,y,fe,!0),Me=ze.transformToOrderedSelect(ie,ne,k,R,$e);return Me.onDone=()=>{Me.onDone=null,w.doneReadTxn()},Me.selectApplied=!0,Me.getColumns=()=>{if(ne){let re=[];for(let je of ne)je==="*"?re.push(...S.map(Ye=>Ye.name)):re.push(je.name||je);return re}return S.map(re=>re.name)},Me}static transformToOrderedSelect(m,R,w,O,N){let y=new $x;if(w){m=SA(m,R,O,null);let I;y.iterate=function(){let L,D=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,k=w.dbOrderedAttribute,_e,de,te=!0;function ne(ie){let fe=ie.next&&ne(ie.next),$e=ie.descending;return(Me,re)=>{let je=zE(Me,ie.attribute,O),Ye=zE(re,ie.attribute,O),Mt=$e?(0,Co.compareKeys)(Ye,je):(0,Co.compareKeys)(je,Ye);return Mt===0?fe?.(Me,re)||0:Mt}}a(ne,"createComparator");let Be=ne(w);return{async next(){let ie;if(L)if(ie=L.next(),ie.done){if(x)return y.onDone&&y.onDone(),ie}else return{value:await N(ie.value)};I=[],_e&&I.push(_e);do if(ie=await D.next(),ie.done){if(x=!0,I.length)break;return y.onDone&&y.onDone(),ie}else{let fe=ie.value;if(fe?.then&&(fe=await fe),k){let $e=zE(fe,k,O);if(te)te=!1,de=$e;else if($e!==de){de=$e,_e=fe;break}}I.push(fe)}while(!0);return w.isGrouped,I.sort(Be),L=I[Symbol.iterator](),ie=L.next(),ie.done?(y.onDone&&y.onDone(),ie):{value:await N(ie.value)}},return(){y.onDone&&y.onDone(),D.return()},throw(){y.onDone&&y.onDone(),D.throw()}}};let U=a(L=>{if(typeof R=="object"&&Array.isArray(L.attribute))for(let D=0;D<R.length;D++){let x=R[D],k;if(x.name===L.attribute[0]){for(k=x.sort||(x.sort={});k.next;)k=k.next;k.attribute=L.attribute.slice(1),k.descending=L.descending}else x===L.attribute[0]&&(R[D]=k={name:x,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(w)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(N);return y}static transformEntryForSelect(m,R,w,O,N){if(m&&(m===t||m?.length===1&&m[0]===t)){let L=a(D=>D?.key??D,"transform");return m===t?L:m.asArray?D=>[L(D)]:D=>({[t]:L(D)})}let y;O&&b&&!m?.every(L=>{let D;return typeof L=="object"?D=L.name:D=L,r[D]||D===t})&&(y=!0);let I,U=a(L=>{let D;if(L){if(KE=L,D=L.value||L.deref?.(),!D&&(L.key===void 0||L.deref)){if(L=WE(L.key??L,R,{transaction:br(R).getReadTxn(),lazy:m?.length<4},!1,x=>x),L?.then)return L.then(U);D=L?.value}if(y&&(L.metadataFlags&(El|hl)||L.expiresAt&&L.expiresAt<Date.now())){let x=QE(L.key??L,L,R);if(x?.then)return x.then(U)}}if(D==null)return N?Io.SKIP:D;if(m&&!(m[0]==="*"&&m.length===1)){let x,k=a((de,te)=>{let ne;typeof de=="object"?ne=de.name:ne=de;let Be=Vs?.[ne],ie;if(Be){let fe=w?.[ne];if(fe)if(fe.hasMappings){let Me=Be.from?D[Be.from]:vn(L.key);ie=fe.get(Me),ie||(ie=[])}else ie=fe.fromRecord?.(D);else ie=Be(D,R,L);let $e=a(Me=>{if(Me&&typeof Me=="object"){let re=Be.definition?.tableClass||ze;I||(I={});let je=I[ne]||(I[ne]=re.transformEntryForSelect(ne===de?null:de.select||(Array.isArray(de)?de:null),R,fe,O));if(Array.isArray(Me)){let Ye=[],Mt=re.transformToOrderedSelect(Me,de.select,typeof de.sort=="object"&&de.sort,R,je)[Symbol.asyncIterator](),Nr=a(xe=>{for(;!xe.done;){if(xe?.then)return xe.then(Nr);Ye.push(xe.value),xe=Mt.next()}te(Ye,ne)},"nextValue"),Ue=Nr(Mt.next());Ue&&(x||(x=[]),x.push(Ue));return}else if(Me=je(Me),Me?.then){x||(x=[]),x.push(Me.then(Ye=>te(Ye,ne)));return}}te(Me,ne)},"handleResolvedValue");ie?.then?(x||(x=[]),x.push(ie.then($e))):$e(ie);return}else ie=D[ne],ie&&typeof ie=="object"&&ne!==de&&(ie=this.transformEntryForSelect(de.select||de,R,null)({value:ie}));te(ie,ne)},"selectAttribute"),_e;if(typeof m=="string")k(m,de=>{_e=de});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((de,te)=>{de==="*"?m[te]=D:k(de,ne=>_e[te]=ne)});else{_e={};let de=m.forceNulls;for(let te of m)if(te==="*")for(let ne in D)_e[ne]=D[ne];else k(te,(ne,Be)=>{ne===void 0&&de&&(ne=null),_e[Be]=ne})}else throw new Tn.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>_e):_e}return D},"transform");return U}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||lt({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let R=!m.rawEvents,w=WH(ze,this[De]??null,function(I,U,L,D){try{let x=U.getValue?.(i,R);if(!x&&U.type==="patch"&&R){let k=i.getEntry(I);k?.version===U.version?x=k.value:x=U.getValue?.(i,!0,L),U.type="put"}this.send({id:I,timestamp:L,value:x,version:U.version,type:U.type,beginTxn:D})}catch(x){Ze.error(x)}},m.startTime||0,this[Sn]);this[Sn]&&(w.includeDescendants=!0,m.onlyChildren&&(w.onlyChildren=!0)),m.crossThreads===!1&&(w.crossThreads=!1),m.supportsTransactions&&(w.supportsTransactions=!0);let O=this[De],N=m.previousCount;N>1e3&&(N=1e3);let y=m.startTime;if(this[Sn]){if(y){if(N)throw new Tn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:U}of u.getRange({start:y,exclusiveStart:!0})){let L=vt(U);if(L.tableId!==n)continue;let D=L.recordId;(O==null||tx(O,D))&&w.send({id:D,timestamp:I,...L}),w.startTime=I}}else if(N){let I=[];for(let{key:U,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let D=vt(L);if(D.tableId!==n)continue;let x=D.recordId;if(O==null||tx(O,x)){let k=D.getValue(i,R,U);if(I.push({id:x,timestamp:U,value:k,version:D.version,type:D.type}),--N<=0)break}}catch(D){Ze.error("Error getting history entry",U,D)}for(let U=I.length;U>0;)w.send(I[--U]);I[0]&&(w.startTime=I[0].timestamp)}else if(!m.omitCurrent)for(let{key:I,value:U,version:L,localTime:D}of i.getRange({start:O??!1,end:O==null?void 0:[O,Co.MAXIMUM_KEY],versions:!0}))U&&w.send({id:I,version:L,timestamp:D,value:U})}else{N&&!y&&(y=0);let I=this[Wr]?.localTime;if(I===Yh&&(i.cache?.delete(O),this[Wr]=i.getEntry(O),Ze.trace("re-retrieved record",I,this[Wr]?.localTime),I=this[Wr]?.localTime),Ze.trace("Subscription from",y,"from",O,I),y<I){let U=[],L=I;do{let D=u.get(L);if(D){m.omitCurrent=!0;let x=vt(D),k=x.getValue(i,R,L);R&&(x.type="put"),U.push({id:O,value:k,timestamp:L,...x}),L=x.previousLocalTime}else break;N&&N--}while(L>y&&N!==0);for(let D=U.length;D>0;)w.send(U[--D]);w.startTime=I}!m.omitCurrent&&this.doesExist()&&w.send({id:O,version:this[pl],timestamp:I,value:this})}return m.listener&&w.on("data",m.listener),w}doesExist(){return!!(this[ye]||this[fl])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let w=br(this[Oe]),O=this[De]||null;Qa(O);let N=this[Oe];w.addWrite({key:O,store:i,entry:this[Wr],nodeName:N?.nodeName,validate:()=>{this.validate(m)},before:Fe.publish?.bind(this,N,O,m),beforeIntermediate:ce.publish?.bind(this,N,O,m),commit:(y,I,U)=>{I===void 0&&h&&!E&&JE(),p(O,I?.value??null,I,I?.version||y,0,!0,N,I?.expiresAt,"message",!1,m)}})}validate(m,R){let w,O=a((N,y,I)=>{if(y.type&&N!=null)if(R&&N.__op__&&(N=N.value),y.properties){typeof N!="object"&&(w||(w=[])).push(`Property ${I} must be an object${y.type?" ("+y.type+")":""}`);let U=y.properties;for(let L=0,D=U.length;L<D;L++){let x=U[L],k=O(N[x.name],x,I+"."+x.name);k&&(N[x.name]=k)}}else switch(y.type){case"Int":(typeof N!="number"||N>>0!==N)&&(w||(w=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(w||(w=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(w||(w=[])).push(`Property ${I} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(U=>typeof U=="string")||(w||(w=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(w||(w=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof N!="boolean"&&(w||(w=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(w||(w=[])).push(`Property ${I} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(w||(w=[])).push(`Property ${I} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(w||(w=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(y.elements)for(let U=0,L=N.length;U<L;U++){let D=N[U],x=O(D,y.elements,I+"[*]");x&&(N[U]=x)}}else(w||(w=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}y.nullable===!1&&N==null&&(w||(w=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let N=0,y=S.length;N<y;N++){let I=S[N];if(!I.relationship&&(!R||I.name in m)){let U=O(m[I.name],I,I.name);U&&(m[I.name]=U)}}if(w)throw new Tn.ClientError(w.join(". "))}getUpdatedTime(){return this[pl]}wasLoadedFromSource(){return b?!!this[nA]:void 0}static async addAttributes(m){let R=S.slice(0);for(let w of m){if(!w.name)throw new Tn.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Tn.ClientError("Attribute names cannot include backticks or forward slashes");R.push(w)}return lt({table:s,database:c,schemaDefined:_,attributes:R}),ze.indexingOperation}static async removeAttributes(m){let R=S.filter(w=>!m.includes(w.name));return lt({table:s,database:c,schemaDefined:_,attributes:R}),ze.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,w=5e3,O=1e3,N;R>w&&!m?.exactCount&&(N=O);let y=0;for(let{value:I}of i.getRange({start:!0,lazy:!0,limit:N}))I!=null&&y++;if(N){let I=y;y=0;for(let{value:ne}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:N}))ne!=null&&y++;let U=N*2,L=(y+I)/U,D=Math.pow((y-I+1)/N/2,2)+L*(1-L)/U,x=Math.max(Math.sqrt(D)*R,1),k=Math.round(L*R),_e=Math.max(k-1.96*x,0),de=Math.min(k+1.96*x,R),te=Math.pow(10,Math.round(Math.log10(x)));return te>k&&(te=te/10),y=Math.round(k/te)*te,{recordCount:y,estimatedRange:[Math.round(_e),Math.round(de)]}}return{recordCount:y}}static updatedAttributes(){Vs=this.propertyResolvers={$id:(m,R,w)=>({value:w.key}),$updatedtime:(m,R,w)=>w.version,$record:(m,R,w)=>w?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(pA=!0,R.to)m.elements?.definition?(Vs[m.name]=m.resolve=(w,O,N)=>{let y=w[R.from?R.from:t],I=m.elements.definition.tableClass;return N?Na({attribute:R.to,value:y},br(O).getReadTxn(),!1,I).asArray:I.search([{attribute:R.to,value:y}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,R.from&&(m.resolve.from=R.from)):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(R.from){let w=m.definition||m.elements?.definition;w?(Vs[m.name]=m.resolve=(O,N,y)=>{let I=O[R.from];if(I!==void 0){if(m.elements){let U,L=I.map(D=>{let x=y?w.tableClass.primaryStore.getEntry(D,{transaction:br(N).getReadTxn()}):w.tableClass.get(D,N);return x?.then&&(U=!0),x});return R.filterMissing?U?Promise.all(L).then(D=>D.filter(rx)):L.filter(rx):U?Promise.all(L):L}return y?w.tableClass.primaryStore.getEntry(I,{transaction:br(N).getReadTxn()}):w.tableClass.get(I,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let y=N.map(I=>I[De]||I[w.tableClass.primaryKey]);O[R.from]=y}else{let y=N[De]||N[w.tableClass.primaryKey];O[R.from]=y}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=R.from):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`)}yE(this,this)}static async deleteHistory(m=0){let R;for(let{key:w,value:O}of u.getRange({start:0,end:m}))await ml(),vt(O).tableId===n&&(R=u.remove(w));await R}static async*getHistory(m=0,R=1/0){for(let{key:w,value:O}of u.getRange({start:m,end:R})){await ml();let N=vt(O);N.tableId===n&&(yield{id:N.recordId,localTime:w,version:N.version,type:N.type,value:N.getValue(i,!0,w),user:N.user})}}static async getHistoryOfRecord(m){let R=[];if(m==null)throw new Error("An id is required");let w=i.getEntry(m);if(!w)return R;let O=w.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await ml();let y=u.get(O);if(y){let I=vt(y);R.push({id:I.recordId,localTime:O,version:I.version,type:I.type,value:I.getValue(i,!0,O),user:I.user}),O=I.previousLocalTime}else break}while(N<1e3&&O);return R.reverse()}static cleanup(){W?.remove()}}ze.updatedAttributes();let Wx=ze.prototype;return Wx[Wne]=!0,d&&ze.setTTLExpiration(d/1e3),z&&Qx(),ze;function Cl($,m,R){let w;for(let O in r){let N=r[O],y=N.isIndexing,I=R?.[O],U=m?.[O];if(I===U&&!y)continue;w=!0;let L=N.indexNulls,D=(0,Sl.getIndexedValues)(U,L);if(D){XH&&N.prefetch(D.map(x=>({key:x,value:$})),ex);for(let x=0,k=D.length;x<k;x++)N.remove(D[x],$)}if(D=(0,Sl.getIndexedValues)(I,L),D){XH&&N.prefetch(D.map(x=>({key:x,value:$})),ex);for(let x=0,k=D.length;x<k;x++)N.put(D[x],$)}}return w}a(Cl,"updateIndices");function Qa($){switch(typeof $){case"number":return!0;case"string":if($.length<659)return!0;if($.length>ZH)throw new Error("Primary key size is too large: "+$.length);break;case"object":if($===null)return!0;break;case"bigint":if($<2n**64n&&$>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof $)}if((0,Co.writeKey)($,zne,0)>ZH)throw new Error("Primary key size is too large: "+$.length);return!0}a(Qa,"checkValidId");function WE($,m,R,w,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,$);let y=i.getEntry($,R);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),O(y,$)},"whenPrefetched");return w?N():pe>0?(pe--,N()):new Promise((y,I)=>{pe===0?(pe--,i.prefetch([$],()=>{U(),L()})):(Q.push($),se.push(L),Q.length>Kx&&(pe--,U()));function U(){if(Q.length>0){let D=se;i.prefetch(Q,()=>{pe===-1?U():pe++;for(let x of D)x()}),Q=[],se=[],oe>2&&oe--}else pe=oe,oe<Yx&&oe++}a(U,"prefetch");function L(){try{y(N())}catch(D){I(D)}}a(L,"load")})}a(WE,"loadLocalRecord");function Dl($){if(!$?.role)return;let m=$.role.permission;if(m.super_user)return Jne;let R=m[c],w,O=R?.tables;if(O)return O[s];if(c==="data"&&(w=m[s])&&!w.tables)return w}a(Dl,"getTablePermissions");function QE($,m,R,w){if(b){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(El|hl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,on(!O,"cache-hit",s)),O){let N=TA($,m,R).then(y=>(y?.value?.[ye]&&Ze.error("Can not assign a record with a record property"),R&&(y?.version>(R.lastModified||0)&&(R.lastModified=y.version),R.lastRefreshed=Date.now()),y));if(R?.onlyIfCached||m?.value&&w?.allowStaleWhileRevalidate?.(m,$)){if(N.catch(y=>Ze.warn(y)),R?.onlyIfCached&&!w.doesExist())throw new Tn.ServerError("Entry is not cached",504);return}else return N}}}a(QE,"ensureLoadedFromSource");function br($){let m=$?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new Qi,m.lmdbDb=i,m;m=R}while(!0)}else return new $_}a(br,"txnForContext");function zE($,m,R){if(!$)return;KE=$;let w=$.value||$.deref?.()||(KE=i.getEntry($.key))?.value;if(typeof m=="object"){let N=Vs,y=w;for(let I=0,U=m.length;I<U;I++){let L=m[I],D=N?.[L];y=D&&y?D(y,R,!0)?.value:y?.[L],N=D?.definition?.tableClass?.propertyResolvers}return y}let O=Vs[m];return O?O(w,R):w[m]}a(zE,"getAttributeValue");function SA($,m,R,w){let O=br(R).getReadTxn(),N=w?.length,y={transaction:O,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},I;function U(L,D){let x=L?.value;if(!x)return Io.SKIP;for(let k=0;k<N;k++)if(!I?.includes(k)&&!w[k](x,L))return Io.SKIP;return D!==void 0&&(L.key=D),L}if(a(U,"processEntry"),N>0||!$.hasEntries){let L=$.map(D=>{if(I=null,typeof D=="object"&&D.key!==void 0)return N>0?U(D):D;if(D==null)return Io.SKIP;for(let x=0;x<N;x++){let _e=w[x].idFilter;if(_e){if(!_e(D))return Io.SKIP;I||(I=[]),I.push(x)}}return WE(D,R,y,!1,U)});return Array.isArray($)&&(L=L.filter(D=>D!==Io.SKIP)),L.hasEntries=!0,L}return $}a(SA,"transformToEntries");async function TA($,m,R){let w=m?.metadataFlags,O=m?.version,N,y;if(!i.attemptLock($,O,()=>{clearTimeout(y);let D=i.getEntry($);!D||!D.value||D.metadataFlags&(El|hl)?N(TA($,i.getEntry($),R)):N(D)}))return new Promise(D=>{N=D,y=setTimeout(()=>{i.unlock($,O)},Kne)});let I=m?.value,U={requestContext:R,replacingRecord:I,replacingVersion:O,source:null,resourceCache:R?.resourceCache},L=R?.responseHeaders;return new Promise((D,x)=>{let k;iA(Xe(U,async _e=>{let de=performance.now(),te,ne,Be;try{for(let Me of ze.sources)if(Me.get&&(!Me.get.reliesOnPrototype||Me.prototype.get)&&(U.source=Me,te=await Me.get($,U),te))break;Be=w&El;let fe=U.lastModified||Be&&O;ne=Be||fe>O||!I,fe||(fe=(0,Sl.getNextMonotonicTime)());let $e=performance.now()-de;if(Fr($e,"cache-resolution",s),L&&L.append("Server-Timing",`cache-resolve;dur=${$e.toFixed(2)}`),_e.timestamp=fe,d&&!U.expiresAt&&(U.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]!==$&&(te[t]=$)}k=!0,D({version:fe,value:te})}catch(fe){fe.message+=` while resolving record ${$} for ${s}`,I&&((fe.code==="ECONNRESET"||fe.code==="ECONNREFUSED"||fe.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(fe.statusCode===500||fe.statusCode===502||fe.statusCode===503||fe.statusCode===504))?(D({version:O,value:I}),Ze.trace(fe.message,"(returned stale record)")):x(fe),U.transaction.abort();return}if(R?.noCacheStore){U.transaction.abort();return}br(U).addWrite({key:$,store:i,entry:m,nodeName:"source",commit:(fe,$e)=>{if($e?.version!==O)return;let Me=Cl($,I,te);te?(ce.put?.(U,$,te),p($,te,$e,fe,0,E&&ne||null,U,U.expiresAt,"put",!!Be)):(ce.delete?.(U,$),E||h?p($,null,$e,fe,0,E&&ne||null,U,0,"delete",!!Be):i.remove($,O))}})}),()=>{i.unlock($,O)},_e=>{i.unlock($,O),k&&Ze.error("Error committing cache update",_e)})})}a(TA,"getFromSource");function JE(){if(Lt!==Il&&(Il=Lt,(0,wo.getWorkerIndex)()===(0,wo.getWorkerCount)()-1)){if(wl&&clearTimeout(wl),!Lt)return;let $=new Date;$.setMonth(0),$.setDate(1),$.setHours(0),$.setMinutes(0),$.setSeconds(0);let m=Math.ceil((Date.now()-$.getTime())/Lt)*Lt+$.getTime(),R=a(w=>{Ze.trace(`Scheduled next cleanup scan at ${new Date(w)}ms`),wl=setTimeout(()=>G=G.then(async()=>{if(R(Math.max(w+Lt,Date.now())),i.rootStore.status!=="open"){clearTimeout(wl);return}let O=50,N=new Array(O),y=0;Ze.trace(`Starting cleanup scan for ${s}`);try{let I=0;for(let{key:U,value:L,version:D,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let k;L===null&&!E&&D+Yne<Date.now()?k=i.remove(U,D):x&&x+f<Date.now()&&(k=ze.evict(U,L,D),I++),k&&(await N[y],N[y]=k.catch(_e=>{Ze.error("Cleanup error",_e)}),++y>=O&&(y=0)),await ml()}Ze.trace(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){Ze.trace(`Error in cleanup scan for ${s}:`,I)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(JE,"scheduleCleanup");function gA(){W=u?.addDeleteRemovalCallback(n,$=>{let m=i.getEntry($);m?.value===null&&i.remove($,m.version)})}a(gA,"addDeleteRemoval");function Qx(){(0,wo.getWorkerIndex)()===0&&setInterval(async()=>{try{let $=z.name,m=r[$];if(!m)throw new Error(`expiresAt attribute ${z} must be indexed`);for(let{value:R}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let w=i.getEntry(R);w?.value?.[$]<Date.now()&&ze.evict(R,w.value,w.version),await ml()}}catch($){Ze.error("Error in evicting old records",$)}},$ne).unref()}a(Qx,"runRecordExpirationEviction")}function sA(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 ex(){}function Xne(e){sx=e}function DE(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"&&!jne.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,ME.autoCast)(e):e}function tx(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 iA(e,t,r){return e?.then?e.then(t,r):t(e)}function LE(e,t){e[Wr]=t,e[ye]=t?.value??null,e[pl]=t?.version}function rx(e){return e!=null}var qn,Io,Sl,nx,Rl,Tn,Tl,gl,Ze,Co,wo,ME,Vne,sx,$ne,Yne,XH,Kne,pl,Wne,Wr,fl,jH,Qne,nA,Va,El,hl,zne,ZH,Jne,Pme,jne,ml,Pf=Re(()=>{qn=B(M()),Io=require("lmdb"),Sl=B(Mr()),nx=require("lodash");Nn();vp();Rl=B(j());JH();Tn=B(Z()),Tl=B(gs()),gl=B(Cn());Ae();Sf();Ze=B(Y());W_();zi();Co=require("ordered-binary"),wo=B(rt());Ui();ME=B(J());Ho();bs();TE();Vne=new Uint8Array(9);Vne[8]=192;$ne=6e4,Yne=864e5;Rl.initSync();XH=Rl.get(qn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Kne=1e4,pl=Symbol.for("version"),Wne=Symbol.for("incremental-update"),Wr=Symbol("entry"),fl=Symbol("is-saving"),jH=1,Qne=2,nA=Symbol("loaded-from-source"),Va={isNotification:!0,ensureLoaded:!1},El=1,hl=8,zne=Buffer.allocUnsafeSlow(8192),ZH=1978,Jne={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},Pme=(0,ME.convertToMS)(Rl.get(qn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(UE,"makeTable");a(sA,"attributesAsObject");a(ex,"noop");a(Xne,"setServerUtilities");jne=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(DE,"coerceType");a(tx,"isDescendantId");ml=a(()=>new Promise(setImmediate),"rest");a(iA,"when");a(LE,"updateResource");a(rx,"exists")});var qe={};Ke(qe,{database:()=>Wc,databases:()=>nt,dropDatabase:()=>qp,dropTableMeta:()=>sse,getDatabases:()=>Ln,getTables:()=>Zne,onUpdatedTable:()=>pR,readMetaDb:()=>Al,resetDatabases:()=>ese,table:()=>lt,tables:()=>Ur});function Zne(){return xE||Ln(),Ur||{}}function Ln(){if(xE)return nt;xE=!0,Ka=new Map;let e=(0,jt.getHdbBasePath)()&&(0,et.join)((0,jt.getHdbBasePath)(),zr.DATABASES_DIR_NAME),t=(0,jt.get)(zr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,jt.get)(zr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Qr.existsSync)(e)?e:(0,et.join)((0,jt.getHdbBasePath)(),zr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Qr.existsSync)(e))for(let r of(0,Qr.readdirSync)(e,{withFileTypes:!0})){let n=(0,et.basename)(r.name,".mdb");r.isFile()&&(0,et.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Al((0,et.join)(e,r.name),null,n)}if((0,Qr.existsSync)((0,Ya.getBaseSchemaPath)())){for(let r of(0,Qr.readdirSync)((0,Ya.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,et.join)((0,Ya.getBaseSchemaPath)(),r.name),s=(0,et.join)((0,Ya.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Qr.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,et.extname)(i.name).toLowerCase()===".mdb"){let o=(0,et.join)(s,i.name);Al((0,et.join)(n,i.name),(0,et.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,Qr.existsSync)(s))for(let o of(0,Qr.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,et.extname)(o.name).toLowerCase()===".mdb"&&Al((0,et.join)(s,o.name),(0,et.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,et.join)(c.path,(0,et.basename)(o+".mdb"));(0,Qr.existsSync)(u)&&Al(u,o,r,null,!0)}}for(let r in nt){let n=Ka.get(r);if(n){let s=nt[r];r.includes("delete")&&gn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(gn.trace(`delete table class ${i}`),delete s[i])}else if(delete nt[r],r==="data"){for(let s in Ur)delete Ur[s];delete Ur[FE]}}return Ka=null,nt}}function ese(){xE=!1;for(let[,e]of gi)e.needsDeletion=!0;Ln();for(let[e,t]of gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),gi.delete(e));return nt}function Al(e,t,r=cA,n,s){let i=new oA.default(e,!1);try{let o=gi.get(e);o?o.needsDeletion=!1:(o=(0,vE.open)(i),gi.set(e,o));let c=new Do.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(PE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,Qr.existsSync)(n)&&(i.path=n,_=(0,vE.open)(i),_.isLegacy=!0):_=SE(o));let l=cx(r),d=l[FE],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[S,p]=E.toString().split("/");p===""?p=h.name:p||(p=S,S=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(S);let g=f.get(S);g||f.set(S,g={attributes:[]}),(p==null||h.is_hash_attribute)&&(g.primary=h),p!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:S,primary:p}=h;if(!p){for(let Q of S)if(Q.is_hash_attribute||Q.isPrimaryKey){p=Q;break}if(!p){gn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(S)}`);continue}}let g=l[E],A={},b=[],v,G,H=typeof p.audit=="boolean"?p.audit:(0,jt.get)(zr.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration,W=p.eviction;if(g)A=g.indices,b=g.attributes,g.schemaVersion++;else{v=p.tableId,v?v>=(u.get($a)||0)&&u.putSync($a,v+1):(p.tableId=v=u.get($a),v||(v=1),u.putSync($a,v+1),u.putSync(p.key,p));let Q=new Do.default(!p.is_hash_attribute,p.is_hash_attribute);G=s_(o.openDB(p.key,Q)),G.rootStore=o,G.tableId=v}for(let Q of S){Q.attribute=Q.name;try{if(!Q.is_hash_attribute&&(Q.indexed||Q.attribute&&!Q.name)){if(!A[Q.name]){let pe=new Do.default(!Q.is_hash_attribute,Q.is_hash_attribute);A[Q.name]=o.openDB(Q.key,pe),A[Q.name].indexNulls=Q.indexNulls}let se=b.find(pe=>pe.name===Q.name);se?b.splice(b.indexOf(se),1,Q):b.push(Q)}}catch(se){gn.error("Error trying to update attribute",Q,b,A,se)}}if(!g){g=ux(l,E,UE({primaryStore:G,auditStore:_,audit:H,expirationMS:z&&z*1e3,evictionMS:W&&W*1e3,trackDeletes:P,tableName:E,tableId:v,primaryKey:p.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:A,attributes:S,schemaDefined:p.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let Q of uA)Q(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function cx(e){let t=nt[e];if(t||(e==="data"?t=nt[e]=Ur:e==="system"?Object.defineProperty(nt,"system",{value:t=Object.create(null),configurable:!0}):t=nt[e]=Object.create(null)),Ka&&!Ka.has(e)){let r=new Set;t[FE]=r,Ka.set(e,r)}return t}function ux(e,t,r){return e[t]=r,r}function Wc({database:e,table:t}){e||(e=cA),Ln();let r=cx(e),n=(0,et.join)((0,jt.getHdbBasePath)(),zr.DATABASES_DIR_NAME),s=(0,jt.get)(zr.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,jt.get)(zr.CONFIG_PARAMS.STORAGE_PATH)||((0,Qr.existsSync)(n)?n:(0,et.join)((0,jt.getHdbBasePath)(),zr.LEGACY_DATABASES_DIR_NAME));let o=(0,et.join)(n,(i?t:e)+".mdb"),c=gi.get(o);if(!c){let u=new oA.default(o,!1);c=(0,vE.open)(u),gi.set(o,c)}return c}async function qp(e){if(!nt[e])throw new Error("Schema does not exist");let t=nt[e];for(let r in t){let s=t[r].primaryStore.rootStore;gi.delete(s.path),s.status==="open"&&(await s.close(),await ix.remove(s.path))}if(e==="data"){for(let r in Ur)delete Ur[r];delete Ur[FE]}delete nt[e]}function lt({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=cA);let l=Wc({database:t,table:e}),d=nt[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,S,p;u==null&&(u=!0);let g=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 A,b;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let P=l.auditStore;P||(P=SE(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,jt.get)(zr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),gn.trace(`${e} table loading, opening primary store`);let z=new Do.default(!1,!0),W=e+"/",Q=s_(l.openDB(W,z));Q.rootStore=l,p=l.dbisDb=l.openDB(PE.INTERNAL_DBIS_NAME,g),Q.tableId=p.get($a),Q.tableId||(Q.tableId=1),p.putSync($a,Q.tableId+1),h.tableId=Q.tableId,f=ux(d,e,UE({primaryStore:Q,auditStore:P,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:Q.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:p})),f.schemaVersion=1,A=!0,H(),p.put(W,h)}S=f.indices,p=p||(l.dbisDb=l.openDB(PE.INTERNAL_DBIS_NAME,g)),f.dbisDB=p;let v=[];for(let{key:P,value:z}of p.getRange({start:!0})){let[W,Q]=P.toString().split("/");if(Q===""&&(Q=z.name),Q){if(W!==e)continue}else Q=W;if(!i.find(pe=>pe.name===Q)?.indexed&&z.indexed&&!z.isPrimaryKey){H(),A=!0,p.remove(P);let pe=f.indices[W];pe&&v.push(pe)}}let G=[];try{for(let P of i||[]){if(P.relationship)continue;let z=e+"/"+(P.name||"");Object.defineProperty(P,"key",{value:z,configurable:!0});let W=p.get(z);if(P.isPrimaryKey){if(W=W||p.get(z=e+"/")||{},o!==f.audit||(+r||void 0)!==(+W.expiration||void 0)||(+n||void 0)!==(+W.eviction||void 0)){let se=Object.assign({},W);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),A=!0,H(),p.put(z,se)}continue}W?.attribute&&!W.name&&(W.indexed=!0);let Q=!W||W.type!==P.type||W.indexed!==P.indexed||JSON.stringify(W.attributes)!==JSON.stringify(P.attributes)||JSON.stringify(W.elements)!==JSON.stringify(P.elements);if(P.indexed){let se=new Do.default(!0,!1),pe=l.openDB(z,se);(Q||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<Ol.workerData?.restartNumber)&&(A=!0,H(),W=p.get(z),(Q||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<Ol.workerData?.restartNumber)&&(A=!0,P.lastIndexedKey=W?.lastIndexedKey||!1,P.indexingPID=process.pid,pe.isIndexing=!0,Object.defineProperty(P,"dbi",{value:pe}),P.indexNulls===void 0&&(P.indexNulls=!0),G.push(P)),p.put(z,P)),W?.indexNulls&&P.indexNulls===void 0&&(P.indexNulls=!0),pe.indexNulls=P.indexNulls,S[P.name]=pe}else Q&&(A=!0,H(),p.put(z,P))}}finally{b&&b()}if(A&&(f.schemaVersion++,f.updatedAttributes()),gn.trace(`${e} table loading, running index`),G.length>0||v.length>0?f.indexingOperation=nse(f,G,v):A&&BE.signalSchemaChange(new HE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,A)for(let P of uA)P(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),gn.trace(`${e} table loaded`),f;function H(){b||l.transactionSync(()=>({then(P){b=P}}))}a(H,"startTxn")}async function nse(e,t,r){try{let n=e.schemaVersion;await BE.signalSchemaChange(new HE.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,S=(0,ox.getIndexedValues)(l[h]);if(S)for(let p=0,g=S.length;p<g;p++)E.dbi.put(S[p],_)}}),s.then(()=>u--,f=>{u--,gn.error(f)}),Ol.workerData&&Ol.workerData.restartNumber!==ax.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 s:u>rse&&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 BE.signalSchemaChange(new HE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){gn.error("Error in indexing",n)}}function sse({table:e,database:t}){let r=Wc({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 pR(e){uA.push(e)}var jt,PE,vE,et,Qr,Ya,Do,oA,zr,ix,aA,ox,BE,HE,Ol,gn,ax,cA,FE,Ur,nt,$a,uA,xE,gi,Ka,tse,rse,Ae=Re(()=>{jt=B(j()),PE=B(Et()),vE=require("lmdb"),et=require("path"),Qr=require("fs"),Ya=B(Je());Pf();Do=B(i_()),oA=B(a_()),zr=B(M()),ix=B(require("fs-extra")),aA=require("../../index"),ox=B(Mr()),BE=B(gs()),HE=B(Cn()),Ol=require("worker_threads"),gn=B(Y()),ax=B(rt());Ui();Ho();cA="data",FE=Symbol("defined-tables");(0,jt.initSync)();Ur=Object.create(null),nt=Object.create(null);(0,aA._assignPackageExport)("databases",nt);(0,aA._assignPackageExport)("tables",Ur);$a=Symbol.for("next-table-id"),uA=[],gi=new Map;a(Zne,"getTables");a(Ln,"getDatabases");a(ese,"resetDatabases");a(Al,"readMetaDb");a(cx,"ensureDB");a(ux,"setTable");a(Wc,"database");a(qp,"dropDatabase");a(lt,"table");tse=1e3,rse=10;a(nse,"runIndexing");a(sse,"dropTableMeta");a(pR,"onUpdatedTable")});var J=T((Vme,Ox)=>{"use strict";var Ri=require("path"),Ex=require("fs-extra"),Ar=Y(),lx=require("fs-extra"),qE=require("os"),ise=require("net"),ose=require("recursive-iterator"),ct=M(),ase=ZA(),_x=require("papaparse"),GE=require("moment"),{inspect:cse}=require("util"),dx=require("is-number"),kme=require("lodash"),use=require("minimist"),lse=require("https"),_se=require("http"),{hdb_errors:kE}=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)))$/,hx=require("util").promisify(setTimeout),fse=100,Ese=5,hse="",mse=4,fx={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ox.exports={isEmpty:Jr,isEmptyOrZeroLength:us,arrayHasEmptyValues:Tse,arrayHasEmptyOrZeroLengthValues:gse,buildFolderPath:Rse,isBoolean:mx,errorizeMessage:pse,stripFileExtension:Ose,autoCast:bse,autoCastJSON:px,autoCastJSONDeep:_A,removeDir:Nse,compareVersions:yse,isCompatibleDataVersion:Ise,escapeRawValue:wse,unescapeValue:Cse,stringifyProps:Dse,timeoutPromise:Mse,isClusterOperation:Pse,getClusterUser:Bse,checkGlobalSchemaTable:vse,getHomeDir:Tx,getPropsFilePath:Lse,promisifyPapaParse:Hse,removeBOM:gx,createEventPromise:xse,checkProcessRunning:Fse,checkSchemaTableExist:qse,checkSchemaExists:Rx,checkTableExists:Ax,getStartOfTomorrowInSeconds:Gse,getLimitKey:kse,isObject:Ase,isNotEmptyAndHasValue:Sse,autoCasterIsNumberCheck:Sx,backtickASTSchemaItems:Vse,isPortTaken:Use,createForkArgs:$se,autoCastBoolean:Yse,async_set_timeout:hx,getTableHashAttribute:Kse,doesSchemaExist:Wse,doesTableExist:Qse,stringifyObj:zse,ms_to_time:Jse,changeExtension:Xse,getEnvCliRootPath:dA,noBootFile:jse,httpRequest:Zse,transformReq:eie,convertToMS:tie,PACKAGE_ROOT:ct.PACKAGE_ROOT};function pse(e){return e instanceof Error?e:new Error(e)}a(pse,"errorizeMessage");function Jr(e){return e==null}a(Jr,"isEmpty");function Sse(e){return!Jr(e)&&(e||e===0||e===""||mx(e))}a(Sse,"isNotEmptyAndHasValue");function us(e){return Jr(e)||e.length===0||e.size===0}a(us,"isEmptyOrZeroLength");function Tse(e){if(Jr(e))return!0;for(let t=0;t<e.length;t++)if(Jr(e[t]))return!0;return!1}a(Tse,"arrayHasEmptyValues");function gse(e){if(us(e))return!0;for(let t=0;t<e.length;t++)if(us(e[t]))return!0;return!1}a(gse,"arrayHasEmptyOrZeroLengthValues");function Rse(...e){try{return e.join(Ri.sep)}catch{console.error(e)}}a(Rse,"buildFolderPath");function mx(e){return Jr(e)?!1:e===!0||e===!1}a(mx,"isBoolean");function Ase(e){return Jr(e)?!1:typeof e=="object"}a(Ase,"isObject");function Ose(e){return us(e)?hse:e.slice(0,-mse)}a(Ose,"stripFileExtension");function bse(e){return Jr(e)||e===""||typeof e!="string"?e:fx[e]!==void 0?fx[e]:Sx(e)===!0?Number(e):dse.test(e)?new Date(e):e}a(bse,"autoCast");function px(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(px,"autoCastJSON");function _A(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=_A(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=_A(r);n!==r&&(e[t]=n)}return e}else return px(e)}a(_A,"autoCastJSONDeep");function Sx(e){if(e.startsWith("0.")&&dx(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&dx(e))}a(Sx,"autoCasterIsNumberCheck");async function Nse(e){if(us(e))throw new Error(`Directory path: ${e} does not exist`);try{await lx.emptyDir(e),await lx.remove(e)}catch(t){throw Ar.error(`Error removing files in ${e} -- ${t}`),t}}a(Nse,"removeDir");function yse(e,t){if(us(e)){Ar.info("Invalid current version sent as parameter.");return}if(us(t)){Ar.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(yse,"compareVersions");function Ise(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Ise,"isCompatibleDataVersion");function wse(e){if(Jr(e))return e;let t=String(e);return t==="."?ct.UNICODE_PERIOD:t===".."?ct.UNICODE_PERIOD+ct.UNICODE_PERIOD:t.replace(ct.FORWARD_SLASH_REGEX,ct.UNICODE_FORWARD_SLASH)}a(wse,"escapeRawValue");function Cse(e){if(Jr(e))return e;let t=String(e);return t===ct.UNICODE_PERIOD?".":t===ct.UNICODE_PERIOD+ct.UNICODE_PERIOD?"..":String(e).replace(ct.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Cse,"unescapeValue");function Dse(e,t){if(Jr(e))return Ar.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+qE.EOL}!us(n)&&n[0]===";"?r+=" "+n+s+qE.EOL:us(n)||(r+=n+"="+s+qE.EOL)}catch{Ar.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Dse,"stringifyProps");function Tx(){let e;try{e=qE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Tx,"getHomeDir");function Lse(){let e=Ri.join(Tx(),ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return Ex.existsSync(e)||(e=Ri.join(__dirname,"../","hdb_boot_properties.file")),e}a(Lse,"getPropsFilePath");function Mse(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Mse,"timeoutPromise");async function Use(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=ise.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Use,"isPortTaken");function Pse(e){try{return ct.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ar.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Pse,"isClusterOperation");function vse(e,t){let r=(Ae(),ee(qe)).getDatabases();if(!r[e])return kE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return kE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(vse,"checkGlobalSchemaTable");function Bse(e,t){if(Jr(t)){Ar.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Jr(e)||us(e)){Ar.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){Ar.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Ar.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Bse,"getClusterUser");function Hse(){_x.parsePromise=function(e,t,r){return new Promise(function(n,s){_x.parse(e,{header:!0,transformHeader:gx,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Hse,"promisifyPapaParse");function gx(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(gx,"removeBOM");function xse(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Ar.info(`Got cluster status event response: ${cse(s)}`);try{i.cancel()}catch{Ar.error("Error trying to cancel timeout.")}n(s)})})}a(xse,"createEventPromise");async function Fse(e){let t=!0,r=0;do await hx(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 qse(e,t){let r=Rx(e);if(r)return r;let n=Ax(e,t);if(n)return n}a(qse,"checkSchemaTableExist");function Rx(e){let{getDatabases:t}=(Ae(),ee(qe));if(!t()[e])return kE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Rx,"checkSchemaExists");function Ax(e,t){let{getDatabases:r}=(Ae(),ee(qe));if(!r()[e][t])return kE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ax,"checkTableExists");function Gse(){let e=GE().utc().add(1,ct.MOMENT_DAYS_TAG).startOf(ct.MOMENT_DAYS_TAG).unix(),t=GE().utc().unix();return e-t}a(Gse,"getStartOfTomorrowInSeconds");function kse(){return GE().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){Ar.error("Got an error back ticking items."),Ar.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}=(Ae(),ee(qe)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Kse,"getTableHashAttribute");function Wse(e){let{getDatabases:t}=(Ae(),ee(qe));return t()[e]!==void 0}a(Wse,"doesSchemaExist");function Qse(e,t){let{getDatabases:r}=(Ae(),ee(qe));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=GE.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(Jse,"ms_to_time");function Xse(e,t){let r=Ri.basename(e,Ri.extname(e));return Ri.join(Ri.dirname(e),r+t)}a(Xse,"changeExtension");function dA(){if(process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=use(process.argv);if(e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(dA,"getEnvCliRootPath");var lA;function jse(){if(lA)return lA;let e=dA();dA()&&Ex.pathExistsSync(Ri.join(e,ct.HDB_CONFIG_FILE))&&(lA=!0)}a(jse,"noBootFile");function Zse(e,t){let r;return e.protocol==="http:"?r=_se:r=lse,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(Zse,"httpRequest");function eie(e){if(!e.schema&&!e.database){e.schema=ct.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(eie,"transformReq");function tie(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(tie,"convertToMS")});var Cx=T((Yme,wx)=>{"use strict";var Xr=j(),rie=Vi(),me=M(),bl=st(),qs=require("path"),{PACKAGE_ROOT:$E}=M(),bx=j(),VE=J(),Wa="/dev/null",nie=qs.join($E,"launchServiceScripts"),Nx=qs.join($E,"utility/scripts"),sie=qs.join(Nx,me.HDB_RESTART_SCRIPT),yx=qs.resolve($E,"dependencies",`${process.platform}-${process.arch}`,bl.NATS_BINARY_NAME);function Ix(){let t=rie.licenseSearch().ram_allocation||me.RAM_ALLOCATION_ENUM.DEFAULT,r=me.MEM_SETTING_KEY+t,n={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return VE.noBootFile()&&(n[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=VE.getEnvCliRootPath()),{name:me.PROCESS_DESCRIPTORS.HDB,script:me.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:$E}}a(Ix,"generateMainServerConfig");var iie=9930;function oie(){Xr.initSync(!0);let e=Xr.get(me.CONFIG_PARAMS.ROOTPATH),t=qs.join(e,"clustering",bl.NATS_CONFIG_FILES.HUB_SERVER),r=qs.join(Xr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=bx.get(me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=bl.LOG_LEVEL_FLAGS[Xr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==iie?"-"+n:""),script:yx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Xr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(oie,"generateNatsHubServerConfig");var aie=9940;function cie(){Xr.initSync(!0);let e=Xr.get(me.CONFIG_PARAMS.ROOTPATH),t=qs.join(e,"clustering",bl.NATS_CONFIG_FILES.LEAF_SERVER),r=qs.join(Xr.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY),me.LOG_NAMES.HDB),n=bx.get(me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=bl.LOG_LEVEL_FLAGS[Xr.get(me.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==aie?"-"+n:""),script:yx,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Xr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Wa,i.error_file=Wa),i}a(cie,"generateNatsLeafServerConfig");function uie(){Xr.initSync();let e=qs.join(Xr.get(me.CONFIG_PARAMS.LOGGING_ROOT),me.LOG_NAMES.HDB),t={name:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:me.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:nie,autorestart:!1};return Xr.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Wa,t.error_file=Wa),t}a(uie,"generateClusteringUpgradeV4ServiceConfig");function lie(){let e={[me.PROCESS_NAME_ENV_PROP]:me.PROCESS_DESCRIPTORS.RESTART_HDB};return VE.noBootFile()&&(e[me.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=VE.getEnvCliRootPath()),{...{name:me.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Nx},script:sie}}a(lie,"generateRestart");function _ie(){return{apps:[Ix()]}}a(_ie,"generateAllServiceConfigs");wx.exports={generateAllServiceConfigs:_ie,generateMainServerConfig:Ix,generateRestart:lie,generateNatsHubServerConfig:oie,generateNatsLeafServerConfig:cie,generateClusteringUpgradeV4ServiceConfig:uie}});var DT=T((Qme,kx)=>{"use strict";var Le=M(),die=J(),Gs=bT(),Nl=Nt(),ls=st(),Ai=Cx(),YE=j(),Oi=Y(),fie=Ns(),{startWorker:Dx,onMessageFromWorkers:Eie}=rt(),hie=ua(),Wme=require("util"),mie=require("child_process"),pie=require("fs"),{execFile:Sie}=mie,Ie;kx.exports={enterPM2Mode:Tie,start:bi,stop:fA,reload:Mx,restart:Ux,list:EA,describe:vx,connect:ks,kill:bie,startAllServices:Nie,startService:hA,getUniqueServicesList:Bx,restartAllServices:yie,isServiceRegistered:Hx,reloadStopStart:xx,restartHdb:Px,deleteProcess:Aie,startClusteringProcesses:qx,startClusteringThreads:Gx,isHdbRestartRunning:Oie,isClusteringRunning:wie,stopClustering:Iie,reloadClustering:Cie};var yl=!1;Eie(e=>{e.type==="restart"&&YE.initSync(!0)});function Tie(){yl=!0}a(Tie,"enterPM2Mode");function ks(){return Ie||(Ie=require("pm2")),new Promise((e,t)=>{Ie.connect((r,n)=>{Oi.setupConsoleLogging(),r&&t(r),e(n)})})}a(ks,"connect");var Or,gie=10,Lx;function bi(e,t=!1){if(yl)return Rie(e);let r=Sie(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Or.indexOf(r);o>-1&&Or.splice(o,1),!Lx&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<gie&&(pie.existsSync(Gs.getHubConfigPath())?bi(e):(await Gs.generateNatsConfig(!0),bi(e),await new Promise(c=>setTimeout(c,3e3)),await Gs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=YE.get(Le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&ls.LOG_LEVEL_HIERARCHY[o]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",E,n,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=ls.LOG_LEVELS[f]}if(ls.LOG_LEVEL_HIERARCHY[o]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?Oi.OUTPUTS.STDERR:Oi.OUTPUTS.STDOUT;Oi.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Or=[],!Or&&!t){let i=a(()=>{Lx=!0,Or&&(Or.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)}Or.push(r)}a(bi,"start");function Rie(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}Ie.start(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Rie,"startWithPM2");function fA(e){if(!yl){for(let t of Or||[])t.name===e&&(Or.splice(Or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}Ie.stop(e,async(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.delete(e,(i,o)=>{i&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(o)})})})}a(fA,"stop");function Mx(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}Ie.reload(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Mx,"reload");function Ux(e){if(!yl)for(let t of Or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}Ie.restart(e,(n,s)=>{Ie.disconnect(),t(s)})})}a(Ux,"restart");function Aie(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}Ie.delete(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(Aie,"deleteProcess");async function Px(){await bi(Ai.generateRestart())}a(Px,"restartHdb");async function Oie(){let e=await EA();for(let t in e)if(e[t].name===Le.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Oie,"isHdbRestartRunning");function EA(){return new Promise(async(e,t)=>{try{await ks()}catch(r){t(r)}Ie.list((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(EA,"list");function vx(e){return new Promise(async(t,r)=>{try{await ks()}catch(n){r(n)}Ie.describe(e,(n,s)=>{n&&(Ie.disconnect(),r(n)),Ie.disconnect(),t(s)})})}a(vx,"describe");function bie(){if(!yl){for(let e of Or||[])e.kill();Or=[];return}return new Promise(async(e,t)=>{try{await ks()}catch(r){t(r)}Ie.killDaemon((r,n)=>{r&&(Ie.disconnect(),t(r)),Ie.disconnect(),e(n)})})}a(bie,"kill");async function Nie(){try{await qx(),await Gx(),await bi(Ai.generateAllServiceConfigs())}catch(e){throw Ie?.disconnect(),e}}a(Nie,"startAllServices");async function hA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Le.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ai.generateMainServerConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ai.generateNatsIngestServiceConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ai.generateNatsReplyServiceConfig();break;case Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ai.generateNatsHubServerConfig(),await bi(r,t),await Gs.removeNatsConfig(e);return;case Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ai.generateNatsLeafServerConfig(),await bi(r,t),await Gs.removeNatsConfig(e);return;case Le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ai.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await bi(r)}catch(r){throw Ie?.disconnect(),r}}a(hA,"startService");async function Bx(){try{let e=await EA(),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 Ie?.disconnect(),e}}a(Bx,"getUniqueServicesList");async function yie(e=[]){try{let t=!1,r=await Bx();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 Ux(o))}t&&await xx(Le.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ie?.disconnect(),t}}a(yie,"restartAllServices");async function Hx(e){if(Or?.find(r=>r.name===e))return!0;let t=await hie.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Hx,"isServiceRegistered");async function xx(e){let t=e===Le.PROCESS_DESCRIPTORS.HDB?YE.get(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):YE.get(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await vx(e),n=die.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await fA(e),await hA(e)):e===Le.PROCESS_DESCRIPTORS.HDB?await Px():await Mx(e)}a(xx,"reloadStopStart");var Fx;async function qx(e=!1){for(let t in Le.CLUSTERING_PROCESSES){let r=Le.CLUSTERING_PROCESSES[t];await hA(r,e)}}a(qx,"startClusteringProcesses");async function Gx(){Fx=Dx(Le.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Le.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Nl.createWorkQueueStream(ls.WORK_QUEUE_CONSUMER_NAMES),await Nl.updateIngestStreamConsumer(),await Nl.updateLocalStreams();let e=await fie.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Le.PRE_4_0_0_VERSION){Oi.info("Starting clustering upgrade 4.0.0 process"),Dx(Le.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Gx,"startClusteringThreads");async function Iie(){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 Fx.terminate();else{let t=Le.CLUSTERING_PROCESSES[e];await fA(t)}}a(Iie,"stopClustering");async function wie(){for(let e in Le.CLUSTERING_PROCESSES){let t=Le.CLUSTERING_PROCESSES[e];if(await Hx(t)===!1)return!1}return!0}a(wie,"isClusteringRunning");async function Cie(){await Gs.generateNatsConfig(!0),await Nl.reloadNATSHub(),await Nl.reloadNATSLeaf(),await Gs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Gs.removeNatsConfig(Le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Cie,"reloadClustering")});var mA=DT(),Vx=M();a(async function(){try{let t=await mA.describe(Vx.PROCESS_DESCRIPTORS.HDB);for(let r of t)await mA.reload(r.pm_id);await mA.deleteProcess(Vx.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|